实战题目

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

G7641
G1505
G7393
G7689
Selenium系列(18) - Web UI 自动化基础实战(5) - 图1

代码思路(人为测试时的操作步骤)

  1. 点击【出发城市】,输入并点击南京南
  2. 点击【到达城市】,输入并点击杭州东
  3. 选择发车时间 06:00—12:00
  4. 选择第二个日期标签
  5. 获取到车次列表
  6. 循环列表,获取车次号和二等座那一列的数据
  7. 正则匹配是否有坐
  8. 输出车次号

代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. __title__ =
  5. __Time__ = 2020-03-31 21:30
  6. __Author__ = 小菠萝测试笔记
  7. __Blog__ = https://www.cnblogs.com/poloyy/
  8. """
  9. import re
  10. from time import sleep
  11. from selenium.webdriver.support.select import Select
  12. from selenium import webdriver
  13. from selenium.webdriver.common.by import By
  14. from selenium.webdriver.support import expected_conditions as ec
  15. from selenium.webdriver.support.wait import WebDriverWait
  16. driver = webdriver.Chrome("../resources/chromedriver.exe")
  17. def wait_element(by_, element_):
  18. element = WebDriverWait(driver, timeout=10).until(
  19. ec.presence_of_element_located((by_, element_))
  20. )
  21. return element
  22. def wait_elements(by_, element_):
  23. element = WebDriverWait(driver, timeout=10).until(
  24. ec.presence_of_all_elements_located((by_, element_))
  25. )
  26. return element
  27. # 打开网站
  28. driver.get("https://kyfw.12306.cn/otn/leftTicket/init")
  29. driver.maximize_window()
  30. # 出发城市 填写 ‘南京南’,
  31. from_ = wait_element(By.CSS_SELECTOR, "input#fromStationText")
  32. from_.click()
  33. from_.send_keys("南京南")
  34. # 选择南京南
  35. driver.find_element_by_css_selector("div#citem_0").click()
  36. # 到达城市 填写 ‘杭州东’
  37. to = wait_element(By.CSS_SELECTOR, "input#toStationText")
  38. to.click()
  39. to.send_keys("杭州东")
  40. # 选择杭州东
  41. driver.find_element_by_css_selector("div#citem_0").click()
  42. # 发车时间 选 06:00--12:00
  43. select = Select(driver.find_element_by_css_selector("select#cc_start_time"))
  44. # 选择
  45. select.select_by_visible_text("06:00--12:00")
  46. # 发车日期选当前时间的下一天,也就是日期标签栏的,第二个标签
  47. date_range = driver.find_elements_by_css_selector("div#date_range>ul>li")
  48. date_range[1].click()
  49. # 数据列表
  50. lists = wait_elements(By.CSS_SELECTOR, "tbody#queryLeftTable>tr")[0::2]
  51. print(len(lists))
  52. # 循环数据
  53. for data in lists:
  54. number = data.find_element_by_css_selector("td>div>div.train a.number").text
  55. two = data.find_elements_by_css_selector("td")[3].text
  56. if re.findall("有|\d+", two):
  57. print(number)
  58. sleep(10)
  59. driver.quit()

转载:https://www.cnblogs.com/poloyy/p/12632138.html