目录
一、说明
1.1、背景
1.2、说明
二、步骤
2.1、点击去购票
2.2、在搜索框中输入车次信息
2.3、点击查找
2.4、出现车次信息,进行筛选,如果有票则点击计入预定车票界面
三、结果
四、小节
一、说明
1.1、背景
接上文,春运抢不到票,试图通过代码解决这个问题,以下内容是第二部分。
1.2、说明
操作系统:win 10
编辑器:pycharm edu
语言及版本:python 3.10
使用的库:selenium
实现思路:使用selenium模拟人的行为,进行自动化操作
关于代码:完整代码会在第三部分完全实现功能放出
第一部分内容-->已解决登录问题。
浏览器下载与驱动的安装:火狐浏览器下载与驱动安装
第一部分内容链接:第一部分
浏览器闪退说明:大概率是因为下载的浏览器和浏览器驱动版本不一致,建议使用搜索引擎查找大佬分享的内容解决
以下url不会放真实的,拿来测试注意识别并自行更改。
自动化购票流程图功能实现如下图1:
图1
二、步骤
tips:下列的代码都是通过检查页面源代码,进行元素的审查完成的。
2.1、点击去购票
driver.switch_to.window(driver.window_handles[-1])
time.sleep(3)
# 刷新
driver.refresh()
time.sleep(3)
print(driver.title)
print(driver.current_url)
# https://kyfw.12306.cn/otn/view/index.html
# 在新窗口点击前往订票,又会跳转到新窗口
driver.find_element(By.XPATH, '//*[@id="link_for_ticket"]').click()
2.2、在搜索框中输入车次信息
问题:
这里有一个问题,直接在输入框中输入内容要选择系统提示的目的地才能成功,而这个目的地无法审查出来;
解决办法:
先点击输入框,在输入内容,然后在点击另一个输入框,循环反复(经过测试,日期输入框的提示无需理会),即可默认选择系统出现的提示内容。
driver.switch_to.window(driver.window_handles[-1])
time.sleep(5)
# 出发地
driver.find_element(By.XPATH, '//*[@id="fromStationText"]').click()
driver.find_element(By.XPATH, '//*[@id="fromStationText"]').send_keys("深圳北", Keys.ENTER)
# 目的地
time.sleep(1)
driver.find_element(By.XPATH, '//*[@id="toStationText"]').click()
driver.find_element(By.XPATH, '//*[@id="toStationText"]').send_keys("百色", Keys.ENTER)
# 日期,先清除默认内容,在输入
driver.find_element(By.XPATH, '//*[@id="train_date"]').click()
driver.find_element(By.XPATH, '//*[@id="train_date"]').clear()
# time.sleep(1)
driver.find_element(By.XPATH, '//*[@id="train_date"]').send_keys("2023-01-18")
2.3、点击查找
time.sleep(2)
driver.find_element(By.XPATH, '//*[@id="query_ticket"]').click()
2.4、出现车次信息,进行筛选,如果有票则点击计入预定车票界面
for tr in tr_list: # 遍历所有车次信息
time.sleep(1)
train_number = tr.find_element(By.CLASS_NAME, "number").text # 车次
if train_number in trains: # 如果该车次在输入的车次里
left_ticker_td = tr.find_element(By.XPATH, './/td[4]').text
if left_ticker_td == '有' or left_ticker_td.isdigit(): # 如果该车次有票
print(train_number+'有票')
btn72 = tr.find_element(By.CLASS_NAME, 'btn72') # 找到该车次的预订按钮
btn72.click()
三、结果
3.1、代码运行最终结果
如下图2:
图2
四、小节
本部分是第二部分,完成了从登陆界面进入车次查找,并进行车次的筛选,还剩下确认乘客信息并提交订单的部分即可完成自动化抢票。
完成本部分需要掌握的知识:
1)selenium的视角切换、点击、文本框输入、提取内容
2)python基础
说明:完整代码会在第三部分完全实现功能放出