2023年12306购票平台自动化购票二|解决车次查找与预定

目录

一、说明

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:

2023年12306购票平台自动化购票二|解决车次查找与预定_第1张图片

图2

四、小节

本部分是第二部分,完成了从登陆界面进入车次查找,并进行车次的筛选,还剩下确认乘客信息并提交订单的部分即可完成自动化抢票。

完成本部分需要掌握的知识:

1)selenium的视角切换、点击、文本框输入、提取内容

2)python基础

说明:完整代码会在第三部分完全实现功能放出

你可能感兴趣的:(Python,今日无事,自动化,python,爬虫)