实战题目
- 打开 12306 网站 https://kyfw.12306.cn/otn/leftTicket/init
- 出发城市 填写 ‘南京南’, 到达城市 填写 ‘杭州东’
- 发车时间 选 06:00—12:00
- 发车日期选当前时间的下一天,也就是日期标签栏的,第二个标签
- 我们要查找的是所有 二等座还有票的车次,打印出这些有票的车次的信息,结果如下:
G7641
G1505
G7393
G7689

代码思路(人为测试时的操作步骤)
- 点击【出发城市】,输入并点击南京南
- 点击【到达城市】,输入并点击杭州东
- 选择发车时间 06:00—12:00
- 选择第二个日期标签
- 获取到车次列表
- 循环列表,获取车次号和二等座那一列的数据
- 正则匹配是否有坐
- 输出车次号
代码
#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__ =__Time__ = 2020-03-31 21:30__Author__ = 小菠萝测试笔记__Blog__ = https://www.cnblogs.com/poloyy/"""import refrom time import sleepfrom selenium.webdriver.support.select import Selectfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ecfrom selenium.webdriver.support.wait import WebDriverWaitdriver = webdriver.Chrome("../resources/chromedriver.exe")def wait_element(by_, element_): element = WebDriverWait(driver, timeout=10).until( ec.presence_of_element_located((by_, element_)) ) return elementdef wait_elements(by_, element_): element = WebDriverWait(driver, timeout=10).until( ec.presence_of_all_elements_located((by_, element_)) ) return element# 打开网站driver.get("https://kyfw.12306.cn/otn/leftTicket/init")driver.maximize_window()# 出发城市 填写 ‘南京南’,from_ = wait_element(By.CSS_SELECTOR, "input#fromStationText")from_.click()from_.send_keys("南京南")# 选择南京南driver.find_element_by_css_selector("div#citem_0").click()# 到达城市 填写 ‘杭州东’to = wait_element(By.CSS_SELECTOR, "input#toStationText")to.click()to.send_keys("杭州东")# 选择杭州东driver.find_element_by_css_selector("div#citem_0").click()# 发车时间 选 06:00--12:00select = Select(driver.find_element_by_css_selector("select#cc_start_time"))# 选择select.select_by_visible_text("06:00--12:00")# 发车日期选当前时间的下一天,也就是日期标签栏的,第二个标签date_range = driver.find_elements_by_css_selector("div#date_range>ul>li")date_range[1].click()# 数据列表lists = wait_elements(By.CSS_SELECTOR, "tbody#queryLeftTable>tr")[0::2]print(len(lists))# 循环数据for data in lists: number = data.find_element_by_css_selector("td>div>div.train a.number").text two = data.find_elements_by_css_selector("td")[3].text if re.findall("有|\d+", two): print(number)sleep(10)driver.quit()
转载:https://www.cnblogs.com/poloyy/p/12632138.html