12306自动抢票软件。
- 在Configure.py中配置车票信息。
- 执行easytrain.py。
需要额外安装的第三方库:
注:
- 登录模块分析可查看:12306之登录流程解析
- 查询模块分析可查看:12306之余票查询流程解析
- 下单模块分析可查看:12306之下单流程解析
12306自动抢票软件
12306自动抢票软件。
需要额外安装的第三方库:
注:
正在获取验证码..
-----------------
| 0 | 1 | 2 | 3 |
-----------------
| 4 | 5 | 6 | 7 |
-----------------
输入验证码索引(见上图,以','分割): 2,7
captchaResult: 180,40,250,110
captchaCheck: {'result_message': '验证码校验成功', 'result_code': '4'}
核验方式不正确!
核验方式不正确!
正在获取验证码..
Traceback (most recent call last):
File "/Users/fengheping/Desktop/mySpace/work/pros/EasyTrain/easytrain.py", line 48, in
main()
File "/Users/fengheping/Desktop/mySpace/work/pros/EasyTrain/easytrain.py", line 16, in main
result, msg = login.login(USER_NAME, USER_PWD)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/fengheping/Desktop/mySpace/work/pros/EasyTrain/train/login/Login.py", line 64, in login
result, msg = self._login(userName, userPwd, type=(count % 2))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/fengheping/Desktop/mySpace/work/pros/EasyTrain/train/login/Login.py", line 17, in wrapper
reslut, msg = func(*args, **kw)
^^^^^^^^^^^^^^^^^
File "/Users/fengheping/Desktop/mySpace/work/pros/EasyTrain/train/login/Login.py", line 73, in _login
return self._loginAsyncSuggest(userName, userPwd)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/fengheping/Desktop/mySpace/work/pros/EasyTrain/train/login/Login.py", line 106, in _loginAsyncSuggest
results, verify = Captcha().verifyCaptchaByHand(type=TYPE_LOGIN_OTHER_WAY)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/fengheping/Desktop/mySpace/work/pros/EasyTrain/train/login/Capthca.py", line 69, in verifyCaptchaByHand
img = Image.open(BytesIO(self.getCaptcha(type)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/PIL/Image.py", line 3280, in open
raise UnidentifiedImageError(msg)
PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x10d76bfb0>
�[32m正在登录...�[39m
Traceback (most recent call last):
File ".\easytrain.py", line 48, in
main()
File ".\easytrain.py", line 16, in main
result, msg = login.login(USER_NAME, USER_PWD)
File "F:\EasyTrain\train\login\Login.py", line 64, in login
result, msg = self._login(userName, userPwd, type=(count % 2))
File "F:\EasyTrain\train\login\Login.py", line 17, in wrapper
reslut, msg = func(*args, **kw)
File "F:\EasyTrain\train\login\Login.py", line 75, in _login
return self._loginNormal(userName, userPwd)
File "F:\EasyTrain\train\login\Login.py", line 79, in _loginNormal
self._uamtk()
File "F:\EasyTrain\train\login\Login.py", line 47, in _uamtk
return isSuccess(jsonRet),
File "F:\EasyTrain\train\login\Login.py", line 45, in isSuccess
return response['result_code'] == 0 if 'result_code' in response else False
TypeError: argument of type 'NoneType' is not iterable
哈哈,跟着你的文章实践了一遍。
楼上提出的慢排队问题确实存在,而且出现的概率很高。
研究了一天他自带的刷票接口,总是提示出票失败。有没有兴趣一起探讨一下呀。
https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueueAsys
提交订单后,排队过程中,被“慢速排队”拦截, 排队时间超过30分钟。
http://www.techweb.com.cn/internet/2018-02-01/2635181.shtml
试用了多个脚本,均有这个问题。12306是通过什么样的方法,识别“可疑订单”的呢?脚本的请求频率并不频繁啊?作者找到破解的方法了吗?
submitOrderRequest None
'NoneType' object is not subscriptable
请问这样正常吗?
发现一个问题呀!
在购买学生票的时候会出现这个错误:
checkOrderInfo: 第 1 张车票: 乘客不是学生,请从常用联系人中选择学生购买此车票。
经过对各个请求的分析,发现问题出在 校验订单信息
这个部分。
对应的请求是:https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo
。
这个请求有一个参数是:oldPassengerStr
,相应的格式化这个参数的方法在:utils/TrainUtils.py
中的 oldPassengerStr(passengerDetails)
中,其中下划线前面的数字是 1
,而实际请求中的参数值为 3
。
解决方法:
将下划线前面的 1
改为 3
。
def oldPassengerStr(passengerDetails):
# oldPassengerStr-->张三(passenger_name),1(证件类型:passenger_id_type_code),320xxxxxx(passenger_id_no),1_
return '%s,%s,%s,1_' % (passengerDetails.passengerName,
passengerDetails.passengerIdTypeCode,
passengerDetails.passengerIdNo)
改为 3
之后就可以正常下单了,具体原理还不太清楚,不知道和购票人类别有没有关系。
# 购票人类别(成人票:1,儿童票:2,学生票:3,残军票:4)
PASSENGER_TYPE_CODE = '3'
运行会出现这个错误
Query.py的函数query中,get请求的参数params没发送成功?
一直返回的是网络问题的页面
这边有门票类的项目想找你合作,如果有意向的话,你有时间可以看一下,当然你也可以将你的即时通讯联系方式,发到这个邮箱:[email protected],麻烦发过来的时候备注为:票务项目合作,谢谢!
Hi,
今天在试用这个脚本,想一边抢票一边看看代码学习。
但目前发现一个问题,在登录过程中执行到 以下这行代码就重定向(status code 302)https://github.com/Why8n/EasyTrain/blob/master/train/login/Login.py#L99 ,
只有偶尔成功登录得上。
今天我花了半天时间去研究也没修复这个问题,@Why8n 能否帮忙修复下这个问题啊? 很喜欢你写的这个脚本,代码简洁。
谢谢
我直接在postman中请求getPassengerDTOs 为什么都是400?
没有header 只有body
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.