当前位置: 首页 > news >正文

Selenium的学习

1.Selenium基础模板

from selenium import webdriver                          # 导入浏览器控制模块
from selenium.webdriver.edge.service import Service      # 导入 Edge 驱动服务
from selenium.webdriver.edge.options import Options      # 导入 Edge 配置选项
import time                                              # 导入时间模块(用于等待)# ========== 第1步:配置浏览器选项 ==========
options = Options()                                      # 创建配置对象
options.add_argument("--start-maximized")               # 启动时最大化窗口# ========== 第2步:指定驱动路径 ==========
driver_path = r"D:\soft2024.7.6\python code\test\drivers\msedgedriver.exe"# ========== 第3步:启动浏览器 ==========
driver = webdriver.Edge(                                 # 创建 Edge 浏览器对象service=Service(driver_path),                        # 传入驱动路径options=options                                      # 传入配置
)# ========== 第4步:操作浏览器 ==========
driver.get("https://www.baidu.com")                     # 打开指定网址
print(f"打开了:{driver.title}")                         # 打印网页标题# ========== 第5步:等待和关闭 ==========
time.sleep(3)                                           # 强制等待3秒(看效果)
driver.quit()                                           # 关闭浏览器

2.查找元素并操作

核心:找元素 → 做动作
网页上的每个东西(输入框、按钮、文字)都是元素。
Selenium 通过 定位器 找到它们,然后执行 操作。

最常用的 8 种定位方式:

定位方式 代码 适用场景 推荐度
ID By.ID, "username" 元素有唯一 ID ⭐⭐⭐ 最优先
NAME By.NAME, "email" 表单元素 ⭐⭐⭐
CSS 选择器 By.CSS_SELECTOR, "#login .btn" 灵活、速度快 ⭐⭐⭐
XPath By.XPATH, "//input[@type='text']" 复杂层级 ⭐⭐
CLASS_NAME By.CLASS_NAME, "active" 单一类名
LINK_TEXT By.LINK_TEXT, "点击这里" 完整链接文字
PARTIAL_LINK_TEXT By.PARTIAL_LINK_TEXT, "点击" 部分链接文字
TAG_NAME By.TAG_NAME, "input" 标签名 ⭐ 很少用

最常用的 3 种操作

操作 代码 作用
点击 .click() 点按钮、链接
输入文字 .send_keys("文本") 往输入框打字
获取文字 .text 获取元素显示的文字

实际操作:打开浏览器进入百度网站输入abc并搜索

# 字符串(文本)
import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Optionsop=Options()driver_path = r"D:\soft2024.7.6\python code\test\drivers\msedgedriver.exe"driver = webdriver.Edge(                                 # 创建 Edge 浏览器对象service=Service(driver_path),                        # 传入驱动路径options=op                                     # 传入配置
)driver.get("https://www.baidu.com")
driver.find_element(By.ID, "chat-textarea").send_keys("abc")
driver.find_element(By.ID, "chat-submit-button").click()time.sleep(5)
driver.quit()

3.等待机制

现在的代码有个问题:如果网页加载慢,会找不到元素报错。
所以接下来学 等待机制,让代码更稳定。
为什么需要等待?
网页加载是异步的:
先出现 HTML 框架
再加载 CSS 样式
再加载 JavaScript
最后渲染出真正的内容
如果代码执行太快,元素还没渲染出来,就会报错:NoSuchElementException: 找不到元素

三种等待方式

方式 代码 原理 缺点
强制等待 time.sleep(5) 傻等5秒,不管页面有没有加载完 慢!浪费时间
隐式等待 implicitly_wait(10) 找元素时最多等10秒,提前找到就继续 全局生效,不够灵活
显式等待(推荐) WebDriverWait + EC 指定等某个条件,条件满足立刻继续 代码稍多,但最稳定

显式等待条件

EC.visibility_of_element_located((By.ID, "id"))      # 元素可见(能看到)
EC.element_to_be_clickable((By.ID, "id"))            # 元素可点击
EC.presence_of_element_located((By.ID, "id"))        # 元素存在(在DOM里,不一定可见)
EC.text_to_be_present_in_element((By.ID, "id"), "文字")  # 包含特定文字
EC.title_contains("百度")                             # 标题包含

三种等待机制实例对比:

"""
等待机制详解
测试网站:https://www.saucedemo.com/(慢加载示例)
"""
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
import time@pytest.fixture
def driver():options = Options()driver_path = r"D:\soft2024.7.6\python code\test\drivers\msedgedriver.exe"driver = webdriver.Edge(service=Service(driver_path), options=options)yield driverdriver.quit()class TestWaitMechanisms:"""三种等待方式对比"""def test_bad_wait(self, driver):"""❌ 错误:强制等待(慢且不稳定)"""driver.get("https://www.saucedemo.com/")time.sleep(5)  # 不管页面有没有加载完,都等5秒driver.find_element(By.ID, "user-name").send_keys("standard_user")# 问题:如果3秒就加载完了,浪费2秒;如果5秒没加载完,还是会报错def test_implicit_wait(self, driver):"""⭕ 隐式等待(全局设置)"""driver.implicitly_wait(10)  # 所有 find_element 最多等10秒driver.get("https://www.saucedemo.com/")# 如果元素在2秒出现,就继续;如果10秒还没出现,才报错driver.find_element(By.ID, "user-name").send_keys("standard_user")driver.find_element(By.ID, "password").send_keys("secret_sauce")driver.find_element(By.ID, "login-button").click()def test_explicit_wait(self, driver):"""✅ 推荐:显式等待(精准控制)"""driver.get("https://www.saucedemo.com/")# 创建等待对象(最多等10秒,每0.5秒检查一次)wait = WebDriverWait(driver, 10)# 等待元素**可点击**后再操作username = wait.until(EC.element_to_be_clickable((By.ID, "user-name")))username.send_keys("standard_user")# 等待密码输入框**可见**password = wait.until(EC.visibility_of_element_located((By.ID, "password")))password.send_keys("secret_sauce")# 等待登录按钮**可点击**login_btn = wait.until(EC.element_to_be_clickable((By.ID, "login-button")))login_btn.click()# 等待登录后的元素出现(验证登录成功)wait.until(EC.presence_of_element_located((By.CLASS_NAME, "inventory_list")))print("✅ 登录成功!")
http://www.jsqmd.com/news/450427/

相关文章:

  • 指尖的诗篇:在Vim的世界里书写代码与梦想,Linux下vim编辑器的使用详解
  • 单北斗GNSS在变形监测中的应用及定制解决方案分析
  • 2026年济南抖音短视频代运营机构5强推荐榜单发布 - 精选优质企业推荐榜
  • Spring-boot3.4最新版整合swagger和Mybatis-plus
  • 基于SpringBoot+Vue的校车调度管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 企业级校园便利平台管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • SpringBoot+Vue 洋州影院购票管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • SpringBoot+Vue 养老院管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • spring Profile
  • 2026年成都抖音短视频代运营服务商5强推荐榜单发布 - 精选优质企业推荐榜
  • 告别低效繁琐!千笔ai写作,继续教育论文神器
  • Spring Initializr创建springboot项目,提示java 错误 无效的源发行版:16
  • Spring 多实例注入
  • 2026年四川抖音短视频代运营公司5强推荐榜单发布 - 精选优质企业推荐榜
  • Flutter 三方库 open_simplex_2 的鸿蒙化适配指南 - 掌控噪声资产、精密 Simplex 治理实战、鸿蒙级物理专家
  • HC六辊轧机轧辊总装图CAD图纸
  • Spring 循环依赖
  • Spring 核心技术解析【纯干货版】- XII:Spring 数据访问模块 Spring-R2dbc 模块精讲
  • 2026碳酸镁市场佼佼者盘点:优秀生产厂家一览,知名的碳酸镁供应商技术实力与市场口碑领航者 - 品牌推荐师
  • Android项目创建指南-Java版
  • 告别技术门槛|手把手教你,在中文平台轻松玩转MCP,联动大模型高效干活!
  • 2026年海南抖音短视频代运营公司5强推荐榜单公布 - 精选优质企业推荐榜
  • 企业级学院个人信息管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 2026年氧化铝空心球厂家盘点:这几家市场表现值得关注,氧化铝空心球/偏高岭土/白刚玉,氧化铝空心球直销厂家推荐排行榜 - 品牌推荐师
  • 2026年深圳抖音短视频代运营公司排行榜发布 - 精选优质企业推荐榜
  • 京东E卡回收,如何挑选靠谱平台 - 京顺回收
  • 2026年吉林抖音短视频代运营服务商5强推荐榜单发布 - 精选优质企业推荐榜
  • 2026年山西抖音短视频代运营公司排行榜公布 - 精选优质企业推荐榜
  • 2026年广东抖音短视频代运营服务商5强推荐榜单发布 - 精选优质企业推荐榜
  • Springboot中CommandLineRunner的用法以及执行顺序的控制