1. 程式人生 > >「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

最近在學Python,所以用Python寫了這個12306搶票指令碼,分享出來,與大家共同交流和學習:

實現思路是splinter.browser模擬瀏覽器登陸和操作,由於12306的驗證碼不好自動識別,所以,驗證碼需要使用者進行手動識別,並進行登陸操作。

之後的事情,就交由指令碼來操作就可以了,下面是我測試時候的一些截圖:

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

第一步:如下圖,首先輸入搶票基本資訊

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

第二步:然後進入登入頁,需要手動輸入驗證碼,並點選登陸操作

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

第三步:登陸後,自動進入到搶票頁面,如下圖這樣的圖片描述

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

最後:就是坐等刷票結果就好了,如下圖這樣,就說是刷票成功了,刷到票後,會進行簡訊和郵件的通知,請記得及時前往12306進行支付,不然就白搶了。

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

下面是程式碼實現部分:

一、語言環境及相關模組

Python執行環境:python3.6

用到的模組:re、splinter、time、sys、httplib2、urllib、smtplib、email

未安裝的模組,請使用pip instatll進行安裝,例如:pip install splinter

如下程式碼是這個指令碼所有用到的模組引入:

<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">import re
from splinter.browser import Browser
from time import sleep
import sys
import httplib2
from urllib import parse
import smtplib
from email.mime.text import MIMEText
</pre>

二、刷票前資訊準備

因為輸入城市的時候,需要通過cookie值,我主要說一下始發站和目的地的cookie值獲取。

cookie值可以通過12306官網,然後在F12(相信所有的coder都知道這個吧)的network裡面的查詢請求cookie中可以看到,在請求的header裡面可以找到,_jc_save_fromStation值是出發站的cookie,_jc_save_toStation的值是目的地的cookie,然後加入到程式碼裡的城市的cookie字典city_list裡即可,鍵是城市的首字母,值是cookie值的形式。

三、模擬登陸

搶票,肯定需要先登入,我這裡模擬的登入操作,會自動填充12306的賬號名和密碼,當然,你也可以在開啟的瀏覽器中修改賬號和密碼,實現的關鍵程式碼如下:

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

四、刷票中處理

登入之後,就是控制刷票的各種操作處理了,這裡,我就不貼程式碼了,因為程式碼比較多,別擔心,在最後,我會貼出完整的程式碼的。

五、郵件及簡訊通知

當刷票成功後,我會進行簡訊和郵件的雙重通知,當然,這裡簡訊通知的平臺,就看你用那個具體來修改程式碼了,我用的是互億無線的體驗版的免費簡訊通知介面;傳送郵件模組我用的是smtplib,傳送郵件伺服器用的是163郵箱,如果用163郵箱的話,你還沒有設定客戶端授權密碼,記得先設定客戶端授權密碼就好了,挺方便的。以下是主要實現程式碼:

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

說了那麼多,下面我貼上大家最關心的原始碼,請接碼。另外可以在GitHub檢視最新原始碼:https://github.com/gxcuizy/Python/blob/master/12306%E6%8A%A2%E7%A5%A8/new_qiangpiao.py

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

「乾貨」你還在苦逼地邀請助力嗎,Python3.6輕鬆自動搶火車票

最後

原始碼進群:943752371獲取,還可以獲取更多Python入門學習資料!