目录
一、说明
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基础
说明:完整代码会在第三部分完全实现功能放出


















