如果你还想从头学起Selenium,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1680176.html

其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...)

注意,目前的实战都是流水账式写的,后面才会结合框架+PO模式

目的是为了掌握所学的Selenium基础

实战题目

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

G7641

G1505

G7393

G7689

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

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

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*- """
__title__ =
__Time__ = 2020-03-31 21:30
__Author__ = 小菠萝测试笔记
__Blog__ = https://www.cnblogs.com/poloyy/
"""
import re
from time import sleep
from selenium.webdriver.support.select import Select
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome("../resources/chromedriver.exe") def wait_element(by_, element_):
element = WebDriverWait(driver, timeout=10).until(
ec.presence_of_element_located((by_, element_))
)
return element def 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:00
select = 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()

最新文章

  1. JS学习笔记10之Math对象
  2. SQLServer2000数据库的安装
  3. JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
  4. APP Widget的开发
  5. [转]easyui tree 模仿ztree 使用扁平化加载json
  6. 【python】类的访问限制
  7. Python基础篇【第2篇】: Python内置函数(一)
  8. QComboBox
  9. delphi中locate方法
  10. Unix/Linux中shell调用sqlplus的方式
  11. iOS开发中常用的手势---边缘手势
  12. 在 Ubuntu 12.04 上安装 GitLab6.0
  13. 大数据系列修炼-Scala课程01
  14. grub4dos新手指南-2
  15. Unity 继承MonoBehaviour脚本 执行顺序 详解
  16. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
  17. jest 自动化测试
  18. JavaSE_坚持读源码_ClassLoader对象_Java1.7
  19. c++简单学习
  20. Python 事件

热门文章

  1. Android技术分享| 实现视频连麦直播
  2. 等Excel工作簿关闭后自动加密压缩备份2019年10月9日.ahk
  3. vivo 全球商城:优惠券系统架构设计与实践
  4. SpringBoot @ModelAttribute 用法
  5. 双倍NB!字节跳动资深研发花7天肝出的这份286页“Flutter技术进阶”
  6. .Net Core+分布式配置中心(AgileConfig)
  7. 基于RT1052 Aworks 内存扩容记录(一)
  8. 安全工具推荐之w13scan篇
  9. STM32—串口通讯详解
  10. 如何快速方便的生成好看的接口文档(apipost生成文档)