實測兩款GitHub開源插件,坑都幫你踩過了
本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
今天,已經(jīng)可以搶過完年回來的火車票了。
如果你對自己手速和市面上的各種“加速包”都沒什么信心的話,不妨試試用程序員的手段搶票?
況且,12306官方宣布屏蔽了一大批付費搶票軟件,這也意味著你即使給這些軟件付了會員費,也依舊搶不到票。
所以只能回到最初的手動搶票?No!No!No!
GitHub上有兩個“年經(jīng)”項目,每到春運前一段時間,就會定時定點的登頂熱榜,助力一代又一代程序員和姿勢豐富的非程序員們搶票回家。

那么,這兩個項目究竟怎么用?好不好用?
和手動搶票、第三方軟件搶票比起來優(yōu)勢是否明顯?
安裝使用過程中,會不會遇到不可名狀的bug?
今天為大家一一橫評。
霸占熱榜的兩個項目
排在GitHub熱榜第1的項目名字簡單粗暴,就直接叫12306,已經(jīng)有21300星,來自ID為testerSunshine的作者。
testerSunshine的12306項目可以自動登錄用戶賬戶,能卡點搶票,也能撿漏候補,搶到票后會通過郵件進行通知。
排在熱榜第2位的,叫做py12306,目前已有8300星,今年初就已經(jīng)非常火了。
我該選哪個搶票軟件
那么整體來看,這兩款開源軟件,哪個更好用呢?
py12306從去年開始就已經(jīng)被大家廣泛使用,其優(yōu)點是設(shè)置比較簡潔,甚至還有圖形界面。但是它在驗證碼登錄過程中容易出現(xiàn)下載失敗的情況,如果把打碼接口從free換成“若快”平臺,還需要充值。

如果你對運行代碼一無所知,建議使用py12306。
testerSunshine的12306插件設(shè)置比較復(fù)雜,自動獲取cookie經(jīng)常失敗,因此需要手動填寫,這一點比不上py12306;但是它自帶了開發(fā)者的12306圖片識別模型,我們可以在本地完成圖片識別碼的登錄過程。
從實際使用效果來看,我們更推薦testerSunshine的12306,目前它在GitHub上的高人氣,也反映的用戶們的選擇。
測評細節(jié)&使用教程
兩個搶票插件的關(guān)鍵都在配置文件的修改:testerSunshine/12306的關(guān)鍵在于TickerConfig.py,
而py12306的關(guān)鍵在于env.py。
熱榜第一:12306
我們先開始測試現(xiàn)在趨勢榜第一的12306,先將項目復(fù)制到本地:
- gitclonehttps://github.com/testerSunshine/12306cd12306
再安裝依賴項,為了避免多python環(huán)境產(chǎn)生問題,建議以root用戶方式安裝:
- pip3install-ihttps://pypi.tuna.tsinghua.edu.cn/simple-rrequirements.txt
下面到了整個過程最關(guān)鍵的環(huán)節(jié),配置TickerConfig.py文件,這一步將決定你的成敗!非常重要!
看到配置文件里一長串字符,你是不是覺得很頭疼呢?我們經(jīng)過測試,找到了其中的幾個關(guān)鍵點:
1、如果你沒有搶到票,寄希望于其他人退票后撿漏,令TICKET_TYPE = 2,否則設(shè)置為1;
- #刷票模式:1=刷票 2=候補+刷票TICKET_TYPE=1
2、STATION_TRAINS可以填入一串你想要搶的車次,比如北京到合肥方向,你想購買G267、G29次列車,就設(shè)置為STATION_TRAINS = [“G267”, “G29”],中間用逗號隔開,不填寫等于搶當(dāng)日全部車次;
- #出發(fā)日期(list)"2018-01-06","2018-01-07"STATION_DATES=[ "2020-01-30" ]#填入需要購買的車次(list),"G1353"#修改車次填入規(guī)則,注:(以前設(shè)置的車次邏輯不變),如果車次填入為空,那么就是當(dāng)日乘車所有車次都納入篩選返回#不填車次是整個list為空才算,如果不是為空,依然會判斷車次的,這種是錯誤的寫法[""],正確的寫法[]STATION_TRAINS=["G267","G29"]
3、STATION_DATES填入你出發(fā)的日期,這一步不難;
4、出發(fā)站FROM_STATION和到達站TO_STATION不必精確到具體的站,只需填入城市,除非你想從特定站點出發(fā);
- #出發(fā)城市,比如深圳北,就填深圳就搜得到FROM_STATION="北京"#到達城市比如深圳北,就填深圳就搜得到TO_STATION="合肥"
5、乘車人填入你12306賬號中常用聯(lián)系人的姓名,比如TICKET_PEOPLES = [“張三”],如果沒有,需要登錄12306手動添加;
- #乘車人(list)多個乘車人ex:#"張三",#"李四"TICKET_PEOPLES=["李雷","韓梅梅"]
6、填入你的12306賬戶名和密碼;
- #12306登錄賬號USER="Lilei"PWD="123456"
7、如果不需要郵箱和Server醬提醒,請把EMAIL_CONF和SERVER_CHAN_CONF的第一項都設(shè)置為False;
8、開放搶票時間根據(jù)自己車次填入,可以提前幾秒,比如下午一點開發(fā)搶票,則填入OPEN_TIME = “12:29:57” ;
#預(yù)售放票時間,如果是撿漏模式,可以忽略此操作OPEN_TIME="12:29:57"
9、cookie設(shè)置這一步尤為關(guān)鍵,經(jīng)過我們實測,COOKIE_TYPE設(shè)置為1或2都有些問題,建議設(shè)置為3;
- #1=使用selenium獲取devicesID#2=使用網(wǎng)頁端/otn/HttpZF/logdevice獲取devicesId,這個接口的算法目前可能有點問題,如果登錄一直302的請改為配置1#3=自己打開瀏覽器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,這個就不用配置seleniumCOOKIE_TYPE=3
10、上一步設(shè)置為3以后,還需要手動設(shè)置后面的兩個參數(shù)RAIL_EXPIRATION和RAIL_DEVICEID。
- #如果COOKIE_TYPE=3,則需配置RAIL_EXPIRATION、RAIL_DEVICEID的值RAIL_EXPIRATION="1577327361278"RAIL_DEVICEID="jFAKbAeAInPnm0pAdqdCNG0ID_dU6SW6L8gaX7zDEewcWVJC5w7nTSw63oMK9sd9c6FcdhyDMsuVUV4aknfXwzHhO8c_Z-nLU4W8F4_gj_HlrOrsrR29U82HR4pnMRqoRFBKuCZ3tKAgQrhuYnR5RWsBCe5g7goV"#RAIL_EXPIRATION="1577034103293"#RAIL_DEVICEID="CDno29Erc_Pf3FSXb4dzq-Op64EhWrsi5yUZKVIKR1MAfYo2qFlCeXD8VkexY7_1qg-ClV-fE8j9jgVlPZxRh3wVc2iqLe_5A8sdr62qZx4B22JPF8lFCjpgTKZ5ODW90HJd5tiQsJ1KR9nOqHRxHj1FT5LEIwfw"
如何找到這兩個參數(shù)?先用Chrome瀏覽器打開12306.cn,點擊網(wǎng)站地址左邊的“鎖形”圖標(biāo):再點擊下發(fā)的Cookie。

接著會出現(xiàn)一組Cookie,選擇來自12306.cn的Cookie:

看到RAIL_EXPIRATION和RAIL_DEVICEID兩個參數(shù),點擊它,將內(nèi)容里的一串字符復(fù)制到配置文件中。

需要注意的是RAIL_DEVICEID參數(shù)很長,可能顯示不全,請完整復(fù)制。
至此,準(zhǔn)備工作已全部完成,啟動前請先篩選cdn,這點很重要!
- python3run.pyc
接著啟動服務(wù):
- python3run.pyr
接著它會提出登錄成功,并列出當(dāng)日所有相關(guān)車次信息,然后開始搶票:

搶票成功后,這個軟件不能幫你完成支付,你還需要在手機或者電腦上登錄12306網(wǎng)站,在30分鐘內(nèi)完成支付動作,否則你辛辛苦苦搶的票就沒了。

熱榜第二:py12306
py12306的安裝方式與前者類似:
- gitclonehttps://github.com/pjialin/py12306cdpy12306pip3install-rrequirements.txt
然后修改配置文件,現(xiàn)更改后綴名:
- cpenv.py.exampleenv.py
默認配置文件中需要修改的選項有:
1、你的12306賬戶和密碼;
- #12306賬號USER_ACCOUNTS=[ #目前已支持僅查詢,不下單,屏蔽掉下面的賬號即可 { 'key':'lilei',#如使用多個賬號key不能重復(fù) 'user_name':'Lilei', 'password':'123456' },
2、查詢?nèi)蝿?wù)QUERY_JOBS中的各項參數(shù),包括出發(fā)日期left_dates、出發(fā)站left和到達站arrive、乘客姓名members、坐席seats、車次train_numbers;
- #查詢?nèi)蝿?wù)QUERY_JOBS=[ { #'job_name':'bj->yl',#任務(wù)名稱,不填默認會以車站名命名,不可重復(fù) 'account_key':0,#將會使用指定賬號下單 'left_dates':[#出發(fā)日期:Array "2020-01-22", ], 'stations':{#車站支持多個車站同時查詢:Dictor:List 'left':'北京', 'arrive':'合肥', }, 'members':[#乘客姓名,會根據(jù)當(dāng)前賬號自動識別乘客類型購買兒童票設(shè)置兩個相同的姓名即可,程序會自動識別如['張三','張三'] "李雷", "韓梅梅"#在姓名前加*表示學(xué)生購買成人票 #7,#支持通過序號確定唯一乘客,序號查看可通過pythonmain.py-t登錄成功之后在runtime/user/下找到對應(yīng)的用戶名_passengers.json文件,找到對應(yīng)的code填入 ], 'allow_less_member':0,#是否允許余票不足時提交部分乘客 'seats':[#篩選座位有先后順序:Array #可用值:特等座, 商務(wù)座, 一等座, 二等座, 軟臥, 硬臥, 動臥, 軟座, 硬座, 無座 '二等座' ], 'train_numbers':[#篩選車次可以為空,為空則所有車次都可以提交如[]注意大小寫需要保持一致 "G267", ], 'except_train_numbers':[#篩選車次,排除車次train_numbers和except_train_numbers不可同時存在 ], 'period':{#篩選時間 'from':'00:00', 'to':'24:00' } },
接著運行程序:
- python3main.py
如果你不善于使用命令行模式,還可以使用圖形界面觀察搶票任務(wù)。
將配置中的WEB_ENABLE打開,啟動程序后訪問當(dāng)前主機地址+端口號 (默認 8008) 即可,然后在瀏覽器中輸入http://127.0.0.1:8008。

現(xiàn)在,就可以讓程序幫你搶票啦。
不過,搶票軟件并非萬能,巧coder難為無票之炊,除了技術(shù),你可能還需要一點點運氣。
無論采取哪種交通方式,祝大家都能開開心心過年回家,平平安安回來搬磚~
2020已經(jīng)開始,量子位也祝大家新年快樂^_^
傳送門
testerSunshine/12306
https://github.com/testerSunshine/12306
py12306
https://github.com/pjialin/py12306