• 0

  • 471

  • 收藏

回家的票买到了么?今天教你如何用 Python 抢票

perpetual

python交流

1个月前

个人微信公号:小张Python ,欢迎大家关注!

大家好,我是 zeroing~

马上该过年了,不知道大家都买到回家的票了没?每到年末,票就变得特别难搞,今年因为疫情管控可能要比往年好一点,但依旧不好抢,,,

对于路途相对较远的小伙伴,一旦错过了最佳放票时机,之后抢到票的的可能性很小,因为跟你一起竞争抢票的大部分都不是人而是自动化程序,在一秒之内就能完成购票下单的那种(当然,也是在有票的前提下)

今天呢,给大家介绍一个 12306抢票 相关的开源项目,并手把手教大家把程序跑起来,希望我们大家都能抢到回家的票

在 Github 上搜索关键词 12306 能搜到好多相关开源项目,star 最高的有 29.3k ,但根据项目更新日志(最近更新是13个月之前)来看,时效性有待验证

image-20210116154318822

这个项目的配置过程很简单,只需要配置用户名跟密码即可,我试着本地跑了一下;验证码识别步骤是没问题,但是在登录(Cookie 自动收集验证时)步骤不太行了

image-20210116154632274

前两天看 早起大佬(公众号:早起Python) 分享了一篇文章,介绍另一个12306抢票项目,该项目的作者 罐子里的茶 在上面这个项目的 bug 的基础上做了一些改动,相对原来项目多了一个配置步骤 配置 Cookie信息

star目前 已有260+ ,我自己也测试了一下可用,用来抢票的话是没有问题的,效果如下;

Snipaste_2021-01-16_12-00-19

下面我将介绍一下这个项目的具体配置步骤

1, 下载仓库到本地

该项目的Github 地址:https://github.com/gzldc/12306

首先把下载原项目到本地,下载时是建议不要用 git 命令,会比较慢,直接点下方的 Download ZIP 按钮即可

Snipaste_2021-01-16_13-43-22

把下载好的项目进行解压,解压后的目录如下(没有venv文件夹,venv 指的是虚拟环境)

image-20210116134810028

这里需要说一下,因为项目需要依赖项 Tensorflow ,Tensorflow 目前仅支持 Python 3.6-3.8,且为 64 位的,请确保自己的 Python 版本是否符合这个要求;我用的是 Python 3.7.6 、64 位, 进行测试,一切 正常

2,创建虚拟环境、安装依赖项

创建虚拟环境 的主要目的防止项目所需配置项与系统自带的产生冲突,为项目创建一个虚拟环境,可以用pipenv、virtualenv 命令行命令,也可以借助 Pycharm 中的 Project Interpreter 选项进行配置,我配置时借助的是 Pycharm

virtualenv

安装依赖项 ,在项目根目录下打开终端,在虚拟环境下输入下方命令配置项目所需要的依赖项

pip install -r requirements.txt
复制代码

1

3,添加Cookie,更改项目配置

依赖项配置完成之后,打开项目文件目录下的 TickerConfig.py 这个文件存放的是程序需要的配置信息,在50-55行左右,找到 三个参数 tkRAIL_EXPIRATIONRATI_DEVICEID , 这三个参数的信息都在 Cookie 中,需要手动配置

Cookie

如何找到找到 Cookie 呢?首先用浏览器打开 12306,用自己的账号进行登录,完成之后按快捷键 F12 或鼠标右键找到 审查选项,点击网页开发者模式,Network->XHR,如下图

image-20210116144205757

如果上方右边页面为空的话,刷新一下网页即可,

点击 XHR 中的 initMy...网页,Request Headers 选项下的 Cookies 就是程序需要的信息

image-20210116144503667

Cookie 中只需要其中的3项,找到 tkRAIL_EXPIRATIONRATI_DEVICEID 这三项,依次填入配置文件中即可,注意只需填入等号之后分号之前的字符串

image-20210116145013283

Cookie 配置完之后,接下来就是一些基本信息的配置,例如日期、乘车人、座位等,重新进入TickerConfig.py 脚本

image-20210116145344344

  • TICKET_TYPE,刷票模式,(默认1 就行),
  • SATION_DATES、出发日期
  • OPEN_TIME ,预售放票时间(建议为空);

image-20210116145728654

  • FROM_STATION,出发地
  • TO_STATION,目的地
  • SET_TYPE,座位
  • IS_MORE_TICKET,单张填 True,多张填 False

image-20210116150728952

  • TICKET_PEOPLES,自己账户中的乘客信息(需要提前在账户中配置好)
  • USER , 默认即可,不需要填
  • PWD,默认即可,不需要填
  • tk,RAIL_EXPIRATION,RAIL_DEVICEID ,Cookie 中的内容,参考文章前面提配置教程;
  • 后面11 字符是

配置中需要更改的参数就是上面提到的这些,到这里环境配置基本 OK,接下来就是要启动程序

4,启动程序,开始抢票

在终端处,先输入

python run.py c
复制代码

加入 cdn,程序中用到了代理池,所以提前先启动一下代理池,把一些不能用的代理给剔除掉,cdn 运行效果如下(这个步骤耗时相对长一些,请耐心等待)

筛选CDN

cdn 加载完成之后,输入以下命令

python run.py r
复制代码

启动脚本进行抢票,最终效果如下:

22222

抢到票之后,需要用户在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 失效

image-20210116153011724

是由于步骤 3 中的Cookie信息过期了,解决方法,按照步骤 3 的方法重新配置一下 tk 即可,后面的两个参数基本不会发生变化;

以上就是本篇文章的全部内容了,希望文章对大家有所帮助,最后感谢大家阅读!

免责声明,本教程仅作为个人学习研究使用,不得用于任何商业用途,否则后果自负!

免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

Python

471

相关文章推荐

未登录头像

暂无评论