Skip to content

sunsun8170/YZU-Course-Bot-v2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

yzuCourseBot v2 元智大學選課機器人 第二版

此專案是基於 元智選課機器人 的修改版

專案說明

在一次查尋資料的過程中了解到許多的 OCR 模型,於是便選定 TrOCR 模型,並使用上萬張驗證碼 fine-tune 它,使其可以勝任辨識驗證碼的任務。接著再將這個訓練好的模型結合原先的選課機器人,並優化部分流程,於是,此專案就誕生了。

使用方法

建置環境

  1. 請先下載 Anaconda 或 Miniconda,並根據你的作業系統按照官網的安裝方式進行安裝

  2. 安裝完成之後

    • 若為 Windows 請開啟 Anaconda Prompt
    • 若為 MacOS 或 Linux 請開啟 terminal
  3. 依序執行下面的指令,建立此專案所需的環境

    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
  4. 啟動剛剛安裝的環境

    conda activate course_bot

基本設定

  1. 下載此專案,並解壓縮

  2. 於解壓縮後的資料夾中,找到 course_list.json,使用文字編輯器打開。 打開後,你會看到內容如下。

    {
      "course_list": [
        "系所代號,課號,班別",
        "系所代號,課號,班別",
        "系所代號,課號,班別"
      ]
    }
  3. 請將課程以 "系所代號,課號,班別" 格式存入。舉例而言,若你想搶「全民國防教育軍事訓練課程-全民國防」,則你的 course_list 應該如下

    {
      "course_list": [
        "903,MT115,A"
      ]
    }
  4. 若你想搶不只一門課,則你的 course_list 應該如下

    {
      "course_list": [
        "903,MT115,A",
        "903,MT110,A",
        "901,FC003,A"  <- 請注意最後一個不需要逗號
      ]
    }
  5. 下載已訓練好的模型檔案,解壓縮後置於 bot.py 同一目錄底下

開始執行

第一次跑需要一點時間,建議選課系統開放前幾分鐘,就先執行此程式讓它掛著。

python bot.py

流程優化

此處將說明對原本的元智選課機器人進行了哪些流程上的優化。

登入階段

  1. 使用者直接在程式執行後於終端機輸入帳號,密碼則使用 getpass.getpass() 的方式不顯示於終端機,避免使用原本的方法將帳密儲存於 accounts.ini 中,減少洩漏的風險
  2. 將辨識驗證碼模型由 CNN 改為已 fine-tune 的 TrOCR-small-printed ,提升辨識的準確度
  3. 當登入失敗時:
    • 若為驗證碼錯誤,則告知使用者程式會再次嘗試登入
    • 若為其他原因導致登入失敗,則抓取 javascript alert msg 的內容,顯示於終端機告知使用者錯誤訊息為何,避免使用 "Login Failed" 來代表所有錯誤訊息

驗證選課清單階段

若使用者於選課清單打的 "系所代號,課號,班別" 不存在於選課系統中,則

  1. 先將該選項從選課清單中移除
  2. 根據打錯的部分告知該選項是 "系所代號不存在" 還是 "系所查無此課程"
  3. 繼續往下執行程式碼

避免原先在顯示 "Wrong coursesList" 後直接結束程式,使用者必須一一檢查並更正錯誤選項後,才能重新執行程式

搶課階段

  1. 此階段前五秒不間斷的進行搶課,之後則每三秒搶一次 考量到當選課系統一開放時,可以用最快的速度將想搶的課程都搶好幾輪(取決於選課清單的長度,若只有一門課則約可搶 50 ~ 60幾輪),提升搶到的機率,但速度若一直都這麼快很容易被系統判定異常甚至被封號,所以只有前五秒是如此,之後為每三秒一次
  2. 若有課程其狀態為以下,則從選課清單中移除,避免每一輪都浪費時間搶根本不能搶的課
    • 此課程必須開課系所的學生才可以加選
    • 此課程必須開課學院的學生才可以加選
    • 此課程為研究所的課,僅開放研究生選修!
    • 此課程目前不開放加選!
    • 本科目有設定可選課學生之班級,您的班級不在其中
    • 此課程您已修及格過,不可再選!
    • 無法加選!!欲加選課程和下列己選的課程衝堂!
    • 其他上述以外的訊息

例外情況處理

  • 網路異常: 因不確定何時會恢復正常,所以會持續嘗試搶課,避免原先遇到這種狀況時直接報錯後終止
  • 未知的錯誤: 若有遇到非預期的錯誤,則可至 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 文產博

About

元智大學選課機器人

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages