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

Selenium 的四种等待方式及使用场景

Selenium 的四种等待方式及使用场景

  1. 隐式等待(Implicit Wait)
  2. 显式等待(Explicit Wait)
  3. 自定义等待(Custom Wait)
  4. 固定等待(Sleep) 

1. 隐式等待

定义: 隐式等待是为 WebDriver 设置一个全局的超时时间,在此时间内,如果目标元素未出现,WebDriver 会定期轮询检查该元素是否存在,一旦找到立即继续执行后续代码。

适用场景:
适用于页面加载较慢但元素固定的场景,比如登录后的静态页面。

代码示例:

from selenium import webdriverdriver = webdriver.Chrome()# 设置隐式等待为10秒
driver.implicitly_wait(10)driver.get("https://example.com")
element = driver.find_element_by_id("some_element")
element.click()driver.quit()

2. 显式等待

定义: 显式等待是为某些特定的元素设置等待条件和超时时间,直到满足条件后才会继续执行。常用 WebDriverWait 类和 expected_conditions 模块。

适用场景:
适用于页面动态加载,元素需要特定条件才能出现的情况,例如弹窗加载、按钮变为可点击等。

常用条件:

  • presence_of_element_located:等待元素出现在 DOM 中,但不一定可见。
  • visibility_of_element_located:等待元素出现在 DOM 中且可见。
  • element_to_be_clickable:等待元素可见并可点击。

代码示例:

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 ECdriver = webdriver.Chrome()
driver.get("https://example.com")# 设置显式等待条件:等待某按钮元素可点击
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, "some_button")))
element.click()driver.quit()

3. 自定义等待

定义: 通过编写循环逻辑,自定义等待条件。适合复杂或独特的场景,比如需要检查某些动态值或自定义条件是否满足。

适用场景:
用于特殊条件判断,如根据页面元素的特定属性或文本值动态等待。

代码示例:

import time
from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://example.com")# 自定义等待
timeout = 10
poll_frequency = 0.5  # 每0.5秒检查一次
elapsed_time = 0while elapsed_time < timeout:try:element = driver.find_element_by_id("some_element")if element.is_displayed():print("Element found!")breakexcept:passtime.sleep(poll_frequency)elapsed_time += poll_frequency
else:print("Timeout: Element not found")driver.quit()

4. 固定等待

定义: 使用 Python 的 time.sleep() 方法,强制线程暂停指定的时间,无论目标元素是否已经加载完成。

适用场景:

  • 临时调试代码,观察执行过程。
  • 页面完全静态、加载时间稳定的场景。
  • 作为最后的兜底方案。

代码示例:

import time
from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://example.com")# 固定等待5秒
time.sleep(5)# 查找元素并点击
element = driver.find_element_by_id("some_element")
element.click()driver.quit()

四种等待方式对比

等待方式优点缺点适用场景
隐式等待全局生效,代码简洁不够灵活,无法单独为某元素设置等待条件静态页面,目标元素加载时间固定
显式等待灵活性高,可设置条件和单独的超时时间代码复杂,需要明确等待条件动态页面,特定元素需要等待某些条件完成时
自定义等待满足特定场景需求,可实现复杂逻辑条件判断需要手动实现逻辑,代码复杂条件特殊且显式等待无法满足的场景
固定等待简单直接,适合调试低效,不灵活,可能浪费时间调试代码、加载时间固定的静态场景
http://www.lryc.cn/news/517354.html

相关文章:

  • React知识盲点——组件通信、性能优化、高级功能详解(大纲)
  • Vue 按键生成多个表单
  • 网络安全:交换机技术
  • Flask 快速入门
  • C#设计模式(行为型模式):备忘录模式,时光倒流的魔法
  • 数据库高安全—角色权限:权限管理权限检查
  • FastAPI 的依赖注入与生命周期管理深度解析
  • 【express-generator】05-路由中间件和错误处理(第一阶段收尾)
  • Linux环境下确认并操作 Git 仓库
  • UDP -- 简易聊天室
  • NVIDIA在CES 2025上的三大亮点:AI芯片、机器人与自动驾驶、全新游戏显卡
  • 【通俗理解】AI的两次寒冬:从感知机困局到深度学习前夜
  • transformer深度学习实战CCTSDB中国交通标志识别
  • JavaWeb开发(六)XML介绍
  • 使用pbootcms开发一个企业官网
  • Linux C编程——文件IO基础
  • 【信息系统项目管理师】高分论文:论信息系统项目的风险管理(人民医院的信息系统)
  • UE播放声音
  • Docker Compose 启动 Harbor 并指定网络
  • WebSocket 实战案例:从设计到部署
  • selenium合集
  • JVM生产环境常用参数配置及调优建议
  • Spring Boot 3 实现 MySQL 主从数据库之间的数据同步
  • 【小程序开发】- 小程序版本迭代指南(版本发布教程)
  • MySQL 间隙锁避免“可重复读”出现“幻读”
  • 揭秘区块链隐私黑科技:零知识证明如何改变未来
  • JavaWeb开发:从入门到精通
  • 2025年01月07日Github流行趋势
  • c#集成npoi根据excel模板导出excel
  • Vue2移动端(H5项目)项目封装switch组件支持动态设置开启关闭背景色、值及组件内显示文字描述、禁用、switch 的宽度