使用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 定时任务
定时任务就像是一个自动提醒的小伙伴,它定期地检查火车票信息,帮你抢票和下单。这样,你就不用每次都亲自操作,而是让这个小伙伴在规定的时间点自动完成任务。这不仅省去了手动劳动,还能确保在高峰时段快速响应,提高抢票成功的几率。就像有了一个懂你需求的助手,让整个抢票过程更轻松高效。所以源码也加入了定时任务
学习过程总结
- 个人测试12306登陆后大概1小时会登录过期,需要重新登录操作。
- 该程序以个人为场景做的,所以没有涉及到多线程,网络编程等等
- 其中的通知功能因为阿里云的短信服务api接口审核太严,就没加上去,有条件可以自己探索
- 有部分内容Xpath 路径跟我锁定的不一致,建议自己用打开浏览器按F12开发工具去复制相关元素路径
- 文件结构有main_auto.py, main_test.py 两个文件,修改内容可以在test修改测试完在复制去auto中运行。多创个文件是为了方便修改
源码链接
源码社区(附有每一期文章源码 :https://t.zsxq.com/1645BOuxj
加入社区优惠券:https://t.zsxq.com/16ksfdpbw