實測兩款 GitHub 開源搶票插件,所有坑都幫你踩過了

来源:https://www.cnblogs.com/chengxyuan/archive/2020/01/18/12210584.html
-Advertisement-
Play Games

如果你對自己手速和市面上的各種 “加速包” 都沒什麼信心的話,不妨試試用程式員的手段搶票? 況且,[12306 官方宣佈屏蔽了一大批付費搶票軟體],這也意味著你即使給這些軟體付了會員費,也依舊搶不到票。 所以只能回到最初的手動搶票?No!No!No! GitHub 上有兩個 “年經” 項目,每到春運 ...


如果你對自己手速和市面上的各種 “加速包” 都沒什麼信心的話,不妨試試用程式員的手段搶票?

況且,[12306 官方宣佈屏蔽了一大批付費搶票軟體],這也意味著你即使給這些軟體付了會員費,也依舊搶不到票。

所以只能回到最初的手動搶票?No!No!No!

GitHub 上有兩個 “年經” 項目,每到春運前一段時間,就會定時定點的登頂熱榜,助力一代又一代程式員和姿勢豐富的非程式員們搶票回家。

那麼,這兩個項目究竟怎麼用?好不好用?

和手動搶票、第三方軟體搶票比起來優勢是否明顯?

安裝使用過程中,會不會遇到不可名狀的 bug?

今天為大家一一橫評。

霸占熱榜的兩個項目

排在 GitHub 熱榜第 1 的項目名字簡單粗暴,就直接叫 12306,已經有 21300 星,來自 ID 為 testerSunshine 的作者。

testerSunshine 的 12306 項目可以自動登錄用戶賬戶,能卡點搶票,也能撿漏候補,搶到票後會通過郵件進行通知。

排在熱榜第 2 位的,叫做 py12306,目前已有 8300 星,今年初就已經非常火了。

我該選哪個搶票軟體

那麼整體來看,這兩款開源軟體,哪個更好用呢?

py12306 從去年開始就已經被大家廣泛使用,其優點是設置比較簡潔,甚至還有圖形界面。但是它在驗證碼登錄過程中容易出現下載失敗的情況,如果把打碼介面從 free 換成 “若快” 平臺,還需要充值。

如果你對運行代碼一無所知,建議使用 py12306.

testerSunshine 的 12306 插件設置比較複雜,自動獲取 cookie 經常失敗,因此需要手動填寫,這一點比不上 py12306;但是它自帶了開發者的 12306 圖片識別模型,我們可以在本地完成圖片識別碼的登錄過程。

從實際使用效果來看,我們更推薦 testerSunshine 的 12306,目前它在 GitHub 上的高人氣,也反映的用戶們的選擇。

測評細節 & 使用教程

兩個搶票插件的關鍵都在配置文件的修改:testerSunshine/12306 的關鍵在於 TickerConfig.py,而 py12306 的關鍵在於 env.py。

熱榜第一:12306

我們先開始測試現在趨勢榜第一的 12306,先將項目複製到本地:

git clone https://github.com/testerSunshine/12306
cd 12306

再安裝依賴項,為了避免多 python 環境產生問題,建議以 root 用戶方式安裝:

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

下麵到了整個過程最關鍵的環節,配置 TickerConfig.py 文件,這一步將決定你的成敗!非常重要!

看到配置文件里一長串字元,你是不是覺得很頭疼呢?我們經過測試,找到了其中的幾個關鍵點:

1、如果你沒有搶到票,寄希望於其他人退票後撿漏,令 TICKET_TYPE = 2,否則設置為 1;

# 刷票模式:1=刷票 2=候補+刷票
TICKET_TYPE = 1

2、STATION_TRAINS可以填入一串你想要搶的車次,比如北京到合肥方向,你想購買 G267、G29 次列車,就設置為 STATION_TRAINS = [“G267”, “G29”],中間用逗號隔開,不填寫等於搶當日全部車次;

# 出發日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
"2020-01-30"
]
# 填入需要購買的車次(list),"G1353"
# 修改車次填入規則,註:(以前設置的車次邏輯不變),如果車次填入為空,那麼就是當日乘車所有車次都納入篩選返回
# 不填車次是整個list為空才算,如果不是為空,依然會判斷車次的,這種是錯誤的寫法 [""], 正確的寫法
STATION_TRAINS = ["G267","G29"]

3、STATION_DATES填入你出發的日期,這一步不難;

4、出發站 FROM_STATION 和到達站 TO_STATION 不必精確到具體的站,只需填入城市,除非你想從特定站點出發;

# 出發城市,比如深圳北,就填深圳就搜得到
FROM_STATION = "北京"
# 到達城市 比如深圳北,就填深圳就搜得到
TO_STATION = "合肥"

5、乘車人填入你 12306 賬號中常用聯繫人的姓名,比如 TICKET_PEOPLES = [“張三”],如果沒有,需要登錄 12306 手動添加;

# 乘車人(list) 多個乘車人ex:
# "張三",
# "李四"
TICKET_PEOPLES = ["李雷","韓梅梅"]

6、填入你的 12306 賬戶名和密碼;

# 12306登錄賬號
USER = "Lilei"
PWD = "123456"

7、如果不需要郵箱和 Server 醬提醒,請把 EMAIL_CONF 和 SERVER_CHAN_CONF 的第一項都設置為 False;

8、開放搶票時間根據自己車次填入,可以提前幾秒,比如下午一點開發搶票,則填入 OPEN_TIME = “12:29:57” ;

# 預售放票時間, 如果是撿漏模式,可以忽略此操作
OPEN_TIME = "12:29:57"

9、cookie 設置這一步尤為關鍵,經過我們實測,COOKIE_TYPE 設置為 1 或 2 都有些問題,建議設置為 3;

# 1=使用selenium獲取devicesID
# 2=使用網頁端/otn/HttpZF/logdevice獲取devicesId,這個介面的演算法目前可能有點問題,如果登錄一直302的請改為配置1
# 3=自己打開瀏覽器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,這個就不用配置selenium
COOKIE_TYPE = 3

10、上一步設置為 3 以後,還需要手動設置後面的兩個參數 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"

如何找到這兩個參數?先用 Chrome 瀏覽器打開 12306.cn,點擊網站地址左邊的 “鎖形” 圖標:再點擊下發的 Cookie

接著會出現一組 Cookie,選擇來自 12306.cn 的 Cookie:

 

看到 RAIL_EXPIRATION和RAIL_DEVICEID兩個參數,點擊它,將內容里的一串字元複製到配置文件中。

需要註意的是 RAIL_DEVICEID 參數很長,可能顯示不全,請完整複製。

至此,準備工作已全部完成,啟動前請先篩選 cdn,這點很重要!

python3 run.py c

接著啟動服務:

python3 run.py r

接著它會提出登錄成功,併列出當日所有相關車次信息,然後開始搶票:

 

 

搶票成功後,這個軟體不能幫你完成支付,你還需要在手機或者電腦上登錄 12306 網站,在 30 分鐘內完成支付動作,否則你辛辛苦苦搶的票就沒了。

熱榜第二:py12306

py12306 的安裝方式與前者類似:

git clone https://github.com/pjialin/py12306
cd py12306
pip3 install -r requirements.txt

然後修改配置文件,現更改尾碼名

cp env.py.example env.py

預設配置文件中需要修改的選項有:

1、你的 12306 賬戶和密碼;

# 12306 賬號
USER_ACCOUNTS = [
# 目前已支持僅查詢,不下單,屏蔽掉下麵的賬號即可
{
'key': 'lilei', # 如使用多個賬號 key 不能重覆
'user_name': 'Lilei',
'password': '123456'
},

2、查詢任務 QUERY_JOBS 中的各項參數,包括出發日期 left_dates、出發站 left 和到達站 arrive、乘客姓名 members、坐席 seats、車次 train_numbers;

# 查詢任務
QUERY_JOBS = [
{
# 'job_name': 'bj -> yl', # 任務名稱,不填預設會以車站名命名,不可重覆
'account_key': 0, # 將會使用指定賬號下單
'left_dates': [ # 出發日期 :Array
"2020-01-22",
],
'stations': { # 車站 支持多個車站同時查詢 :Dict or :List
'left': '北京',
'arrive': '合肥',
},
'members': [ # 乘客姓名,會根據當前賬號自動識別乘客類型 購買兒童票 設置兩個相同的姓名即可,程式會自動識別 如 ['張三', '張三']
"李雷",
"韓梅梅"#在姓名前加*表示學生購買成人票
# 7, # 支持通過序號確定唯一乘客,序號查看可通過 python main.py -t 登錄成功之後在 runtime/user/ 下找到對應的 用戶名_passengers.json 文件,找到對應的 code 填入
],
'allow_less_member': 0, # 是否允許餘票不足時提交部分乘客
'seats': [ # 篩選座位 有先後順序 :Array
# 可用值: 特等座, 商務座, 一等座, 二等座, 軟卧, 硬卧, 動卧, 軟座, 硬座, 無座
'二等座'
],
'train_numbers': [ # 篩選車次 可以為空,為空則所有車次都可以提交 如 [] 註意大小寫需要保持一致
"G267",
],
'except_train_numbers': [ # 篩選車次,排除車次 train_numbers 和 except_train_numbers 不可同時存在
],
'period': { # 篩選時間
'from': '00:00',
'to': '24:00'
}
},

接著運行程式:

python3 main.py

如果你不善於使用命令行模式,還可以使用圖形界面觀察搶票任務。

 

 

將配置中的 WEB_ENABLE 打開,啟動程式後訪問當前主機地址 + 埠號 (預設 8008) 即可,然後在瀏覽器中輸入 http://127.0.0.1:8008。

現在,就可以讓程式幫你搶票啦。

不過,搶票軟體並非萬能,巧 coder 難為無票之炊,除了技術,你可能還需要一點點運氣。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引言 在 "上一篇文章" 中我們通過 腳手架快速搭建了一個簡單的示例,並基於該示例講解了在類組件中 和`React.PureComponent @babel/preset react render React.createElement React.createElement ReactElemen ...
  • Json的介紹和Json結構 JSON是JavaScript Object Notation的縮寫,意思是JavaScript 對象表示法 是存儲和交換文本信息的語法。類似 XML,不過它比 XML 更小、更快,更易解析 官網的介紹 http://www.json.org/json zh.html ...
  • 在用到el-tree的懶載入和預設勾選功能時,若第一次勾選前幾個連續節點,第二次進入預設勾選時,由於el-tree子節點尚未完全載入(只載入出來前幾個),預設勾選已經開始(已載入出來的子節點被預設勾選),這時el-tree會認為子節點全部勾選,所以父節點也被勾選,這就導致所有子節點都被勾選; 解決方 ...
  • 本篇不會過多講述 ts 語法,著重記錄下 在 React 中使用 ts 的方法以及踩坑經過。 ...
  • 0.效果演示 插入視頻插不進來,就很煩。可以出門右拐去優酷看下(點我!)。 1.準備工作 1.1前端框架 前端使用了基於vue.js的nuxt.js。為什麼使用nuxt.js? 首先我做的是博客的項目,所以SSR至關重要。雖然跟本文要講的登錄註冊沒有什麼關係,但是文章如果用axios來非同步獲取的話, ...
  • X 維度本身超出了技術範疇,但為了更好地服務業務,技術人也有必要懂得一些基礎的業務優化思路。如果只知道埋頭趕路,不知道抬頭看天,那我們技術人很容易做了費力不討好的事情,例如:某些性能瓶頸是由於業務流程設計不合理導致的,在業務流程優化完善之前,我們僅僅從技術視角去優化改善,極有可能事倍功半。具體說來,... ...
  • 意圖 原型模式是創建型設計模式,可以複製已存在的對象而無需依賴它的類。 問題 假如現在有一個對象,我們想完全複製一份新的,我們該如何做? 1. 創建同一個類的新對象 2. 遍歷所有已存在對象的值,然後將他們的值複製到新對象。 很好,但是我們會發現存在如下問題: 1. 該對象的值並不一定全對對外開放, ...
  • 一、StringBuffer和StringBuilder 1.StringBuffer是什麼? 答:是一個字元串緩衝區,工作原理:預先在記憶體中申請一塊空間以容納字元序列,如果預留的空間,則進行自動擴容,以容納更多的字元序列。 2.StringBuffer\StringBuilder和String最大 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...