今日可搶回程火車(chē)票,實(shí)測(cè)兩款GitHub開(kāi)源插件,坑都幫你踩過(guò)了
曉查 郭一璞 發(fā)自 凹非寺
量子位 報(bào)道 | 公眾號(hào) QbitAI
今天,已經(jīng)可以搶過(guò)完年回來(lái)的火車(chē)票了。
如果你對(duì)自己手速和市面上的各種“加速包”都沒(méi)什么信心的話,不妨試試用程序員的手段搶票?
況且,12306官方宣布屏蔽了一大批付費(fèi)搶票軟件,這也意味著你即使給這些軟件付了會(huì)員費(fèi),也依舊搶不到票。
所以只能回到最初的手動(dòng)搶票?No!No!No!
GitHub上有兩個(gè)“年經(jīng)”項(xiàng)目,每到春運(yùn)前一段時(shí)間,就會(huì)定時(shí)定點(diǎn)的登頂熱榜,助力一代又一代程序員和姿勢(shì)豐富的非程序員們搶票回家。
那么,這兩個(gè)項(xiàng)目究竟怎么用?好不好用?
和手動(dòng)搶票、第三方軟件搶票比起來(lái)優(yōu)勢(shì)是否明顯?
安裝使用過(guò)程中,會(huì)不會(huì)遇到不可名狀的bug?
今天為大家一一橫評(píng)。
霸占熱榜的兩個(gè)項(xiàng)目
排在GitHub熱榜第1的項(xiàng)目名字簡(jiǎn)單粗暴,就直接叫12306,已經(jīng)有21300星,來(lái)自ID為testerSunshine的作者。
testerSunshine的12306項(xiàng)目可以自動(dòng)登錄用戶(hù)賬戶(hù),能卡點(diǎn)搶票,也能撿漏候補(bǔ),搶到票后會(huì)通過(guò)郵件進(jìn)行通知。
排在熱榜第2位的,叫做py12306,目前已有8300星,今年初就已經(jīng)非?;鹆?。
我該選哪個(gè)搶票軟件
那么整體來(lái)看,這兩款開(kāi)源軟件,哪個(gè)更好用呢?
py12306從去年開(kāi)始就已經(jīng)被大家廣泛使用,其優(yōu)點(diǎn)是設(shè)置比較簡(jiǎn)潔,甚至還有圖形界面。但是它在驗(yàn)證碼登錄過(guò)程中容易出現(xiàn)下載失敗的情況,如果把打碼接口從free換成“若快”平臺(tái),還需要充值。
如果你對(duì)運(yùn)行代碼一無(wú)所知,建議使用py12306.
testerSunshine的12306插件設(shè)置比較復(fù)雜,自動(dòng)獲取cookie經(jīng)常失敗,因此需要手動(dòng)填寫(xiě),這一點(diǎn)比不上py12306;但是它自帶了開(kāi)發(fā)者的12306圖片識(shí)別模型,我們可以在本地完成圖片識(shí)別碼的登錄過(guò)程。
從實(shí)際使用效果來(lái)看,我們更推薦testerSunshine的12306,目前它在GitHub上的高人氣,也反映的用戶(hù)們的選擇。
測(cè)評(píng)細(xì)節(jié)&使用教程
兩個(gè)搶票插件的關(guān)鍵都在配置文件的修改:testerSunshine/12306的關(guān)鍵在于TickerConfig.py,
而py12306的關(guān)鍵在于env.py。
熱榜第一:12306
我們先開(kāi)始測(cè)試現(xiàn)在趨勢(shì)榜第一的12306,先將項(xiàng)目復(fù)制到本地:
git?clone?https://github.com/testerSunshine/12306
cd?12306
再安裝依賴(lài)項(xiàng),為了避免多python環(huán)境產(chǎn)生問(wèn)題,建議以root用戶(hù)方式安裝:
pip3?install?-i?https://pypi.tuna.tsinghua.edu.cn/simple?-r?requirements.txt
下面到了整個(gè)過(guò)程最關(guān)鍵的環(huán)節(jié),配置TickerConfig.py文件,這一步將決定你的成敗!非常重要!
看到配置文件里一長(zhǎng)串字符,你是不是覺(jué)得很頭疼呢?我們經(jīng)過(guò)測(cè)試,找到了其中的幾個(gè)關(guān)鍵點(diǎn):
1、如果你沒(méi)有搶到票,寄希望于其他人退票后撿漏,令TICKET_TYPE = 2,否則設(shè)置為1;
#?刷票模式:1=刷票 2=候補(bǔ)+刷票
TICKET_TYPE?=?1
2、STATION_TRAINS可以填入一串你想要搶的車(chē)次,比如北京到合肥方向,你想購(gòu)買(mǎi)G267、G29次列車(chē),就設(shè)置為STATION_TRAINS = [“G267”, “G29”],中間用逗號(hào)隔開(kāi),不填寫(xiě)等于搶當(dāng)日全部車(chē)次;
#?出發(fā)日期(list)?"2018-01-06",?"2018-01-07"
STATION_DATES?=?[
????"2020-01-30"
]
#?填入需要購(gòu)買(mǎi)的車(chē)次(list),"G1353"
#?修改車(chē)次填入規(guī)則,注:(以前設(shè)置的車(chē)次邏輯不變),如果車(chē)次填入為空,那么就是當(dāng)日乘車(chē)所有車(chē)次都納入篩選返回
#?不填車(chē)次是整個(gè)list為空才算,如果不是為空,依然會(huì)判斷車(chē)次的,這種是錯(cuò)誤的寫(xiě)法?[""],?正確的寫(xiě)法?[]
STATION_TRAINS?=?["G267","G29"]
3、STATION_DATES填入你出發(fā)的日期,這一步不難;
4、出發(fā)站FROM_STATION和到達(dá)站TO_STATION不必精確到具體的站,只需填入城市,除非你想從特定站點(diǎn)出發(fā);
#?出發(fā)城市,比如深圳北,就填深圳就搜得到
FROM_STATION?=?"北京"
#?到達(dá)城市?比如深圳北,就填深圳就搜得到
TO_STATION?=?"合肥"
5、乘車(chē)人填入你12306賬號(hào)中常用聯(lián)系人的姓名,比如TICKET_PEOPLES = [“張三”],如果沒(méi)有,需要登錄12306手動(dòng)添加;
#?乘車(chē)人(list)?多個(gè)乘車(chē)人ex:
#?"張三",
#?"李四"
TICKET_PEOPLES?=?["李雷","韓梅梅"]
6、填入你的12306賬戶(hù)名和密碼;
#?12306登錄賬號(hào)
USER?=?"Lilei"
PWD?=?"123456"
7、如果不需要郵箱和Server醬提醒,請(qǐng)把EMAIL_CONF和SERVER_CHAN_CONF的第一項(xiàng)都設(shè)置為False;
8、開(kāi)放搶票時(shí)間根據(jù)自己車(chē)次填入,可以提前幾秒,比如下午一點(diǎn)開(kāi)發(fā)搶票,則填入OPEN_TIME = “12:29:57” ;
#?預(yù)售放票時(shí)間,?如果是撿漏模式,可以忽略此操作
OPEN_TIME?=?"12:29:57"
9、cookie設(shè)置這一步尤為關(guān)鍵,經(jīng)過(guò)我們實(shí)測(cè),COOKIE_TYPE設(shè)置為1或2都有些問(wèn)題,建議設(shè)置為3;
#?1=使用selenium獲取devicesID
#?2=使用網(wǎng)頁(yè)端/otn/HttpZF/logdevice獲取devicesId,這個(gè)接口的算法目前可能有點(diǎn)問(wèn)題,如果登錄一直302的請(qǐng)改為配置1
#?3=自己打開(kāi)瀏覽器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,這個(gè)就不用配置selenium
COOKIE_TYPE?=?3
10、上一步設(shè)置為3以后,還需要手動(dòng)設(shè)置后面的兩個(gè)參數(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"
如何找到這兩個(gè)參數(shù)?先用Chrome瀏覽器打開(kāi)12306.cn,點(diǎn)擊網(wǎng)站地址左邊的“鎖形”圖標(biāo):再點(diǎn)擊下發(fā)的Cookie
接著會(huì)出現(xiàn)一組Cookie,選擇來(lái)自12306.cn的Cookie:
看到RAIL_EXPIRATION和RAIL_DEVICEID兩個(gè)參數(shù),點(diǎn)擊它,將內(nèi)容里的一串字符復(fù)制到配置文件中。
需要注意的是RAIL_DEVICEID參數(shù)很長(zhǎng),可能顯示不全,請(qǐng)完整復(fù)制。
至此,準(zhǔn)備工作已全部完成,啟動(dòng)前請(qǐng)先篩選cdn,這點(diǎn)很重要!
python3?run.py?c
接著啟動(dòng)服務(wù):
python3?run.py?r
接著它會(huì)提出登錄成功,并列出當(dāng)日所有相關(guān)車(chē)次信息,然后開(kāi)始搶票:
搶票成功后,這個(gè)軟件不能幫你完成支付,你還需要在手機(jī)或者電腦上登錄12306網(wǎng)站,在30分鐘內(nèi)完成支付動(dòng)作,否則你辛辛苦苦搶的票就沒(méi)了。
熱榜第二:py12306
py12306的安裝方式與前者類(lèi)似:
git?clone?https://github.com/pjialin/py12306
cd?py12306
pip3?install?-r?requirements.txt
然后修改配置文件,現(xiàn)更改后綴名
cp?env.py.example?env.py
默認(rèn)配置文件中需要修改的選項(xiàng)有:
1、你的12306賬戶(hù)和密碼;
#?12306?賬號(hào)
USER_ACCOUNTS?=?[
????#?目前已支持僅查詢(xún),不下單,屏蔽掉下面的賬號(hào)即可
????{
????????'key':?'lilei',??#?如使用多個(gè)賬號(hào)?key?不能重復(fù)
????????'user_name':?'Lilei',
????????'password':?'123456'
????},
2、查詢(xún)?nèi)蝿?wù)QUERY_JOBS中的各項(xiàng)參數(shù),包括出發(fā)日期left_dates、出發(fā)站left和到達(dá)站arrive、乘客姓名members、坐席seats、車(chē)次train_numbers;
#?查詢(xún)?nèi)蝿?wù)
QUERY_JOBS?=?[
????{
????????#?'job_name':??'bj?->?yl',??#?任務(wù)名稱(chēng),不填默認(rèn)會(huì)以車(chē)站名命名,不可重復(fù)
????????'account_key':?0,??#?將會(huì)使用指定賬號(hào)下單
????????'left_dates':?[??#?出發(fā)日期?:Array
????????????"2020-01-22",
????????],
????????'stations':?{??#?車(chē)站?支持多個(gè)車(chē)站同時(shí)查詢(xún)??:Dict?or?:List
????????????'left':?'北京',
????????????'arrive':?'合肥',
????????},
????????'members':?[??#?乘客姓名,會(huì)根據(jù)當(dāng)前賬號(hào)自動(dòng)識(shí)別乘客類(lèi)型?購(gòu)買(mǎi)兒童票?設(shè)置兩個(gè)相同的姓名即可,程序會(huì)自動(dòng)識(shí)別?如??['張三',?'張三']
??????????
"李雷",
?????????
"韓梅梅"#在姓名前加*表示學(xué)生購(gòu)買(mǎi)成人票
?????????
#?7,??#?支持通過(guò)序號(hào)確定唯一乘客,序號(hào)查看可通過(guò)??python?main.py?-t?登錄成功之后在?runtime/user/?下找到對(duì)應(yīng)的?用戶(hù)名_passengers.json?文件,找到對(duì)應(yīng)的?code?填入
?????
],
??????
'allow_less_member':?0,??#?是否允許余票不足時(shí)提交部分乘客
???????
'seats':?[??#?篩選座位??有先后順序?:Array
??????
#?可用值:?特等座, 商務(wù)座, 一等座, 二等座, 軟臥, 硬臥, 動(dòng)臥, 軟座, 硬座, 無(wú)座
????????
'二等座'
?????
],
??????
'train_numbers':?[??#?篩選車(chē)次?可以為空,為空則所有車(chē)次都可以提交?如?[]?注意大小寫(xiě)需要保持一致
???????
"G267",???
????
],
?????
'except_train_numbers':?[??#?篩選車(chē)次,排除車(chē)次??train_numbers?和?except_train_numbers?不可同時(shí)存在
????
],
?????
'period':?{??#?篩選時(shí)間
??????
'from':?'00:00',
?
'to':?'24:00'
}
},
接著運(yùn)行程序:
python3?main.py
如果你不善于使用命令行模式,還可以使用圖形界面觀察搶票任務(wù)。
將配置中的WEB_ENABLE打開(kāi),啟動(dòng)程序后訪問(wèn)當(dāng)前主機(jī)地址+端口號(hào) (默認(rèn) 8008) 即可,然后在瀏覽器中輸入http://127.0.0.1:8008。
現(xiàn)在,就可以讓程序幫你搶票啦。
不過(guò),搶票軟件并非萬(wàn)能,巧coder難為無(wú)票之炊,除了技術(shù),你可能還需要一點(diǎn)點(diǎn)運(yùn)氣。
無(wú)論采取哪種交通方式,祝大家都能開(kāi)開(kāi)心心過(guò)年回家,平平安安回來(lái)搬磚~
2020已經(jīng)開(kāi)始,量子位也祝大家新年快樂(lè)^_^
傳送門(mén)
testerSunshine/12306
https://github.com/testerSunshine/12306
py12306
https://github.com/pjialin/py12306
- 腦機(jī)接口走向現(xiàn)實(shí),11張PPT看懂中國(guó)腦機(jī)接口產(chǎn)業(yè)現(xiàn)狀|量子位智庫(kù)2021-08-10
- 張朝陽(yáng)開(kāi)課手推E=mc2,李永樂(lè)現(xiàn)場(chǎng)狂做筆記2022-03-11
- 阿里數(shù)學(xué)競(jìng)賽可以報(bào)名了!獎(jiǎng)金增加到400萬(wàn)元,題目面向大眾公開(kāi)征集2022-03-14
- 英偉達(dá)遭黑客最后通牒:今天必須開(kāi)源GPU驅(qū)動(dòng),否則公布1TB機(jī)密數(shù)據(jù)2022-03-05