安装python,建议安装python3,版本号在3.6 - 3.7.4范围内
在https://github.com/testerSunshine/12306中下载源码,若下载速度较慢,可在网盘链接https://pan.baidu.com/s/1fuLGcJ7Yl80eXU_8wfO_iQ中下载
下载后对文件包进行解压,如可放到D盘下
使用WIN+R输入cmd打开命令行页面,使用cd命令切换到压缩后的文件夹,本文将压缩包放到了D盘,所先切换到D盘,再打开12306-master文件夹。放入位置不同,此处操作不同。然后,使用python run.py c进行CDN的筛选,由于对python命名的差异,此处操作会略有不同。
待上一步完成后,使用pip install -r requirements.txt来下载所需要的一些库,由于对pip命名的差异,此处操作会略有不同。
找到解压缩后的文件夹,在里面找到TickerConfig.py文件
在第10行到第13行,填入乘车日期,可填多个
在第21行,填入出发城市
在第36行,填入座位,可填多个
在第45行,填入乘车人,可填多个。注意:填入的乘车人应在下面输入的账号的常用联系人中,常用联系人中设置为学生则买学生票,设置为成人则买成人票
在第48行和49行,填入在12306平台的账号和密码
在第120行,将COOKIE_TYPE设置为1
在https://www.google.cn/intl/zh-CN/chrome/下载Chrome浏览器
在http://chromedriver.storage.googleapis.com/index.html下载与所下载的Chrome浏览器的版本相对应的驱动(只要大版本匹配即可)
将下载的文件包解压,在第123行填入地址,本文将chromedriver.exe放在D盘下,故为R"D:\chromedriver.exe"
若不想设置,83行将True改为False
在第82行到89行,依次设置发件人邮箱、收件人邮箱、发件人邮箱账号、发件人邮箱密码、发件人邮箱host,注意若设置发件人邮箱是qq邮箱,则发件人邮箱密码应是授权码,从邮箱–>账户–>开启smtp服务中取得授权码。
若不想设置,93行将True改为False
在第92行到95行,进入http://sc.ftqq.com/3.version,按照页面提示获取secret
在命令行中输入python 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分钟内完成支付!
就说明抢票成功了,快登陆12306访问未完成订单完成支付吧~
在12306的常用联系人中,若该联系人设置为学生,则买学生票,设置为成人,则买成人票
# -*- coding=utf-8 -*-
# 关于软件使用配置说明,一定要看!!!
# ps: 如果是候补车票,需要通过人证一致性核验的用户及激活的“铁路畅行”会员可以提交候补需求,请您按照操作说明在铁路12306app.上完成人证核验
# 关于候补了之后是否还能继续捡漏的问题在此说明: 软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,
# 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率
# 刷票模式:1=刷票 2=候补+刷票
TICKET_TYPE = 1
# 出发日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
"2018-01-06", "2018-01-07"
]
# 填入需要购买的车次(list),"G1353"
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
# 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []
STATION_TRAINS = ["G7031", "G7037"]
# 出发城市,比如深圳北,就填深圳就搜得到
FROM_STATION = "南京南"
# 到达城市 比如深圳北,就填深圳就搜得到
TO_STATION = "上海"
# 座位(list) 多个座位ex:
# "商务座",
# "一等座",
# "二等座",
# "特等座",
# "软卧",
# "硬卧",
# "硬座",
# "无座",
# "动卧",
SET_TYPE = ["一等座", "二等座"]
# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
# bool
IS_MORE_TICKET = True
# 乘车人(list) 多个乘车人ex:
# "张三",
# "李四"
TICKET_PEOPLES = ["张三", "李四"]
# 12306登录账号
USER = "admin"
PWD = "admin"
# 加入小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直下单不成功错过正常的票
TICKET_BLACK_LIST_TIME = 5
# 自动打码
IS_AUTO_CODE = True
# 设置2本地自动打码,需要配置tensorflow和keras库,3为云打码,由于云打码服务器资源有限(为2h4C的cpu服务器),请不要恶意请求,不然只能关闭服务器
# ps: 请不要一直依赖云服务器资源,在此向所有提供服务器同学表示感谢
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: "[email protected]"
# notice_email_list: "[email protected]"
# username: "xxxxx"
# password: "xxxxx
# host: "smtp.163.com"
# 列举qq ,qq设置比较复杂,需要在邮箱-->账户-->开启smtp服务,取得授权码==邮箱登录密码
# email: "[email protected]"
# notice_email_list: "[email protected]"
# username: "xxxxx"
# password: "授权码"
# host: "smtp.qq.com"
EMAIL_CONF = {
"IS_MAIL": True,
"email": "发件人邮箱",
"notice_email_list": "收件人邮箱",
"username": "发件人邮箱账号",
"password": "发件人邮箱密码",
"host": "邮箱host如smtp.163.com",
}
# 是否开启 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 = "12:59:57"
# 1=使用selenium获取devicesID
# 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1
# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium
COOKIE_TYPE = 1
# 如果COOKIE_TYPE=1,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html
# chromedriver配置版本只要和chrome的大版本匹配就行
CHROME_PATH = R"D:\chromedriver.exe"
# 为了docker37 准备的环境变量,windows环境可以不用管这个参数
CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome"
# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
RAIL_EXPIRATION = ""
RAIL_DEVICEID = ""
# RAIL_EXPIRATION = "1577034103293"
# RAIL_DEVICEID = "CDno29Erc_Pf3FSXb4dzq-Op64EhWrsi5yUZKVIKR1MAfYo2qFlCeXD8VkexY7_1qg-ClV-fE8j9jgVlPZxRh3wVc2iqLe_5A8sdr62qZx4B22JPF8lFCjpgTKZ5ODW90HJd5tiQsJ1KR9nOqHRxHj1FT5LEIwfw"
# 1=>为一直随机ua,2->只启动的时候随机一次ua
RANDOM_AGENT = 2
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"