需求和實現原理
每到春節國慶這種長假,搶火車票就成了最熱門的話題。很多網站也推出了一些搶票軟體,有些收費有些免費。
我們說,python是萬能的!那麼,python能幫我自動預訂(搶)火車票嗎?答案是肯定的:)要不然我也不會做這個視頻教程了。
python有很多方法去實現搶票,其基本原理,就是讓程序自動模擬人去操作12306網站。因為電腦程式的動作肯定比人工快,它能毫秒級刷新網頁(當然,前提是你們家的電腦和網速足夠快),所以程序搶票成功率就比人工要快很多了。
玩python,都有一個同樣的套路。那就是去網上找一個好用的第三方庫(python的強大就在於此!你能想到的功能,基本上都能找到人家寫好的庫)。我們這個需求,最核心的功能,是如何操作網頁。我找到了一個庫,叫做splinter,官網文檔如下:
https://splinter-docs-zh-cn.readthedocs.io/zh/latest/
Splinter 是用 Python 開發的一個開源web自動化測試的工具集。它可以幫你自動化瀏覽器的行為,比如瀏覽 URLs 並和頁面進行交互。
通俗點,就是我們可以使用splinter的接口,去操作任意網頁的行為,比如跳轉到某個url啊、點擊網頁裡面某個按鈕啊、選擇網頁裡面的某個多選框啊...
splinter的安裝,和其它第三方庫是一樣的,你可以直接在pycharm中安裝,也可以在shell裡面執行pip命令:
pip install splinter
另外,splinter僅僅是一個通用的,可以操作網頁的工具。如果我們要實現12306的訂票,那麼我們還需要對12306網站進行分析。
12306網站的訂票流程主要涉及三個頁面:登錄頁面、餘票查詢頁面、訂單頁面。
一、登錄頁面
由於12306有防機器人登錄的驗證,所以登錄必須人工完成,無法自動。你可以掃碼或者帳號密碼登錄。
二、餘票查詢頁面
這個頁面是重點了!我們所謂的搶票,主要就是要不停地快速刷新這個頁面,發現能預訂,就趕緊點擊。
三、訂單頁面
這個頁面我們要選擇乘車人。注意,為了方便,乘車人需要提前在你的帳號裡面錄入好。
然後點擊提交訂單,就下單成功。最後只需要你半個小時內完成支付即可。
更多詳細的,看上面的視頻吧,源碼在老地方,可以下下來慢慢研究。
最後囉嗦幾句,我不推崇把我的源碼下載下來後,就開始運行,運行不成功就私信問我是怎麼回事。
我提供的源碼並不是商用產品,我更多是保證功能正確可用,但是穩定性、兼容性、性能等等,可能就不會考慮那麼多。所以裡面肯定有各種各樣的問題。
你應該去讀懂源碼,等你讀懂之後,你自己就知道是哪裡出問題了。定位並改正問題,本身就是很好的學習過程,好的程式設計師都是被無數bug折磨過來的:)
學習編程,一定一定要自己親自動手去寫代碼,去閱讀代碼,否則光看教程就是看個熱鬧而已。
你希望用python解決什麼問題?歡迎私信我!我去研究研究。