此專案是基於 元智選課機器人 的修改版
在一次查尋資料的過程中了解到許多的 OCR 模型,於是便選定 TrOCR 模型,並使用上萬張驗證碼 fine-tune 它,使其可以勝任辨識驗證碼的任務。接著再將這個訓練好的模型結合原先的選課機器人,並優化部分流程,於是,此專案就誕生了。
-
安裝完成之後
- 若為 Windows 請開啟 Anaconda Prompt
- 若為 MacOS 或 Linux 請開啟 terminal
-
依序執行下面的指令,建立此專案所需的環境
conda create -n course_bot -c conda-forge python=3.11
pip install pillow beautifulsoup4 requests transformers sentencepiece jiwer datasets evaluate accelerate protobuf matplotlib tensorboard
-
啟動剛剛安裝的環境
conda activate course_bot
-
下載此專案,並解壓縮
-
於解壓縮後的資料夾中,找到
course_list.json
,使用文字編輯器打開。 打開後,你會看到內容如下。{ "course_list": [ "系所代號,課號,班別", "系所代號,課號,班別", "系所代號,課號,班別" ] }
-
請將課程以
"系所代號,課號,班別"
格式存入。舉例而言,若你想搶「全民國防教育軍事訓練課程-全民國防」,則你的course_list
應該如下{ "course_list": [ "903,MT115,A" ] }
-
若你想搶不只一門課,則你的
course_list
應該如下{ "course_list": [ "903,MT115,A", "903,MT110,A", "901,FC003,A" <- 請注意最後一個不需要逗號 ] }
-
下載已訓練好的模型檔案,解壓縮後置於
bot.py
同一目錄底下
第一次跑需要一點時間,建議選課系統開放前幾分鐘,就先執行此程式讓它掛著。
python bot.py
此處將說明對原本的元智選課機器人進行了哪些流程上的優化。
- 使用者直接在程式執行後於終端機輸入帳號,密碼則使用
getpass.getpass()
的方式不顯示於終端機,避免使用原本的方法將帳密儲存於accounts.ini
中,減少洩漏的風險 - 將辨識驗證碼模型由 CNN 改為已 fine-tune 的 TrOCR-small-printed ,提升辨識的準確度
- 當登入失敗時:
- 若為驗證碼錯誤,則告知使用者程式會再次嘗試登入
- 若為其他原因導致登入失敗,則抓取 javascript alert msg 的內容,顯示於終端機告知使用者錯誤訊息為何,避免使用 "Login Failed" 來代表所有錯誤訊息
若使用者於選課清單打的 "系所代號,課號,班別" 不存在於選課系統中,則
- 先將該選項從選課清單中移除
- 根據打錯的部分告知該選項是 "系所代號不存在" 還是 "系所查無此課程"
- 繼續往下執行程式碼
避免原先在顯示 "Wrong coursesList" 後直接結束程式,使用者必須一一檢查並更正錯誤選項後,才能重新執行程式
- 此階段前五秒不間斷的進行搶課,之後則每三秒搶一次 考量到當選課系統一開放時,可以用最快的速度將想搶的課程都搶好幾輪(取決於選課清單的長度,若只有一門課則約可搶 50 ~ 60幾輪),提升搶到的機率,但速度若一直都這麼快很容易被系統判定異常甚至被封號,所以只有前五秒是如此,之後為每三秒一次
- 若有課程其狀態為以下,則從選課清單中移除,避免每一輪都浪費時間搶根本不能搶的課
- 此課程必須開課系所的學生才可以加選
- 此課程必須開課學院的學生才可以加選
- 此課程為研究所的課,僅開放研究生選修!
- 此課程目前不開放加選!
- 本科目有設定可選課學生之班級,您的班級不在其中
- 此課程您已修及格過,不可再選!
- 無法加選!!欲加選課程和下列己選的課程衝堂!
- 其他上述以外的訊息
- 網路異常: 因不確定何時會恢復正常,所以會持續嘗試搶課,避免原先遇到這種狀況時直接報錯後終止
- 未知的錯誤: 若有遇到非預期的錯誤,則可至 log 檔裡查看錯誤訊息
- 元智大學選課系統與課程查詢系統連結
- 各系所代號對照表
系所代號 | 名稱 | 系所代號 | 名稱 | 系所代號 | 名稱 |
---|---|---|---|---|---|
000 | 選讀生 | 332 | 電機碩乙組 | 700 | 資訊學院 |
002 | 外選生 | 333 | 電機碩丙組 | 701 | 資管系 |
122 | 課務組 | 352 | 機械博 | 702 | 資傳系 |
125 | 教學卓越中心 | 353 | 化材博 | 705 | 資訊英專 |
130 | 學務處 | 355 | 工管博 | 721 | 資管碩 |
160 | 資服處 | 359 | 電機博甲組 | 722 | 資傳碩 |
207 | 終身教育部 | 360 | 電機博乙組 | 723 | 資社碩 |
300 | 工學院 | 361 | 電機博丙組 | 724 | 資工碩 |
302 | 機械系 | 500 | 管理學院 | 725 | 生醫碩 |
303 | 化材系 | 505 | 管理學院學士班 | 751 | 資管博 |
304 | 資工系 | 530 | 經營管理碩 | 754 | 資工博 |
305 | 工管系 | 531 | 財會碩 | 800 | 電通學院 |
309 | 工程英專 | 532 | 管理碩專 | 900 | 學術單位 |
310 | 電通英專 | 554 | 管理博 | 901 | 通識 |
311 | 電機系甲組 | 600 | 人社院 | 903 | 軍訓室 |
312 | 電機系乙組 | 601 | 應外系 | 904 | 體育室 |
313 | 電機系丙組 | 602 | 中語系 | 905 | 校際 |
320 | 永續學士後專班 | 603 | 藝設系 | 906 | 國際語言文化中心 |
322 | 機械碩 | 604 | 社政系 | 907 | 全球事務處 |
323 | 化材碩 | 608 | 人社英專 | 908 | 磨課師 |
325 | 工管碩 | 621 | 應外碩 | A00 | 醫護學院 |
326 | 電機碩 | 622 | 中語碩 | A11 | 護理系 |
329 | 生技碩 | 623 | 藝設碩 | A21 | 醫研所 |
330 | 先能碩 | 624 | 社政碩 | ||
331 | 電機碩甲組 | 656 | 文產博 |