【使用教程】面向回家编程-12306智能刷票,订票
代码链接:https://github.com/testerSunshine/12306
实名感谢:testerSunshine
春运一票难求,很多朋友都听说了GitHub上的12306抢票神器,但苦于没有计算机编程基础或在使用过程中遇到暂时无法解决的问题,特撰写本博客供电脑小白参照,并期待与大家讨论在使用过程中所遇到的问题。
使用教程
- 安装python
- 下载源码
- 配置文件
- 欢迎回家
1.安装python
python安装教程:https://baijiahao.baidu.com/s?id=1606573927720991570&wfr=spider&for=pc
推荐安装anaconda,请参照:https://blog.csdn.net/ITLearnHall/article/details/81708148
2.下载源码
地址:https://github.com/testerSunshine/12306
按图中所示依次点击,保存至本地,并帅筛选CDN、安装依赖包
筛选CDN:WIN+R打开命令符,输入CMD,输入python 你的run.py所在地址空格c
安装依赖包:WIN+R打开命令符,输入CMD,输入pip install 你的requirements.txt所在地址
3.配置文件
本小节对配置文件进行详细说明,在使用过程中有如下几个常见问题:
1.使用本地打码TensorFlow报错
AttributeError: module 'tensorflow' has no attribute 'get_default_graph'
解决方案:TensorFlow和keras版本兼容问题,推荐使用TensorFlow1.14.0版本
推荐使用本地打码,高峰时段在线打码服务器访问量高速度慢
2.COOKIE获取配置问题
- COOKIE_TYPE = 1
步骤一:安装chrome
https://www.google.cn/intl/zh-CN/chrome/
步骤二:下载对应版本的chrome驱动,解压至桌面
http://chromedriver.storage.googleapis.com/index.html
步骤三:设置chrome驱动路径参数
CHROME_PATH = ‘你的chrome驱动位置”
- COOKIE_TYPE = 2
不推荐
- COOKIE_TYPE = 3
步骤一:手动定位RAIL_EXPIRATION、RAIL_DEVICEID的值,登录12306按F12,选择Consle,输入document.cookie图示操作获取cookie
步骤二:配置RAIL_EXPIRATION、RAIL_DEVICEID的值,注意这个值会发生变化,若显示接口302,请打开浏览器重新获取该值
RAIL_EXPIRATION = "获取的RAIL_EXPIRATION的值" RAIL_DEVICEID = "获取的RAIL_DEVICEID的值"
3.邮箱配置问题
配置详情如下所示:
EMAIL_CONF = {
"IS_MAIL": True,
"email": "发送邮件的邮箱地址",
"notice_email_list": "接收邮件的邮箱地址",
"username": "发送邮件的邮箱地址登录账号",
"password": "发送邮件的邮箱地址登录密码(注意QQ和126等邮箱此处请填写授权码)",
"host": "发送邮件的邮箱的smtp地址",
}
简单的理解为您需要注册两个邮箱,一个邮箱为发件邮箱,一个为接收邮箱。其中常遇到的异常是password错误导致发送失败。
QQ和126等邮箱password字段应该为授权码,授权码获取的办法请参照:https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256
简单举个例子:
EMAIL_CONF = {
"IS_MAIL": True,
"email": "aaa@qq.com",
"notice_email_list": "aaa@qq.com",
"username": "SendAddress",
"password": "授权码",
"host": "smtp.qq.com",
}
4.微信推送配置问题
请参照:https://www.jianshu.com/p/8d10b5b9c4e3
步骤一:http://sc.ftqq.com/3.version,使用GitHub账号注册,登录
步骤二:电击微信推送,使用微信扫码绑定,绑定成功后点击发送信息,即可查看到您的secret码
步骤三:设置secret码
SERVER_CHAN_CONF = { "is_server_chan": True, "secret": "请在此处输入您的secret码" }
欢迎回家
WIN+R输入CMD打开命令行输入run.py r
如果一切顺利,你将看到以下内容,恭喜。
正在第355次查询 乘车日期: 2018-02-12 车次G4741,G2365,G1371,G1377,G1329 查询无票 代理设置 无 总耗时429ms
车次: G4741 始发车站: 上海 终点站: 邵阳 二等座:有
正在尝试提交订票...
尝试提交订单...
出票成功
排队成功, 当前余票还剩余: 359 张
正在使用自动识别验证码功能
验证码通过,正在提交订单
提交订单成功!
排队等待时间预计还剩 -12 ms
排队等待时间预计还剩 -6 ms
排队等待时间预计还剩 -7 ms
排队等待时间预计还剩 -4 ms
排队等待时间预计还剩 -4 ms
恭喜您订票成功,订单号为:EB52743573, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!
最后,引用源码作者的一句话
-
能为你抢到一张回家的票,是我最大的心愿
配置文件详解
# 如果是候补车票,需要通过人证一致性核验的用户及**的“铁路畅行”会员可以提交候补需求,请您按照操作说明在铁路12306app.上完成人证核验
# 关于候补了之后是否还能继续捡漏的问题在此说明: 软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,
# 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率
# 刷票模式:1=刷票 2=候补+刷票
TICKET_TYPE = 2
# 出发日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
"2020-01-25"
]
# 填入需要购买的车次(list),"G1353"
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
# 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []
STATION_TRAINS = ["G383","D21"]
# 出发城市,比如深圳北,就填深圳就搜得到
FROM_STATION = "北京"
# 到达城市 比如深圳北,就填深圳就搜得到
TO_STATION = "海南"
# 座位(list) 多个座位ex:
# "商务座",
# "一等座",
# "二等座",
# "特等座",
# "软卧",
# "硬卧",
# "硬座",
# "无座",
# "动卧",
SET_TYPE = ["二等座"]
# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
# bool
IS_MORE_TICKET = True
# 乘车人(list) 多个乘车人ex:
# "张三",
# "李四"
TICKET_PEOPLES = ["张三",“李四”]
# 12306登录账号
USER = "你的12306登录账号"
PWD = "你的12306登录密码"
# 加入小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直下单不成功错过正常的票
TICKET_BLACK_LIST_TIME = 5
# 自动打码
IS_AUTO_CODE = True
# 设置2本地自动打码,需要配置tensorflow和keras库,3为云打码,由于云打码服务器资源有限(为2h4C的cpu服务器),请不要恶意请求,不然只能关闭服务器
# ps: 请不要一直依赖云服务器资源,在此向所有提供服务器同学表示感谢
#此处请注意设置2需要安装正确的TensorFlow和keras版本,否则会因版本问题出现报错
AUTO_CODE_TYPE = 2
# 此处设置云打码服务器地址,如果有自建的服务器,可以自行更改
HOST = "120.77.154.140:8000"
REQ_URL = "/verify/base64/"
HTTP_TYPE = "http"
# HOST="12306.yinaoxiong.cn" #备用服务器稳定性较差
# REQ_URL="/verify/base64/"
# HTTP_TYPE="https"
# 邮箱配置,如果抢票成功,将通过邮件配置通知给您
# 列举163
# email: "aaa@qq.com"
# notice_email_list: "aaa@qq.com"
# username: "xxxxx"
# password: "xxxxx
# host: "smtp.163.com"
# 列举qq ,qq设置比较复杂,需要在邮箱-->账户-->开启smtp服务,取得授权码==邮箱登录密码
# email: "aaa@qq.com"
# notice_email_list: "aaa@qq.com"
# username: "xxxxx"
# password: "授权码"
# host: "smtp.qq.com"
EMAIL_CONF = {
"IS_MAIL": True,
"email": "发送邮件的邮箱地址",
"notice_email_list": "接收邮件的邮箱地址",
"username": "发送邮件的邮箱地址登录账号",
"password": "发送邮件的邮箱地址登录密码",
"host": "发送邮件的邮箱的smtp地址",
}
# 是否开启 server酱 微信提醒, 使用前需要前往 http://sc.ftqq.com/3.version 扫码绑定获取 SECRET 并关注获得抢票结果通知的公众号
SERVER_CHAN_CONF = {
"is_server_chan": True,
"secret": "你的secret"
}
# 是否开启cdn查询,可以更快的检测票票 1为开启,2为关闭
IS_CDN = 1
# 下单接口分为两种,1 模拟网页自动捡漏下单(不稳定),2 模拟车次后面的购票按钮下单(稳如老狗)
ORDER_TYPE = 2
# 下单模式 1 为预售,整点刷新,刷新间隔0.1-0.5S, 然后会校验时间,比如12点的预售,那脚本就会在12.00整检票,刷新订单
# 2 是捡漏,捡漏的刷新间隔时间为0.5-3秒,时间间隔长,不容易封ip
ORDER_MODEL = 1
# 是否开启代理, 0代表关闭, 1表示开始
# 开启此功能的时候请确保代理ip是否可用,在测试放里面经过充分的测试,再开启此功能,不然可能会耽误你购票的宝贵时间
# 使用方法:
# 1、在agency/proxy_list列表下填入代理ip
# 2、测试UnitTest/TestAll/testProxy 测试代理是否可以用
# 3、开启代理ip
IS_PROXY = 0
# 预售放票时间, 如果是捡漏模式,可以忽略此操作
OPEN_TIME = "16:30:00"
# 1=使用selenium获取devicesID
# 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1
# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium
#打开12306网站登录进去,按F12,在consol中输入document.cookie即可查询到RAIL_DEVICEID和RAIL_EXPIRATION的值
COOKIE_TYPE = 3
# 如果COOKIE_TYPE=1,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html
# chromedriver配置版本只要和chrome的大版本匹配就行
CHROME_PATH = R"C:\Users\t470-1\Desktop\chromedriver.exe"
# 为了docker37 准备的环境变量,windows环境可以不用管这个参数
CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome"
# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
RAIL_EXPIRATION = ""
RAIL_DEVICEID = ""
# 1=>为一直随机ua,2->只启动的时候随机一次ua
RANDOM_AGENT = 3
PASSENGER_TICKER_STR = {
'一等座': 'M',
'特等座': 'P',
'二等座': 'O',
'商务座': 9,
'硬座': 1,
'无座': 1,
'软座': 2,
'软卧': 4,
'硬卧': 3,
}
# 保护12306官网请求频率,设置随机请求时间,原则为5分钟不大于80次
# 最大间隔请求时间
MAX_TIME = 3
# 最小间隔请求时间
MIN_TIME = 1
# 软件版本
RE_VERSION = "1.2.004"
上一篇: Lua for循环