Selenium 显式等待

Selenium 显式等待 WebDriverWait

一、为什么抛弃 time.sleep()

python 复制代码
time.sleep(3)

硬等待:强制卡死3秒,不管页面是否加载完成

缺点:

  1. 元素提前加载好了,依然要等 → 脚本运行慢
  2. 元素加载超过3秒 → 直接抛找不到元素异常

显式等待 WebDriverWait:循环判断元素条件,满足条件立刻放行;超过超时时间才报错。灵活高效,工作必用。

二、需要导入包

python 复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

三、标准模板(背诵!固定写法)

python 复制代码
# 参数1:driver对象;参数2:超时总时间(秒);参数3:轮询间隔(多久检查一次,默认0.5s)
wait = WebDriverWait(driver, 10, 0.5)

# until:直到满足条件
ele = wait.until(
    EC.presence_of_element_located( (By.XPATH, "//input[@id='kw']") )
)

⚠️ 注意:() 里面是元组,两个参数必须括号包起来!

四、常用 expected_conditions 条件(高频)

  1. presence_of_element_located元素存在DOM中(html加载出来,不一定可见)
  2. visibility_of_element_located元素可见(推荐大多数场景,能看到才能点击输入)
  3. element_to_be_clickable元素可点击(按钮可用,无遮挡,优先用于按钮)
  4. text_to_be_present_in_element:元素文本包含指定内容

五、完整可运行示例(百度搜索)

python 复制代码
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

web_driver = webdriver.Edge(service=Service(r"D:\Software\edgedriver_win64\msedgedriver.exe"))
web_driver.get("https://www.baidu.com")
web_driver.maximize_window()

# 实例化等待对象,最长等待10秒
wait = WebDriverWait(web_driver, 10)

# 等待搜索框可见,找到元素
search_input = wait.until(
    EC.visibility_of_element_located( (By.ID, "kw") )
)
search_input.send_keys("显式等待学习")

# 等待按钮可点击
search_btn = wait.until(
    EC.element_to_be_clickable( (By.ID, "su") )
)
search_btn.click()

# 等待结果文本出现
wait.until(
    EC.text_to_be_present_in_element( (By.XPATH, "//h3"), "显式等待学习" )
)

web_driver.quit()

六、隐式等待(补充了解,不推荐混用)

python 复制代码
driver.implicitly_wait(10)

全局设置,整个会话生效;显式、隐式不要一起使用,容易出现奇怪超时bug,企业主流只用【显式等待】

七、常见报错

  1. TimeoutException:规定时间内,条件始终不满足
    排查:xpath写错 / 元素被遮挡 / 在iframe内 / 页面跳转没加载完成
  2. 忘记元组括号:EC.xxx(By.ID,"kw") ❌ → EC.xxx( (By.ID,"kw") )
相关推荐
St_rive3 小时前
selenium cookie的处理
数据库·selenium·测试工具
随风而飘1863 小时前
安立(Anritsu)MT8820C无线综合测试仪(手机综测仪)
网络·功能测试·测试工具·5g·智能手机
m24tyy19 小时前
常见空间测绘搜索引擎介绍和使用以及子域名的收集
网络·测试工具·搜索引擎
程序员三藏1 天前
浅谈性能测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
是Leo刘啊1 天前
别再搜了:15 张速查表,覆盖日常高频查询
测试工具
上海控安1 天前
实时系统保障关键技术-最坏情况执行时间(WCET)分析
测试工具·安全
程序员三藏2 天前
Python+requests实现接口自动化测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
St_rive2 天前
Selenium Grid
selenium·测试工具