【Python自动化脚本】实现高铁票监控并成功购票(2024年版文末附源码地址

使用Python自动化监控购买火车票-附源码解析及下载


摘要:随着春运在即,我们通过模拟12306购票流程,实现了自动查询、下单和状态监控。为了提升用户体验,我们在购票成功后加入了弹窗提示功能,使用Python的tkinter模块创建了简单的弹窗窗口,向用户展示购票成功的信息。减少重复操作,同时开启无界面模式,只需挂在后台购票成功后自动弹窗提示,已测试可用并成功购票


声明:本文作为技术交流,不可用于商业用途,所有内容均为原创,转载请附链接

前期说明

版本
python版本:3.9
chromedriver:官网查找适配自己的驱动版本
chromedriver官网地址:http://chromedriver.storage.googleapis.com/index.html (或者度娘搜索教程

所有模块:
1.selenium: 用于自动化地进行浏览器操作,实现模拟登录、查询火车票和下单等功能。

2.configparser: 用于读取和写入配置文件,这里主要用来存储用户的出发站、到达站和日期等信息。

3.schedule: 用于实现定时任务,定期执行查询和下单操作。

4.time: 提供时间相关的功能,比如等待一段时间。

5.tkinter: 用于创建简单的GUI界面,这里主要用于在购票成功时弹出一个提示窗口。

Part 1 主业务流程


1.用户登录模拟: 使用Selenium自动化工具,模拟用户在12306网站的登录过程,包括输入用户名、密码、身份证尾号和手机验证码。

2.配置信息读取: 通过读取配置文件或手动输入,获取用户的出发站、到达站和日期等旅行信息。

3.车票查询操作: 利用Selenium模拟用户在12306网站上查询车票,输入出发站、到达站、日期等信息,并执行查询操作。

4.预订流程模拟: 如果查询结果有车票,脚本会模拟用户点击预订按钮,进入下单页面。

5.乘车人信息勾选: 在下单页面,脚本会自动勾选乘车人信息,准备提交订单。

6.提交订单操作: 脚本模拟用户点击提交订单按钮,进行订单的最终确认。

7.状态提示弹窗: 在订单提交成功后,通过tkinter模块创建一个简单的弹窗,向用户展示购票成功的信息。

8.支付信息提醒: 弹窗中提供支付相关信息,引导用户进一步完成支付流程。

Part 2 登录功能代码解析

  • 打开登录页面: driver.get(“https://kyfw.12306.cn/otn/resources/login.html”) 打开12306的登录页面。

  • 定位用户名和密码输入框: 使用 driver.find_element 方法通过元素的ID属性定位用户名和密码输入框。

  • 在这里插入图片描述

  • 输入用户名和密码: 通过 send_keys 方法输入用户在命令行中输入的用户名和密码。

  • 点击登录按钮: 使用 driver.find_element(By.ID, “J-login”).click() 模拟点击登录按钮。

  • 身份验证: 输入身份证尾号和手机短信验证码。

  • 在这里插入图片描述

  • 等待登录完成: 使用 time.sleep(10) 等待登录完成,确保登录成功后页面加载完毕。

  • 定位到车票查询页面: 通过XPath定位到单程票的页面,进入车票查询页面。


Part 2 查询功能代码解析

输入查询信息: 通过 read_travel_info_from_config 获取用户配置的出发站、到达站和日期信息,然后使用 send_keys 方法输入到对应的输入框。
选择查询条件: 使用 Select 类处理下拉框,选择出发时间段。
勾选可用车票: 判断复选框是否已被勾选,如果未勾选,则点击勾选。
点击查询按钮: 模拟用户点击查询按钮。

等待查询结果: 使用 WebDriverWait 等待查询结果元素出现,设置最大等待时间为10秒。
在这里插入图片描述

处理查询结果: 如果查询结果存在,模拟用户点击结果元素,然后调用 place_order 方法进行下单操作。
检查登录状态: 检查 J-userName 输入框是否存在,如果存在则表示登录时间过期,终止程序。
异常处理: 使用异常捕获处理暂时无票的情况。


Part 3 下单功能代码解析

1.勾选乘车人信息

通过XPath定位到勾选复选框的元素。
判断该复选框是否已被勾选,如果未勾选则进行点击,实现勾选乘车人信息。
在这里插入图片描述

2.判断页面是否跳转成功

获取点击提交订单按钮后的当前URL。
判断URL是否发生了变化,若变化则表示页面跳转成功。
如果购票成功,根据页面内容进行相应操作,例如弹窗提示购票成功。
在这里插入图片描述


Part 4 定时任务

定时任务就像是一个自动提醒的小伙伴,它定期地检查火车票信息,帮你抢票和下单。这样,你就不用每次都亲自操作,而是让这个小伙伴在规定的时间点自动完成任务。这不仅省去了手动劳动,还能确保在高峰时段快速响应,提高抢票成功的几率。就像有了一个懂你需求的助手,让整个抢票过程更轻松高效。所以源码也加入了定时任务

在这里插入图片描述


学习过程总结

  1. 个人测试12306登陆后大概1小时会登录过期,需要重新登录操作。
  2. 该程序以个人为场景做的,所以没有涉及到多线程,网络编程等等
  3. 其中的通知功能因为阿里云的短信服务api接口审核太严,就没加上去,有条件可以自己探索
  4. 有部分内容Xpath 路径跟我锁定的不一致,建议自己用打开浏览器按F12开发工具去复制相关元素路径
  5. 文件结构有main_auto.py, main_test.py 两个文件,修改内容可以在test修改测试完在复制去auto中运行。多创个文件是为了方便修改

源码链接

源码社区(附有每一期文章源码 :https://t.zsxq.com/1645BOuxj
加入社区优惠券:https://t.zsxq.com/16ksfdpbw

  • 27
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PG万般

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值