回家的票买到了么?今天教你如何用 Python 抢票
作者:互联网
个人微信公号:小张Python ,欢迎大家关注!
大家好,我是 zeroing~
马上该过年了,不知道大家都买到回家的票了没?每到年末,票就变得特别难搞,今年因为疫情管控可能要比往年好一点,但依旧不好抢,,,
对于路途相对较远的小伙伴,一旦错过了最佳放票时机,之后抢到票的的可能性很小,因为跟你一起竞争抢票的大部分都不是人而是自动化程序,在一秒之内就能完成购票下单的那种(当然,也是在有票的前提下)
今天呢,给大家介绍一个 12306抢票 相关的开源项目,并手把手教大家把程序跑起来,希望我们大家都能抢到回家的票
在 Github 上搜索关键词 12306 能搜到好多相关开源项目,star 最高的有 29.3k ,但根据项目更新日志(最近更新是13个月之前)来看,时效性有待验证
这个项目的配置过程很简单,只需要配置用户名跟密码即可,我试着本地跑了一下;验证码识别步骤是没问题,但是在登录(Cookie 自动收集验证时)步骤不太行了
前两天看 早起大佬(公众号:早起Python) 分享了一篇文章,介绍另一个12306抢票项目,该项目的作者 罐子里的茶 在上面这个项目的 bug 的基础上做了一些改动,相对原来项目多了一个配置步骤 配置 Cookie信息;
star目前 已有260+ ,我自己也测试了一下可用,用来抢票的话是没有问题的,效果如下;
下面我将介绍一下这个项目的具体配置步骤
1, 下载仓库到本地
该项目的Github 地址:https://github.com/gzldc/12306
首先把下载原项目到本地,下载时是建议不要用 git 命令,会比较慢,直接点下方的 Download ZIP 按钮即可
把下载好的项目进行解压,解压后的目录如下(没有venv文件夹,venv 指的是虚拟环境)
这里需要说一下,因为项目需要依赖项 Tensorflow ,Tensorflow 目前仅支持 Python 3.6-3.8,且为 64 位的,请确保自己的 Python 版本是否符合这个要求;我用的是 Python 3.7.6 、64 位, 进行测试,一切 正常
2,创建虚拟环境、安装依赖项
创建虚拟环境 的主要目的防止项目所需配置项与系统自带的产生冲突,为项目创建一个虚拟环境,可以用pipenv、virtualenv 命令行命令,也可以借助 Pycharm 中的 Project Interpreter
选项进行配置,我配置时借助的是 Pycharm
安装依赖项 ,在项目根目录下打开终端,在虚拟环境下输入下方命令配置项目所需要的依赖项
pip install -r requirements.txt
3,添加Cookie,更改项目配置
依赖项配置完成之后,打开项目文件目录下的 TickerConfig.py
这个文件存放的是程序需要的配置信息,在50-55行左右,找到 三个参数 tk
、RAIL_EXPIRATION
、RATI_DEVICEID
, 这三个参数的信息都在 Cookie 中,需要手动配置
如何找到找到 Cookie 呢?首先用浏览器打开 12306,用自己的账号进行登录,完成之后按快捷键 F12
或鼠标右键找到 审查
选项,点击网页开发者模式,Network->XHR,如下图
如果上方右边页面为空的话,刷新一下网页即可,
点击 XHR 中的 initMy...网页,Request Headers
选项下的 Cookies
就是程序需要的信息
Cookie 中只需要其中的3项,找到 tk
、RAIL_EXPIRATION
、RATI_DEVICEID
这三项,依次填入配置文件中即可,注意只需填入等号之后分号之前的字符串
Cookie 配置完之后,接下来就是一些基本信息的配置,例如日期、乘车人、座位等,重新进入TickerConfig.py
脚本
TICKET_TYPE
,刷票模式,(默认1 就行),SATION_DATES
、出发日期OPEN_TIME
,预售放票时间(建议为空);
- FROM_STATION,出发地
- TO_STATION,目的地
- SET_TYPE,座位
- IS_MORE_TICKET,单张填 True,多张填 False
- TICKET_PEOPLES,自己账户中的乘客信息(需要提前在账户中配置好)
- USER , 默认即可,不需要填
- PWD,默认即可,不需要填
- tk,RAIL_EXPIRATION,RAIL_DEVICEID ,Cookie 中的内容,参考文章前面提配置教程;
- 后面
11
字符是
配置中需要更改的参数就是上面提到的这些,到这里环境配置基本 OK,接下来就是要启动程序
4,启动程序,开始抢票
在终端处,先输入
python run.py c
加入 cdn,程序中用到了代理池,所以提前先启动一下代理池,把一些不能用的代理给剔除掉,cdn 运行效果如下(这个步骤耗时相对长一些,请耐心等待)
cdn 加载完成之后,输入以下命令
python run.py r
启动脚本进行抢票,最终效果如下:
抢到票之后,需要用户在30分钟之内完成支付,否则票会被系统回收;因此程序中还添加了邮箱提醒、微信提醒等功能,这里我没有做详细介绍,小伙伴们感兴趣的话可以自行研究一下
5,后记
上面的步骤虽然很详细,但可能由于环境配置的一点差异,第一次部署时可能依然存在一些 bug 问题,下面的两条是我在配置中遇到的,小伙伴们可以参考一下(没遇到更好)
1,AttributeError : 'str' object has no attribute 'decode'
报错信息如下
model_config = json.loads(model_config.decode('utf-8'))
AttributeError: 'str' object has no attribute 'decode'
出现上面这个错误是由于 安装的一个包 h5py
版本过高,
解决方法:通过 pip install h5py==2.10.0
降低版本即可;
2,tk 失效
是由于步骤 3 中的Cookie信息过期了,解决方法,按照步骤 3 的方法重新配置一下 tk 即可,后面的两个参数基本不会发生变化;
以上就是本篇文章的全部内容了,希望文章对大家有所帮助,最后感谢大家阅读!
免责声明,本教程仅作为个人学习研究使用,不得用于任何商业用途,否则后果自负!
标签:项目,Python,配置,抢票,回家,虚拟环境,Cookie 来源: https://www.cnblogs.com/zeroing0/p/14291663.html