12306 快速抢票购票程序

12306 快速抢票购票程序

目录

特性

  • 1.支持多人、多座位、多车次智能选票。
  • 2.支持手动自动识别图片验证码。
  • 3.支持代理,防止ip被拉黑。
  • 4.配置简单,使用方便。

环境

System: Windows\Max\Linux
Python: 3.6

使用

程序只支持Python3.x,运行程序需要有一个Python环境推荐使用虚拟环境。

  1. 下载项目
git clone https://github.com/janlle/12306.git 12306
cd 12306
  1. 安装依赖

python install -r requirements.txt

3.配置项目的配置文件 ticket_config.py

# coding:utf-8

# ====================== 必填项 ======================
# 12306账号
ACCOUNT = 'wealip'

# 12306密码
PASSWORD = '12306FF0'

# 出发站
FROM_STATION = '武昌'

# 到达站
TO_STATION = '长沙'

# 出发时间,例如: 2019-10-15.
DATE = '2019-12-29'

# 乘车人 (12306账号必须添加下列乘客信息)
USER = ['张三', '李四']

# 车次(车次首字母大写)
TRAINS_NO = ['Z89', 'K81']

# 座位类别: 商务座(9),一等座(8),二等座(7),高级软卧(6),软卧(5),动卧(4),硬卧(3),软座(2),硬座(1),无座(0)
SEAT_TYPE = [1, 2, 3]

# ====================== 非必填项 ======================

# 验证码识别方式(0:自动,1:手动)
CAPTCHA_IDENTIFY = 0

# 通知手机号
PHONE = '159xxx00xxx'

# 是否使用代理
USE_PROXY = False

  1. 启动你的应用
python start.py
  1. 运行日志

Using TensorFlow backend.
2019-12-06 09:22:42,522 INFO     4828  - stations.py     [line:405]: 车站数据同步成功
2019-12-06 09:22:44,210 INFO     4828  - verify_code.py  [line: 94]: 题目为: ['跑步机']
2019-12-06 09:22:44,760 INFO     4828  - verify_code.py  [line:102]: 选项1.金字塔
2019-12-06 09:22:44,760 INFO     4828  - verify_code.py  [line:102]: 选项2.雨靴
2019-12-06 09:22:44,760 INFO     4828  - verify_code.py  [line:102]: 选项3.跑步机
2019-12-06 09:22:44,760 INFO     4828  - verify_code.py  [line:102]: 选项4.中国结
2019-12-06 09:22:44,760 INFO     4828  - verify_code.py  [line:102]: 选项5.调色板
2019-12-06 09:22:44,760 INFO     4828  - verify_code.py  [line:102]: 选项6.订书机
2019-12-06 09:22:44,760 INFO     4828  - verify_code.py  [line:102]: 选项7.金字塔
2019-12-06 09:22:44,760 INFO     4828  - verify_code.py  [line:102]: 选项8.中国结
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]: 验证码校验成功
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]: 验证通过,用户名: 张三
+------+-------------------+-----------------------+-------+--------+--------+--------+----------+------+------+------+------+------+------+
| 车次 | 出发站 - 到达站   | 出发时间 - 到达时间  | 历时  | 商务座 | 一等座 | 二等座 | 高级软卧 | 软卧 | 动卧 | 硬卧 | 软座 | 硬座 | 无座 |
+------+-------------------+-----------------------+-------+--------+--------+--------+----------+------+------+------+------+------+------+
| Z89  | 武昌 - 长沙    | 01:34 - 04:49         | 03:15 | --     | --     | --     | --       | no   | --   | no   | --   | yes  | no   |
+------+-------------------+-----------------------+-------+--------+--------+--------+----------+------+------+------+------+------+------+
2019-12-06 09:22:46,840 INFO     4828  - start.py        [line: 76]: [乘车人: ['张三', '李四'], 出发站: 武昌, 到达站: 长沙, 车次: Z89, 座位: 硬座, 出发时间: 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]: 购票结果查询中,第 1 次查询...
2019-12-06 09:22:52,213 INFO     4828  - order.py        [line:221]: 购票结果查询中,第 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

项目整体流程

登录

登录模块的整体流程为

  • 1.使用http请求获取图形验证码的 Base64 数据然后转换为图片,url /passport/captcha/captcha-image64

  • 2.使用图片识别模块(基于TensorFlow的图片识别)得到答案的正确坐标

  • 3.调用验证码校验接口校验验证码,url /passport/captcha/captcha-check

  • 4.调用登录接口带上用户名、密码、上一步验证码坐标等 url /passport/web/login

查票、选座

查票步骤比较简单

  • 1.调用12306的车票查询接口,得到所有车次信息 查询接口url /otn/leftTicket/query

  • 2.解析加密过得返回数据得到车票信息。

  • 3.选择合适的座位依次从最高级到最低级筛选。

查询下单结果

  • 1.先提交一个下单的请求带上上面步骤中的一个secretStr字段和其他字段,此步骤是判断是否可以下单。

  • 2.请求一个静态 html 页面,解析 html 得到下单的必要参数,页面url /otn/confirmPassenger/initDc

  • 3.查询账号的乘客信息,查询接口url cn/otn/confirmPassenger/getPassengerDTOs

  • 4.提交车次的乘客、座位类别、日志等信息,接口url cn/otn/confirmPassenger/checkOrderInfo

  • 5.获取上次提交订单的结果,如果返回信息都是ok的表示可以继续提价订单,接口url /otn/confirmPassenger/getQueueCount

  • 6.提交最终的车票订单,如果到此步骤表示前面的其他步骤都是OK的。

  • 7.查询下单结果,正常12306购票成功后会有一定的延迟几秒或几十秒返回下单结果,接口地址 /otn/confirmPassenger/queryOrderWaitTime

最后

到此项目的整体使用和流程都已经介绍完毕 项目源码地址 Gighub

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容