尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
編輯:zone
來源:Python知識圈
閱讀文本大概需要 5 分鐘。
源碼請看留言區
又到周末了,pk 哥抽空對搶票程序作了優化,並把優化後的程序做打包處理,打包後沒有 Python 環境的電腦也可以正常運行程序了。前兩篇關於搶票的文章沒看可點下方鏈接查看。
目錄
-
優化瀏覽器驅動路徑
-
優化車站cookie值
-
優化參數輸入
-
打包搶票程序
-
源碼獲取
優化瀏覽器驅動路徑
之前的代碼中會讓大家在初始化函數中輸入自己瀏覽器驅動的本地路徑,很繁瑣,可能有些夥伴忘了輸入或者有轉義字符的問題。這次 pk 哥直接把 driver 的路徑賦值這一行代碼拿掉了。
註釋掉這行代碼的後果很嚴重,程序會找不到驅動去啟動瀏覽器,哈哈。怎麼辦?很簡單,我們把下載解壓後的驅動 chromedriver 放在 Python 的安裝路徑下即可解決。
優化車站cookie值
之前運行程序前會讓大家去瀏覽器中調試模式中查看對應城市的 cookie 值,把 cookie 填入到出發地和目的地的參數里,才能搶你想要的車次的火車票。能不能直接輸入我們熟悉的站名,然後代碼自動轉化為 cookie 呢?通過觀察分析,我們發現,這些 cookie 值前部分是中文對應的 Unicode 碼,我們用轉碼的方法把中文轉換成 Unicode 碼。
後面 %2c 是固定的,最後的大寫的字母是車站的縮寫,這些縮寫哪里獲取呢?12306 提供了一個接口,鏈接如下。
https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9058
這個接口我們直接瀏覽器打開可以看到所有的車站信息。
接下來,我們需要對這些信息進行處理,這個思路和方法來自公眾號一位讀者,在上一篇文章中,他也給我留言了並告知了優化的方法,非常感謝。他把我上一篇的代碼優化後放在了 GitHub 上,地址如下。歡迎大家一起優化這個程序。
https://github.com/Archiewyq/12306/blob/master/12306.example.py
處理後把 Unicode 碼和車站的簡寫拼接成完成的車站 cookie 值。
優化參數輸入
這個優化是針對於下面的打包做準備的,因為打包後我們看不到源碼,只能用輸入的形式來改變這些變量參數,輸入的方法 Python3 中用的是 input()。如果不想每次輸入的話可以把 input 方法替換成之前固定字符串的寫法就行。
打包搶票程序
現在講講本文的另一個知識點,Python 程序打包。我們知道,Python 腳本如果在沒有安裝 Python 的機器上不能運行,所以將腳本打包成 exe 文件,降低腳本對環境的依賴性,同時運行更加迅速。但這個搶票程序需要輸入的配置項比較多,其實不太適合打包,大家可以作為一個知識點來學,對於那些基本沒有配置項的程序來說非常合適。
打包的庫是 pyinstaller,用 pip 命令直接安裝。
pipinstallpyinstaller
安裝成功後,我們就可以用 pyinstaller 庫對 Python 文檔進行打包了,打包 Python 文檔的命令格式如下:
pyinstaller[options]script[script...]|specfile
option 參數有很多,大家有興趣的可參考官方文檔。
https://pyinstaller.readthedocs.io/en/stable/usage.html
今天我只用到一種 option,就是 -f:僅生成一個可執行文件。執行命令後需要等待幾分鐘。
顯示 successfully 表示打包成功,exe 包在你的代碼同一目錄下,exe 文件在打包時自動新建的 dist 目錄下。
打開 dist 目錄下的 exe 文件,在 windows 系統下雙擊文件即可運行程序做到搶票。顯示的信息頁面和我們用編輯器看到的是一樣的。
ps:本次程序去掉了發郵件功能的代碼。
pk 哥建了一個火車票助力群,也是為了讓大家有更多的途徑搶到票,回家過年,大家可以在群里可以相互點點小程序助力,這樣搶到額概率更大一下。群里也歡迎討論搶票技術,討論 Python,一起成長。
加我微信,備註【車票】拉你進搶票助力群!
往期推薦: