临近春节了,大家也都开始抢火车票了,pk 哥每年过年也要抢火车票回去过年。我还记得去年过年用软件抢了一个月都没抢到,当时计划第二天返程上班,当天坐在电脑前不停的刷新,提交订单,在无数次的点击刷新下,还真让我手动刷新抢到了难能可贵的返程票。
今年 pk 哥想换一种方式来抢票,就是用 Python 代替手工去不停的刷新,检测到余票马上点进去提交订单,提交订单成功后发邮件通知我去支付,30 分钟内支付成功就购票成功了。
目录
- 抢票效果
- splinter 库安装导入
- 准备工作:初始化属性
- 登录功能实现
- 邮件通知实现
- 查票功能实现
- 买票功能实现
- 源码获取方式
抢票效果
运行代码后,Splinter 会自动启动浏览器,代替手工去操作页面,执行打印日志如下。
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">请输入验证码...
开始购票...
第1次点击查询...
第2次点击查询...
第3次点击查询...
第4次点击查询...
第5次点击查询...
第6次点击查询...
第7次点击查询...
第8次点击查询...
预订失败...
开始预订...
开始选择用户...
提交订单...
确认选座...
预订成功...
抢票通知邮件发送成功!
</pre>
抢票成功后,我们会收到抢票成功的邮件。
同时,火车票订单中有一张刚才待支付的火车票,手动支付成功后就完成整个抢票流程了。
splinter 库安装导入
这次用到的库是 Splinter,Splinter 是一个使用 Python 测试 Web 应用程序的开源工具。它允许你自动执行浏览器操作,例如访问 URL 和与其项目交互,和 Selenium 库类似。
使用 pip 命令直接安装。
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">pip install splinter
</pre>
我用的 Python 环境是 Python3,用的编辑器是 Pycharm,编辑器大家可自行选择。安装后导入即可用。
准备工作
在开始写购票程序之前,我们得先建一个购票类,并初始化实例属性,初始化各种相关链接,定义好浏览器(我用的是 Chrome 浏览器)和浏览器驱动的保存路径。
登录功能实现
登录页面需要三要素:用户名、密码、图形验证码,用户名和密码我们直接通过自动化输入完成,图形验证码太复杂,用自动化识别输入的话正确率不高,我们直接手动输入好了。登录成功后和刚才初始化的登录 URL 匹配,匹配成功则表示登录成功。
邮件通知功能
我们先定义下邮件通知函数,等下购票成功后直接调用这个函数发邮件就可。发邮件功能的程序之前 pk 哥详细给大家分析过的
我用的是 QQ 邮箱,因为 QQ 邮箱绑定微信和 QQ 后,通知更及时。
查票功能实现
接下来,我们在买票功能中先写好查票的功能,定义好查询的信息并添加到 cookie 中,cookie 信息我们可以在调试信息中查看。我们主要用到的是图中标示的乘车日期、出发地、目的地。
接下来我们对火车票进行查询判断,如果没票的话就持续的点击查询按钮直到有票为止,当然有时候也会出现网络不好或者 12306 的服务不稳定,出现查询异常的情况。
遇到这些情况,程序会持续的重复查询直到有数据显示,部分代码如下。
买票功能实现
一旦有票就会点击预定按钮进入预定流程,选择乘车人并提交订单。
提交订单后有确认选座的提示,点击确定后订票订单就生成了,生成后调用刚才定义的发邮件程序。
最后,主函数里给出必须传的一些参数:用户名、登录密码、乘车人姓名、乘车日期、出发地 cookie、目的地 cookie、邮件标题、邮件内容,调用购票程序,搞定!
网友评论