美文网首页码农的世界
利用Python秒杀火车票加邮件通知

利用Python秒杀火车票加邮件通知

作者: b4a0155c6514 | 来源:发表于2019-01-02 15:23 被阅读5次

    临近春节了,大家也都开始抢火车票了,pk 哥每年过年也要抢火车票回去过年。我还记得去年过年用软件抢了一个月都没抢到,当时计划第二天返程上班,当天坐在电脑前不停的刷新,提交订单,在无数次的点击刷新下,还真让我手动刷新抢到了难能可贵的返程票。

    利用Python秒杀火车票加邮件通知

    今年 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>

    抢票成功后,我们会收到抢票成功的邮件。

    利用Python秒杀火车票加邮件通知

    同时,火车票订单中有一张刚才待支付的火车票,手动支付成功后就完成整个抢票流程了。

    利用Python秒杀火车票加邮件通知

    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 浏览器)和浏览器驱动的保存路径。

    利用Python秒杀火车票加邮件通知

    登录功能实现

    登录页面需要三要素:用户名、密码、图形验证码,用户名和密码我们直接通过自动化输入完成,图形验证码太复杂,用自动化识别输入的话正确率不高,我们直接手动输入好了。登录成功后和刚才初始化的登录 URL 匹配,匹配成功则表示登录成功。

    利用Python秒杀火车票加邮件通知

    邮件通知功能

    我们先定义下邮件通知函数,等下购票成功后直接调用这个函数发邮件就可。发邮件功能的程序之前 pk 哥详细给大家分析过的

    利用Python秒杀火车票加邮件通知

    我用的是 QQ 邮箱,因为 QQ 邮箱绑定微信和 QQ 后,通知更及时。

    利用Python秒杀火车票加邮件通知

    查票功能实现

    接下来,我们在买票功能中先写好查票的功能,定义好查询的信息并添加到 cookie 中,cookie 信息我们可以在调试信息中查看。我们主要用到的是图中标示的乘车日期、出发地、目的地。

    利用Python秒杀火车票加邮件通知

    接下来我们对火车票进行查询判断,如果没票的话就持续的点击查询按钮直到有票为止,当然有时候也会出现网络不好或者 12306 的服务不稳定,出现查询异常的情况。

    利用Python秒杀火车票加邮件通知

    遇到这些情况,程序会持续的重复查询直到有数据显示,部分代码如下。

    利用Python秒杀火车票加邮件通知

    买票功能实现

    一旦有票就会点击预定按钮进入预定流程,选择乘车人并提交订单。

    利用Python秒杀火车票加邮件通知

    提交订单后有确认选座的提示,点击确定后订票订单就生成了,生成后调用刚才定义的发邮件程序。

    利用Python秒杀火车票加邮件通知

    最后,主函数里给出必须传的一些参数:用户名、登录密码、乘车人姓名、乘车日期、出发地 cookie、目的地 cookie、邮件标题、邮件内容,调用购票程序,搞定!

    利用Python秒杀火车票加邮件通知

    相关文章

      网友评论

        本文标题:利用Python秒杀火车票加邮件通知

        本文链接:https://www.haomeiwen.com/subject/fdmzlqtx.html