12306快捷购票程序目录功能特点环境使用投稿功能1.支持多人、多座位、多车次智能投票。2.支持手动和自动识别图片验证码。3.支持proxy,防止ip被封。4.配置简单,使用方便。环境系统:Windows\Max\LinuxPython:3.6程序只支持Python3.x,运行程序需要Python环境。建议使用虚拟环境。下载项目gitclonehttps://github.com/janlle/12306.git12306cd12306安装依赖pythoninstall-rrequirements.txt3.配置项目配置文件ticket_config.py#coding:utf-8#=======================必填项=======================#12306账号ACCOUNT='wealip'#12306密码PASSWORD='12306FF0'#出发站FROM_STATION='武昌'#到达站TO_STATION='长沙'#出发时间,例如:2019-10-15.DATE='2019-12-29'#Passenger(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启动你的应用pythonstart.py运行日志使用TensorFlowbackend.2019-12-0609:22:42,522INFO4828-stations.py[line:405]:Station数据同步成功2019-12-0609:22:44,210INFO4828-verify_code.py[line:94]:标题:['Treadmill']2019-12-0609:22:44,760INFO4828-verify_code.py[line:102]:选项1.Pyramid2019-12-0609:22:44,760INFO4828-verify_code.py[line:102]:选项2.雨靴2019-12-0609:22:44,760INFO4828-verify_code.py[line:102]:选项3.跑步机2019-12-0609:22:44,760INFO4828-verify_code.py[line:102]:Option4.ChineseKnot2019-12-0609:22:44,760INFO4828-verify_code.py[line:102]:Option5.Palette2019-12-0609:22:44,760INFO4828-verify_code.py[line:102]:option6.Stapler2019-12-0609:22:44,760INFO4828-verify_code.py[line:102]:option7.Pyramid2019-12-0609:22:44,760INFO4828-verify_code.py[line:102]:选项8.中国结2019-12-0609:22:44,760INFO4828-login.py[line:154]:答案is:['3']2019-12-0609:22:44,949INFO4828-login.py[line:163]:验证码验证成功2019-12-0609:22:45,119INFO4828-login.py[line:163]:验证码验证成功py[line:61]:登录成功,共登录1次2019-12-0609:22:45,317INFO4828-login.py[line:120]:验证通过,用户名:张三+------+------------------+------------------------+-------+--------+--------+--------+--------+------+------+------+------+------+------+|车次|出发站-到达站|出发时间-到达时间 |硬卧|软座|硬座|没有座位|+--------+--------------------+----------------------+--------+--------+--------+------+---------+------+-----+-----+-----+-----+-----+|Z89|五常-长沙 |01:34-04:49|03:15|--|--|--|--|没有|--|没有|--|是|否|+------+--------------------+---------------------+--------+--------+--------+--------+---------+------+------+------+------+------+------+2019-12-0609:22:46,840INFO4828-start.py[line:76]:[乘客:['张三','李四'],始发站:武昌,到达站:长沙,车次:Z89,座位:硬座,发车Time:2019-12-2901:34:00]2019-12-0609:22:46,841INFO4828-start.py[line:77]:工单提交成功,请稍候...2019-12-0609:22:47,037INFO4828-order.py[line:221]:在购票结果查询中,第一个查询...2019-12-0609:22:52,213INFO4828-order.py[line:221]:Purchase在票务结果查询中,第二次查询...2019-12-0609:22:57,290INFO4828-order.py[line:218]:下单成功,请登录12306订单中心->火车票订单->未完成订单,支付订单!CorruptJPEGdata:16extraneousbytesbeforemarker0xd9Processfinishedwithexitcode0items整体流程登录模块登录的整体流程为1.使用http请求图形验证码的Base64数据,然后转换成图片,网址/passport/captcha/captcha-image642.使用图片识别模块(基于TensorFlow的图片识别)得到答案正确坐标3.调用验证码验证接口验证验证码,url/passport/captcha/captcha-check4。以用户名、密码、上一步验证码坐标等调用登录界面url/passport/web/login查询车票1.调用12306的车票查询接口,获取所有车次信息查询接口url/otn/leftTicket/query2.解析加密后的返回数据,得到车票信息3.按照从高到低过滤的顺序选择合适的座位。查询订单结果1、首先提交一个订单请求,上面步骤中有一个secretStr字段和其他字段。这一步是判断是否可以下单。2.请求一个静态html页面,解析html得到下单必须的参数,页面url/otn/confirmPassenger/initDc。3.查询账号的乘客信息,查询接口urlcn/otn/confirmPassenger/getPassengerDTOs4.提交列车乘客、座位类型、日志等信息,接口urlcn/otn/confirmPassenger/checkOrderInfo5.获取上次提交订单的结果,如果返回的信息是ok的,说明可以继续加价订单。接口url/otn/confirmPassenger/getQueueCount6。提交最终的机票订单。如果你到了这一步,说明之前的其他步骤都OK了。7.查询订单结果。正常情况下,12306购票成功后,会有几秒或几十秒的延迟返回订单结果。接口地址为/otn/confirmPassenger/queryOrderWaitTime。最后介绍了本项目的整体使用和流程。项目源地址Gighub
