指令碼實現及實踐
最近在學Python,所以用Python寫了這個12306搶票指令碼,分享出來,與大家共同交流和學習,有不對的地方,請大家多多指正。話不多說,進入正題:
這個指令碼目前只能刷一趟車的,人數可以是多個,支援選取作為型別等。
實現思路是splinter.browser模擬瀏覽器登陸和操作,由於12306的驗證碼不好自動識別,所以,驗證碼需要使用者進行手動識別,併進行登陸操作,之後的事情,就交由指令碼來操作就可以了,下麵是我測試時候的一些截圖:
第一步:如下圖,首先輸入搶票基本資訊
第二步:然後進入登入頁,需要手動輸入驗證碼,並點選登陸操作
第三步:登陸後,自動進入到搶票頁面,如下圖這樣的
最後:就是坐等刷票結果就好了,如下圖這樣,就說是刷票成功了,刷到票後,會進行簡訊和郵件的通知,請記得及時前往12306進行支付,不然就白搶了。
執行環境
Python執行環境:python3.6
用到的模組:re、splinter、time、sys、httplib2、urllib、smtplib、email
未安裝的模組,請使用pip instatll進行安裝,例如:pip install splinter
如下程式碼是這個指令碼所有用到的模組引入:
準備城市名COOKIE
刷票前資訊準備,我主要說一下始發站和目的地的cookie值獲取,因為輸入城市的時候,需要透過cookie值,cookie值可以透過12306官網,然後在F12(相信所有的coder都知道這個吧)的network裡面的查詢請求cookie中可以看到,在請求的essay-header裡面可以找到,_jc_save_fromStation值是出發站的cookie,_jc_save_toStation的值是目的地的cookie,然後加入到程式碼裡的城市的cookie字典city_list裡即可,鍵是城市的首字母,值是cookie值的形式。
模擬登陸操作
搶票,肯定需要先登入,我這裡模擬的登入操作,會自動填充12306的賬號名和密碼,當然,你也可以在開啟的瀏覽器中修改賬號和密碼,實現的關鍵程式碼如下:
登入之後,就是控制刷票的各種操作處理了,這裡,我就不貼程式碼了,因為程式碼比較多,別擔心,在最後,我會貼出完整的程式碼的。
簡訊和郵件通知
當刷票成功後,我會進行簡訊和郵件的雙重通知,當然,這裡簡訊通知的平臺,就看你用那個具體來修改程式碼了,我用的是互億無線的體驗版的免費簡訊通知介面;傳送郵件模組我用的是smtplib,傳送郵件伺服器用的是163郵箱,如果用163郵箱的話,你還沒有設定客戶端授權密碼,記得先設定客戶端授權密碼就好了,挺方便的。以下是主要實現程式碼:
原始碼分享
說了那麼多,感覺都是說了好多廢話啊,哈哈,不好意思,耽誤大家時間來看我瞎扯了,我貼上大家最關心的原始碼,請接碼,大家在嘗試執行過程中,有任何問題,可以給我留言或者私信我,我看到都會及時回覆大家的: