0%

过年抢票 12306 走起

每年恰逢国庆或新年,Github 的这个项目都会火,今天正好有时间,从头到尾带大家详细走两遍吧(本地预售+服务器捡漏)!

安装Docker容器

安装 docker 我这里写了两种,一种本地 Archlinux 系统的,一种 Ubuntu 服务器的,看你是怎么选择,我是首先本地找个有票的目的地去抢,抢到票的话再搭建服务器捡漏

本地系统

Arch Linux Docker提供了两个版本,二选一喽(我选一)

1
2
sudo pacman -S docker    #稳定版
yaourt -S docker-git #开发版

启动Docker服务

1
2
sudo systemctl start docker.service
sudo systemctl enable docker.service

安装完成后,运行下面的命令,验证是否安装成功

1
2
3
sudo docker version     #由于还没把docker用户加入用户组,所以运行docker命令需要加sudo
#或者
sudo docker info

Docker需要用户具有sudo权限,为了避免每次命令都输入sudo,可以把用户加入Docker用户组(系统重启后生效)

1
2
sudo usermod -aG docker $USER   #自动创建docker用户并加入到用户组
cat /etc/group #查看文件中有没有出现docker

列出本机的镜像

1
2
docker image ls     #列出本机的所有image文件
docker images #列出本机的所有image文件 (等同于docker image ls)

想设置你自己的存储驱动选项和docker源,编辑 /etc/docker/daemon.json (如果不存在就自己创建)

1
2
3
4
5
6
sudo gedit /etc/docker/daemon.json      #创建daemon.json文件
#内容如下
{
"storage-driver": "overlay2", #存储驱动选项
"registry-mirrors": ["http://hub-mirror.c.163.com"] #网易163源
}

其他源如下:

阿里源:https://pee6w651.mirror.aliyuncs.com
网易163源:http://hub-mirror.c.163.com
docker中国区源:https://registry.docker-cn.com
中国科技大学:https://docker.mirrors.ustc.edu.cn

修改重新启动docker服务

1
systemctl restart docker

测试docker
从远程仓库docker hubpull一个镜像到本地仓库/var/lib/docker,以hello-world为例

1
2
3
docker pull hello-world     #pull一个镜像
docker images #查看本地镜像
docker [container] run hello-world #运行hello-world镜像(本地仓库没有镜像,会自动运行远程仓库中的)

hello-world镜像运行之后输出一大段文本,然后进程会自动停止,有的镜像不会自动停止(例如:Ubuntu系统ubuntu bash),这时候就需要手动杀死进程docker container kill <CONTAINER ID>

1
docker run -it ubuntu bash  #使用bash运行ubuntu镜像

再打开一个终端窗口,查看容器运行情况

1
2
3
4
docker container ls     #列出本机正在运行的容器
docker ps #列出本机正在运行的容器,等效于 docker container ls
docker container ls --all #列出本机所有容器,包括终止运行的容器
docker ps --all ##列出本机所有容器,包括终止运行的容器,等效于 docker container ls --all

可以看到以下内容

1
2
3
#集装箱ID           图像                命令                   创建               状态                端口                名称
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dadf7d24b756 ubuntu "bash" 6 seconds ago Up 5 seconds hungry_stallman

手动杀死ubuntu进程

1
docker [container] kill dadf7d24b756    #dadf7d24b756是上面查出的CONTAINER ID

杀死进程,容器还在,如果容器也不要了,可以删除

1
2
docker container ls --all     #列出本机所有容器,包括终止运行的容器
docker [container] rm <CONTAINER ID>... #删除指定容器

容器是运行镜像之后产生的,你可以理解为镜像是个压缩包,容器就是解压出来的文件夹,如果还要把本地镜像也删除,可以

1
2
docker image rm <REPOSITORY>...     #根据镜像名称删除image文件
docker rmi <IMAGE ID>... #根据镜像id删除image文件

注意:删除镜像之前,必须把该镜像的所有容器删除(包括正在运行的容器和停止使用的容器)才能删除镜像,否则会报错

Ubuntu 服务器

安装 docker 容器,服务器是 ubuntu 19.04,直接安装即可

1
2
3
4
5
6
7
8
ssh root@55.66.77.88    #ssh 登录
curl https://get.docker.com | bash #下载
sudo apt install docker.io #安装 docker
docker --version #查看docker 版本

#设置开机启动
systemctl enable docker
systemctl start docker

安装docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。要了解有关 Compose 的所有功能的更多信息,请参阅功能列表,这个不管是本地系统还是服务器都是一样安装的

1
2
3
4
5
sudo -i #使用 root 账号
curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose #直接下载docker-compose文件到/usr/local/bin
chmod +x /usr/local/bin/docker-compose #授权
exit #退出root
docker-compose --version #查看docker-compose版本

克隆项目

testerSunshine/12306 克隆到本地电脑或服务器

1
2
3
git clone https://github.com/testerSunshine/12306.git
cd 12306 #进入文件夹
vim TickerConfig.py #编辑配置文件

修改配置文件

配置文件 TickerConfig.py 中需要填写一些基本的参数,要我们按情况修改,这里我提供两种配置方案

本机:刷票+本地打码+预售
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# -*- coding=utf-8 -*-
# 关于软件使用配置说明,一定要看!!!
# ps: 如果是候补车票,需要通过人证一致性核验的用户及激活的“铁路畅行”会员可以提交候补需求,请您按照操作说明在铁路12306app.上完成人证核验
# 关于候补了之后是否还能继续捡漏的问题在此说明: 软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,
# 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率

# 刷票模式:1=刷票 2=候补+刷票
TICKET_TYPE = 1

# 出发日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
"2020-01-23"
]

# 填入需要购买的车次(list),"G1353"
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
# 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []
STATION_TRAINS = ["D2357","D6581"]

# 出发城市,比如深圳北,就填深圳就搜得到
FROM_STATION = "赣州"

# 到达城市 比如深圳北,就填深圳就搜得到
TO_STATION = "于都"

# 座位(list) 多个座位ex:
# "商务座",
# "一等座",
# "二等座",
# "特等座",
# "软卧",
# "硬卧",
# "硬座",
# "无座",
# "动卧",
SET_TYPE = ["一等座"]

# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
# bool
IS_MORE_TICKET = True

# 乘车人(list) 多个乘车人ex:
# "张三",
# "李四"
TICKET_PEOPLES = ["张三"]

# 12306登录账号
USER = "teaper"
PWD = "zdfvgh5g6"

# 加入小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直下单不成功错过正常的票
TICKET_BLACK_LIST_TIME = 5

# 自动打码
IS_AUTO_CODE = True

# 设置2本地自动打码,需要配置tensorflow和keras库,3为云打码,由于云打码服务器资源有限(为2h4C的cpu服务器),请不要恶意请求,不然只能关闭服务器
# ps: 请不要一直依赖云服务器资源,在此向所有提供服务器同学表示感谢
AUTO_CODE_TYPE = 2

# 此处设置云打码服务器地址,如果有自建的服务器,可以自行更改
HOST = "captcha:80"
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": "www@teaper.dev",
"notice_email_list": "www@teaper.dev",
"username": "www@teaper.dev",
"password": "sjfkf3fg",
"host": "smtp.exmail.qq.com",
}

# 是否开启 server酱 微信提醒, 使用前需要前往 http://sc.ftqq.com/3.version 扫码绑定获取 SECRET 并关注获得抢票结果通知的公众号
SERVER_CHAN_CONF = {
"is_server_chan": False,
"secret": "SCU71142T22f940ddgh34f9f369dc6d75e0072465f9e6"
}

# 是否开启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 = 3
# 如果COOKIE_TYPE=1,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html
# chromedriver配置版本只要和chrome的大版本匹配就行
CHROME_PATH = "/opt/google/chrome/google-chrome"

# 为了docker37 准备的环境变量,windows环境可以不用管这个参数
CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome"

# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
RAIL_EXPIRATION = "1577394287684"
RAIL_DEVICEID = "VbwdRQJ8tWqbACs-rCEMSKgU-juNgkqdJQ7j9Nt6KMrrS8RBJotuRdyPyS1WS1fkJY6sw7NDpxkMEL7ScTEGLvytNL_IVT_QKEOT_5tBCs71_WeR3Jp3bwHIBoIieVcrI9yKWPHqR36oXpvq4J1p2BEubXmBricl"
# RAIL_EXPIRATION = "1577034533293"
# RAIL_DEVICEID = "CDno29Erc_Pf3FSXb4dzq-Op64EhWrsi5yUZKVIKR1MAfYo2qFlCeXD8VkexY7_1qg-ClV-fE8j9jgVlPZxRh3wVc54qLe_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"
服务器:候补+刷票+本地打码+捡漏
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# -*- coding=utf-8 -*-
# 关于软件使用配置说明,一定要看!!!
# ps: 如果是候补车票,需要通过人证一致性核验的用户及激活的“铁路畅行”会员可以提交候补需求,请您按照操作说明在铁路12306app.上完成人证核验
# 关于候补了之后是否还能继续捡漏的问题在此说明: 软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,
# 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率

# 刷票模式:1=刷票 2=候补+刷票
TICKET_TYPE = 2

# 出发日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
"2020-01-23"
]

# 填入需要购买的车次(list),"G1353"
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
# 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []
STATION_TRAINS = ["D2357","D6581"]

# 出发城市,比如深圳北,就填深圳就搜得到
FROM_STATION = "赣州"

# 到达城市 比如深圳北,就填深圳就搜得到
TO_STATION = "于都"

# 座位(list) 多个座位ex:
# "商务座",
# "一等座",
# "二等座",
# "特等座",
# "软卧",
# "硬卧",
# "硬座",
# "无座",
# "动卧",
SET_TYPE = ["一等座"]

# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
# bool
IS_MORE_TICKET = True

# 乘车人(list) 多个乘车人ex:
# "张三",
# "李四"
TICKET_PEOPLES = ["张三"]

# 12306登录账号
USER = "teaper"
PWD = "zdfvgh5g6"

# 加入小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直下单不成功错过正常的票
TICKET_BLACK_LIST_TIME = 5

# 自动打码
IS_AUTO_CODE = True

# 设置2本地自动打码,需要配置tensorflow和keras库,3为云打码,由于云打码服务器资源有限(为2h4C的cpu服务器),请不要恶意请求,不然只能关闭服务器
# ps: 请不要一直依赖云服务器资源,在此向所有提供服务器同学表示感谢
AUTO_CODE_TYPE = 2

# 此处设置云打码服务器地址,如果有自建的服务器,可以自行更改
HOST = "captcha:80"
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": "www@teaper.dev",
"notice_email_list": "www@teaper.dev",
"username": "www@teaper.dev",
"password": "sjfkf3fg",
"host": "smtp.exmail.qq.com",
}

# 是否开启 server酱 微信提醒, 使用前需要前往 http://sc.ftqq.com/3.version 扫码绑定获取 SECRET 并关注获得抢票结果通知的公众号
SERVER_CHAN_CONF = {
"is_server_chan": False,
"secret": "SCU71142T22f940ddgh34f9f369dc6d75e0072465f9e6"
}

# 是否开启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 = 2

# 是否开启代理, 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 = 3
# 如果COOKIE_TYPE=1,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html
# chromedriver配置版本只要和chrome的大版本匹配就行
CHROME_PATH = "/opt/google/chrome/google-chrome"

# 为了docker37 准备的环境变量,windows环境可以不用管这个参数
CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome"

# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
RAIL_EXPIRATION = "1577394287684"
RAIL_DEVICEID = "VbwdRQJ8tWqbACs-rCEMSKgU-juNgkqdJQ7j9Nt6KMrrS8RBJotuRdyPyS1WS1fkJY6sw7NDpxkMEL7ScTEGLvytNL_IVT_QKEOT_5tBCs71_WeR3Jp3bwHIBoIieVcrI9yKWPHqR36oXpvq4J1p2BEubXmBricl"
# RAIL_EXPIRATION = "1577034533293"
# RAIL_DEVICEID = "CDno29Erc_Pf3FSXb4dzq-Op64EhWrsi5yUZKVIKR1MAfYo2qFlCeXD8VkexY7_1qg-ClV-fE8j9jgVlPZxRh3wVc54qLe_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"
这里重点注意以下地方:

刷票模式:尽量选择第 2 种候补+刷票
出发时间:这个就是买的哪天的车
购买的车次:参数是一个集合,可以选则多个车次去抢,增加概率,多个车次的出发城市保持一致,别一个是广州,一个是广州东
出发城市:地名和 12306 保持一致,这没啥好说的
到达城市:地名和 12306 保持一致,这没啥好说的
座位:一般选择硬座,动车选择二等座
乘车人:暂时填一个,别填太多
12306登录账号:12306 账号密码,建议使用浏览器登录一遍,确保正确
打码方式:本地打码 AUTO_CODE_TYPE = 2HOST = "captcha:80",云打码 AUTO_CODE_TYPE = 3HOST = "120.77.154.140:8000",云打码服务器有限,不是自己搭建的不推荐使用,官方提供的云打码文件,不需要再添加到 12306 项目根目录,里面已经有了
邮箱配置:直接参照它注释中的邮箱,由于我的是域名邮箱,所以我的配置不同
server酱:前往server酱扫码绑定获取 SECRET 并关注获得抢票结果通知的公众号
下单模式:预售 RDER_MODEL = 1;捡漏 RDER_MODEL = 2,预售模式记得一定要填写预售时间
预售放票时间:预售模式下,直接用 OPEN_TIME = "12:59:57",建议时间提前几秒,捡漏模式不做修改
COOKIE_TYPE:一般选择第三个,需配置 RAIL_EXPIRATIONRAIL_DEVICEID 的值

  • RAIL_EXPIRATION:打开12306并且登录成功后,右击浏览器选择检查元素,在 Application -> Cookies -> Name/Value 中可以找到对应的值
  • RAIL_DEVICEID:获取方式同上

Screenshot from 2019-12-25 17-55-23.png

填写无误后保存修改后的 TickerConfig.py 文件

运行代码

  • 开始抢票:docker-compose up --build -d
  • 查看抢票log: docker logs --follow ticket
  • 停止抢票:docker-compose down

注意:上面三个命令,一定要在 12306 开源项目的根目录运行
配置完 TickerConfig.py 文件之后就可以运行开始抢票命令了,如果运行日志没报错的话,就可以运行查看抢票log命令查看进度,不出意外的话,首先是加入 CDN ,检查 Cookie ,设置打码,登录账号,然后才开始抢票,如果一切顺利的话,日志输出如下

查看抢票日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
当前配置:
出发站:广州东
到达站:赣州
车次: K675,T219
乘车日期:2020-01-20
坐席:硬座
是否有票优先提交:True
乘车人:['张三']
刷新间隔: 随机(1-3S)
僵尸票关小黑屋时长: 5
下单接口: 2
下单模式: 2
预售踩点时间:12:59:57
**************************************************
cookie获取中
需要验证码
下载验证码...
下载验证码成功
Corrupt JPEG data: 15 extraneous bytes before marker 0xd9
无需加载模型model.v2.0.h5
题目为['红酒']
1 铃铛
2 茶盅
3 红酒
4 手掌印
5 铃铛
6 红酒
7 茶盅
8 路灯
验证码识别坐标为184,77,112,149
184,77,112,149
验证码通过,开始登录..
登录成功
欢迎 肖思成 登录
车次:T3091 出发站:广州东 到达站:赣州 历时:08:14 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:-- 软座:-- 硬座:无 无座:无 预订
车次:Z112 出发站:广州东 到达站:赣州 历时:05:07 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:无 硬座:无 无座:无 预订
车次:K675 出发站:广州东 到达站:赣州 历时:06:58 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:无 硬座:无 无座:无 预订
车次:T219 出发站:广州东 到达站:赣州 历时:06:40 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:无 硬座:无 无座:无 预订
车次:K729 出发站:广州东 到达站:赣州 历时:99:59 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:-- 软座:-- 硬座:-- 无座:-- 列车运行图调整,暂停发售
车次:T170 出发站:广州东 到达站:赣州 历时:05:10 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:无 硬座:无 无座:无 预订
车次:T155 出发站:广州东 到达站:赣州 历时:06:22 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:无 硬座:无 无座:9 预订
车次:K795 出发站:广州东 到达站:赣州 历时:07:25 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:无 硬座:无 无座:有 预订
车次:K85 出发站:广州东 到达站:赣州 历时:06:53 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:无 硬座:无 无座:1 预订
车次:K210 出发站:广州东 到达站:赣州 历时:04:46 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:无 硬座:无 无座:无 预订
车次:K1666 出发站:广州东 到达站:赣州 历时:08:47 商务/特等座:-- 一等座:-- 二等座:-- 动卧:-- 硬卧:无 软座:-- 硬座:无 无座:有 预订
正在第1次查询 停留时间:2.81 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:925.563 183.134.42.158
广州东-赣州 车次坐席查询为空,查询url: https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2020-01-20&leftTicketDTO.from_station=GGQ&leftTicketDTO.to_station=GZG&purpose_codes=ADULT, 可以手动查询是否有票
正在第2次查询 停留时间:1.1 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:18.326 112.47.56.174
正在第3次查询 停留时间:1.12 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:936.732 111.161.122.67
正在第4次查询 停留时间:1.43 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:426.435 112.28.196.251
正在第5次查询 停留时间:1.19 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:526.847 42.81.144.180
正在第6次查询 停留时间:1.53 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:901.608 223.111.18.161
正在第7次查询 停留时间:1.53 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:612.251 116.77.75.147
正在第8次查询 停留时间:1.09 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:797.085 183.134.42.158
正在第9次查询 停留时间:1.42 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:553.276 42.81.144.179
正在第10次查询 停留时间:2.74 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:335.643 14.204.185.123
正在第11次查询 停留时间:1.96 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:463.363 223.86.219.66

如果抢到票了,将会邮件通知 30 分钟内前去 12306 付款,可以网页,也可以 App 中找未完成订单

Screenshot from 2019-12-25 18-32-04.png

常见问题

启动抢票命令直接报 python 代码错误

这种一看就是 TickerConfig.py 文件参数配置的有问题,建议检查清楚再运行

抢票 log 一直提示 302 状态码
1
2
3
4
5
6
正在第46次查询 停留时间:1.17 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:534.931 113.5.80.33
url: /otn/leftTicket/queryZ?leftTicketDTO.train_date=2020-01-20&leftTicketDTO.from_station=GGQ&leftTicketDTO.to_station=GZG&purpose_codes=ADULT返回参数为空, 接口状态码: 302
广州东-赣州 车次坐席查询为空,查询url: https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2020-01-20&leftTicketDTO.from_station=GGQ&leftTicketDTO.to_station=GZG&purpose_codes=ADULT, 可以手动查询是否有票
正在第47次查询 停留时间:2.82 乘车日期: 2020-01-20 车次:K675,T219 下单无票 无候补机会 耗时:597.988 183.222.97.164
url: /otn/leftTicket/queryZ?leftTicketDTO.train_date=2020-01-20&leftTicketDTO.from_station=GGQ&leftTicketDTO.to_station=GZG&purpose_codes=ADULT返回参数为空, 接口状态码: 302
广州东-赣州 车次坐席查询为空,查询url: https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2020-01-20&leftTicketDTO.from_station=GGQ&leftTicketDTO.to_station=GZG&purpose_codes=ADULT, 可以手动查询是否有票

这种情况就是服务器被 12306 识别出刷票,你的请求被转发到了别的地方,建议运行停止抢票命令,休息一下,过段时间再启动命令抢票

运行开始抢票命令,有依赖下载失败

这种情况一般发生在国内服务器上,如果是本地电脑的话,建议翻下墙,服务器的话,做下代理或换下源,如果还是下载中断之类的,重新运行开始抢票命令,直到依赖下载下来为止(博主本地电脑也中断了好多次)

查看本家点击这里

----------------本文结束感谢阅读----------------
如果觉得文章好的话,就打个赏吧!
隐藏