12306 快速搶票購票程序
目錄
特性
- 1.支持多人倦逐、多座位譬正、多車次智能選票。
- 2.支持手動(dòng)自動(dòng)識別圖片驗(yàn)證碼檬姥。
- 3.支持代理,防止ip被拉黑曾我。
- 4.配置簡單,使用方便健民。
環(huán)境
System: Windows\Max\Linux
Python: 3.6
使用
程序只支持Python3.x抒巢,運(yùn)行程序需要有一個(gè)Python環(huán)境推薦使用虛擬環(huán)境。
- 下載項(xiàng)目
git clone https://github.com/janlle/12306.git 12306
cd 12306
- 安裝依賴
python install -r requirements.txt
3.配置項(xiàng)目的配置文件 ticket_config.py
# coding:utf-8
# ====================== 必填項(xiàng) ======================
# 12306賬號
ACCOUNT = 'wealip'
# 12306密碼
PASSWORD = '12306FF0'
# 出發(fā)站
FROM_STATION = '武昌'
# 到達(dá)站
TO_STATION = '長沙'
# 出發(fā)時(shí)間,例如: 2019-10-15.
DATE = '2019-12-29'
# 乘車人 (12306賬號必須添加下列乘客信息)
USER = ['張三', '李四']
# 車次(車次首字母大寫)
TRAINS_NO = ['Z89', 'K81']
# 座位類別: 商務(wù)座(9),一等座(8),二等座(7),高級軟臥(6),軟臥(5),動(dòng)臥(4),硬臥(3),軟座(2),硬座(1),無座(0)
SEAT_TYPE = [1, 2, 3]
# ====================== 非必填項(xiàng) ======================
# 驗(yàn)證碼識別方式(0:自動(dòng)秉犹,1:手動(dòng))
CAPTCHA_IDENTIFY = 0
# 通知手機(jī)號
PHONE = '159xxx00xxx'
# 是否使用代理
USE_PROXY = False
- 啟動(dòng)你的應(yīng)用
python start.py
- 運(yùn)行日志
Using TensorFlow backend.
2019-12-06 09:22:42,522 INFO 4828 - stations.py [line:405]: 車站數(shù)據(jù)同步成功
2019-12-06 09:22:44,210 INFO 4828 - verify_code.py [line: 94]: 題目為: ['跑步機(jī)']
2019-12-06 09:22:44,760 INFO 4828 - verify_code.py [line:102]: 選項(xiàng)1.金字塔
2019-12-06 09:22:44,760 INFO 4828 - verify_code.py [line:102]: 選項(xiàng)2.雨靴
2019-12-06 09:22:44,760 INFO 4828 - verify_code.py [line:102]: 選項(xiàng)3.跑步機(jī)
2019-12-06 09:22:44,760 INFO 4828 - verify_code.py [line:102]: 選項(xiàng)4.中國結(jié)
2019-12-06 09:22:44,760 INFO 4828 - verify_code.py [line:102]: 選項(xiàng)5.調(diào)色板
2019-12-06 09:22:44,760 INFO 4828 - verify_code.py [line:102]: 選項(xiàng)6.訂書機(jī)
2019-12-06 09:22:44,760 INFO 4828 - verify_code.py [line:102]: 選項(xiàng)7.金字塔
2019-12-06 09:22:44,760 INFO 4828 - verify_code.py [line:102]: 選項(xiàng)8.中國結(jié)
2019-12-06 09:22:44,760 INFO 4828 - login.py [line:154]: 答案為: ['3']
2019-12-06 09:22:44,949 INFO 4828 - login.py [line:163]: 驗(yàn)證碼校驗(yàn)成功
2019-12-06 09:22:45,119 INFO 4828 - login.py [line: 61]: 登錄成功蛉谜,共登錄 1 次
2019-12-06 09:22:45,317 INFO 4828 - login.py [line:120]: 驗(yàn)證通過,用戶名: 張三
+------+-------------------+-----------------------+-------+--------+--------+--------+----------+------+------+------+------+------+------+
| 車次 | 出發(fā)站 - 到達(dá)站 | 出發(fā)時(shí)間 - 到達(dá)時(shí)間 | 歷時(shí) | 商務(wù)座 | 一等座 | 二等座 | 高級軟臥 | 軟臥 | 動(dòng)臥 | 硬臥 | 軟座 | 硬座 | 無座 |
+------+-------------------+-----------------------+-------+--------+--------+--------+----------+------+------+------+------+------+------+
| Z89 | 武昌 - 長沙 | 01:34 - 04:49 | 03:15 | -- | -- | -- | -- | no | -- | no | -- | yes | no |
+------+-------------------+-----------------------+-------+--------+--------+--------+----------+------+------+------+------+------+------+
2019-12-06 09:22:46,840 INFO 4828 - start.py [line: 76]: [乘車人: ['張三', '李四'], 出發(fā)站: 武昌, 到達(dá)站: 長沙, 車次: Z89, 座位: 硬座, 出發(fā)時(shí)間: 2019-12-29 01:34:00]
2019-12-06 09:22:46,841 INFO 4828 - start.py [line: 77]: 車票訂單提交成功崇堵,請稍后...
2019-12-06 09:22:47,037 INFO 4828 - order.py [line:221]: 購票結(jié)果查詢中型诚,第 1 次查詢...
2019-12-06 09:22:52,213 INFO 4828 - order.py [line:221]: 購票結(jié)果查詢中,第 2 次查詢...
2019-12-06 09:22:57,290 INFO 4828 - order.py [line:218]: 下單成功,請登錄 12306 訂單中心 -> 火車票訂單 -> 未完成訂單鸳劳,支付訂單!
Corrupt JPEG data: 16 extraneous bytes before marker 0xd9
Process finished with exit code 0
項(xiàng)目整體流程
登錄
登錄模塊的整體流程為
1.使用http請求獲取圖形驗(yàn)證碼的 Base64 數(shù)據(jù)然后轉(zhuǎn)換為圖片狰贯,url
/passport/captcha/captcha-image64
2.使用圖片識別模塊(基于TensorFlow的圖片識別)得到答案的正確坐標(biāo)
3.調(diào)用驗(yàn)證碼校驗(yàn)接口校驗(yàn)驗(yàn)證碼,url
/passport/captcha/captcha-check
4.調(diào)用登錄接口帶上用戶名赏廓、密碼涵紊、上一步驗(yàn)證碼坐標(biāo)等 url
/passport/web/login
查票、選座
查票步驟比較簡單
1.調(diào)用12306的車票查詢接口幔摸,得到所有車次信息 查詢接口url
/otn/leftTicket/query
2.解析加密過得返回?cái)?shù)據(jù)得到車票信息摸柄。
3.選擇合適的座位依次從最高級到最低級篩選。
查詢下單結(jié)果
1.先提交一個(gè)下單的請求帶上上面步驟中的一個(gè)secretStr字段和其他字段既忆,此步驟是判斷是否可以下單驱负。
2.請求一個(gè)靜態(tài) html 頁面,解析 html 得到下單的必要參數(shù)尿贫,頁面url
/otn/confirmPassenger/initDc
电媳。3.查詢賬號的乘客信息踏揣,查詢接口url
cn/otn/confirmPassenger/getPassengerDTOs
4.提交車次的乘客庆亡、座位類別、日志等信息捞稿,接口url
cn/otn/confirmPassenger/checkOrderInfo
5.獲取上次提交訂單的結(jié)果又谋,如果返回信息都是ok的表示可以繼續(xù)提價(jià)訂單拼缝,接口url
/otn/confirmPassenger/getQueueCount
6.提交最終的車票訂單,如果到此步驟表示前面的其他步驟都是OK的彰亥。
7.查詢下單結(jié)果咧七,正常12306購票成功后會有一定的延遲幾秒或幾十秒返回下單結(jié)果,接口地址
/otn/confirmPassenger/queryOrderWaitTime
最后
到此項(xiàng)目的整體使用和流程都已經(jīng)介紹完畢 項(xiàng)目源碼地址 Gighub