12306抢票使用教程

  • 准备工作
  • 第一步 下载项目源代码
  • 第二步 筛选CDN
  • 第三步 下载依赖库
  • 第四步 填入火车票信息
  • 填入乘车日期
  • 填入出发城市
  • 填入到达城市
  • 填入座位
  • 填入乘车人
  • 填入账号密码
  • 选择本地打码
  • 下载chrome驱动
  • 设置邮件提醒的发件人和收件人(可不设置)
  • 设置微信提醒(可不设置)
  • 第五步 开始抢票
  • 常见问题
  • 如何选择学生票
  • 示例的TickerConfig.py的配置



本教程为testerSunshine的开源项目使用教程,项目代码网址为https://github.com/testerSunshine/12306

准备工作

安装python,建议安装python3,版本号在3.6 - 3.7.4范围内

第一步 下载项目源代码

在https://github.com/testerSunshine/12306中下载源码,若下载速度较慢,可在网盘链接https://pan.baidu.com/s/1fuLGcJ7Yl80eXU_8wfO_iQ中下载
下载后对文件包进行解压,如可放到D盘下

第二步 筛选CDN

使用WIN+R输入cmd打开命令行页面,使用cd命令切换到压缩后的文件夹,本文将压缩包放到了D盘,所先切换到D盘,再打开12306-master文件夹。放入位置不同,此处操作不同。然后,使用python run.py c进行CDN的筛选,由于对python命名的差异,此处操作会略有不同。

python 高铁抢票 python抢票教程_火车票

第三步 下载依赖库

待上一步完成后,使用pip install -r requirements.txt来下载所需要的一些库,由于对pip命名的差异,此处操作会略有不同。

python 高铁抢票 python抢票教程_抢票_02

第四步 填入火车票信息

找到解压缩后的文件夹,在里面找到TickerConfig.py文件

填入乘车日期

在第10行到第13行,填入乘车日期,可填多个

填入出发城市

在第21行,填入出发城市

填入到达城市

在第24行,填入到达城市

python 高铁抢票 python抢票教程_python_03

填入座位

在第36行,填入座位,可填多个

填入乘车人

在第45行,填入乘车人,可填多个。注意:填入的乘车人应在下面输入的账号的常用联系人中,常用联系人中设置为学生则买学生票,设置为成人则买成人票

填入账号密码

在第48行和49行,填入在12306平台的账号和密码

选择本地打码

在第59行,设置为2,进行本地打码,速度更快

python 高铁抢票 python抢票教程_12306_04

下载chrome驱动

在第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"

python 高铁抢票 python抢票教程_python_05

设置邮件提醒的发件人和收件人(可不设置)

若不想设置,83行将True改为False
在第82行到89行,依次设置发件人邮箱、收件人邮箱、发件人邮箱账号、发件人邮箱密码、发件人邮箱host,注意若设置发件人邮箱是qq邮箱,则发件人邮箱密码应是授权码,从邮箱–>账户–>开启smtp服务中取得授权码。

设置微信提醒(可不设置)

若不想设置,93行将True改为False

在第92行到95行,进入http://sc.ftqq.com/3.version,按照页面提示获取secret

python 高铁抢票 python抢票教程_12306_06


python 高铁抢票 python抢票教程_12306_07

第五步 开始抢票

在命令行中输入python run.py r开始抢票

python 高铁抢票 python抢票教程_火车票_08


命令行中出现下方文字

正在第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的常用联系人中,若该联系人设置为学生,则买学生票,设置为成人,则买成人票

示例的TickerConfig.py的配置

# -*- 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: "xxx@163.com"
#  notice_email_list: "123@qq.com"
#  username: "xxxxx"
#  password: "xxxxx
#  host: "smtp.163.com"
#  列举qq  ,qq设置比较复杂,需要在邮箱-->账户-->开启smtp服务,取得授权码==邮箱登录密码
#  email: "xxx@qq.com"
#  notice_email_list: "123@qq.com"
#  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"