<font color="red">2024/01/10 正常運行中,注意chromedriver版本 </font> --- ## 需求套件 * selenium 自動化操作 (需配合chromedriver使用) -Select 操作下拉選單 -NoSuchElementException 新增NoSuchElementException錯誤 * requests 爬取需要資料 * ddddocr 驗證碼光學圖形識別 * prettytable 列印好看的表格 * pyinstaller 打包程式使用 * datetime 日期 * pyfiglet 列印好看ASCII Art (非必要)  ## 列印高鐵時刻表 ### 讀取從資料平台的站名json檔 打開名為THSR_Station.json的JSON文件,並使用json.load方法將文件中的內容加載下來。  根據使用者輸入的出發站名和抵達站名,尋找相應的站點資訊。 <font color="red">資料平台上站名與高鐵網站上爬蟲的拼音拼法不同(透過統一json檔內的站名解決問題)</font>  創建一個字典,然後撰寫要向高鐵網站發送POST請求的數據,接著使用requests.post()向指定的URL發送POST請求。  從 result 中獲取符合條件的高鐵時刻表資料,並將這些資料以表格的形式輸出。  獲取高鐵各類型票價資訊並以表格形式輸出(前十筆資料)。  結果輸出如下:  --- ## 利用selenium進行自動訂票 從 JSON 檔案中讀取使用者帳戶資訊。  順序分別為: 商務/經濟艙、靠窗/靠走道、身分證、電話  使用selenium時會出現以下,而高鐵是可以偵測出來而拒絕連線的  所以透過chromedriver設定去除自動操作時headline,便可成功連入高鐵官網  先接受網站的 Cookie ,然後找到網頁中各指定 ID 的元素,再將車票種類、身分證字號等訊息填寫進去。  找出驗證碼那格,然後利用 ddddocr 文字識別庫來進行對驗證碼圖片的識別,將識別出的文字填寫進去。  ddddocr是來自對岸的免費光學圖形識別工具,目前網路上大部分都需要付費的,由於是免費的,所以會有不穩的問題,透過是否獲得下個頁面的elements來確認是否驗證成功,如果失敗是會原頁F5的,透過這個機制來運行迴圈直到成功驗證。  對網頁元素進行提取資料。  顯示訂票相關資訊,然後將提取內容寫進txt檔內。  結果如下:  紀錄的txt檔  --- ## 外觀(非必要) 用pyfiglet產生好看的ASCII文字藝術當開頭   ## 打包程式 最後用pyinstaller打包,這邊不詳述,但有一個重要的地方 <font color="red">部分的套件會有打包的問題,透過以下方式解決</font> 先打包一次,會失敗,並產生程式的SPEC檔  透過修過修改這部分,便可正常打包(原本此處是空的) ``` datas=[('C:/Users/asus/AppData/Local/Programs/Python/Python310/Lib/site-packages/onnxruntime/capi/onnxruntime_providers_shared.dll','onnxruntime\\capi'),('C:/Users/asus/AppData/Local/Programs/Python/Python310/Lib/site-packages/ddddocr/common.onnx','ddddocr'),('C:/Users/asus/AppData/Local/Programs/Python/Python310/Lib/site-packages/pyfiglet/fonts/standard.flf','pyfiglet/fonts')], hiddenimports=['pyfiglet.fonts'], ```  ### 最後結果  ## 參考內容 > [当我用Python实现了12306火车票自动抢票之后,全班的抢票任务都交给了我!](https://www.youtube.com/watch?v=IDG6rG6jyOw&t=3s&ab_channel=%E8%BD%BB%E6%9D%BE%E5%AD%A6python) > [台灣高鐵](https://www.thsrc.com.tw/)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.