zoukankan      html  css  js  c++  java
  • 12306 快速抢票购票程序

    12306 快速抢票购票程序

    目录

    特性

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

    环境

    System: WindowsMaxLinux
    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

  • 相关阅读:
    jmap使用
    Spring boot后台搭建一使用MyBatis集成Mapper和PageHelper
    aspose.slides for java去除水印
    win10 解决Failed installing 'Tomcat8' service
    NoSQL数据库
    windows下Java调用可执行文件
    Neo4j CQL基本使用
    初识Neo4j
    (原)下载pubFig的python代码
    (原+译)win7远程连接ubuntu16.04
  • 原文地址:https://www.cnblogs.com/janlle/p/12002366.html
Copyright © 2011-2022 走看看