selenium等待

发布于:2025-03-17 ⋅ 阅读:(18) ⋅ 点赞:(0)
通常代码执行的速度⽐页⾯渲染的速度要快,如果避免因为渲染过慢出现的⾃动化误报的问题呢?可以使⽤selenium中提供的三种等待⽅法:

1. 隐式等待(Implicit Wait)

隐式等待适用于全局,它告诉 WebDriver 在查找元素时等待一定的时间,直到元素出现。
如果超时,WebDriver 不会抛出异常,而是返回 NoSuchElementException

适用场景

  • 页面加载速度不稳定,元素可能会晚一点出现。
  • 适合不需要精确等待时间的情况。
from selenium import webdriver

# 设置 Edge 浏览器
driver = webdriver.Edge()

# 设置隐式等待 10 秒
driver.implicitly_wait(10)

# 访问网页
driver.get("https://example.com")

# 查找元素(如果元素未出现,则最多等待 10 秒)
element = driver.find_element("id", "someElement")

# 关闭浏览器
driver.quit()
  • implicitly_wait(10) 适用于 整个 WebDriver 生命周期
  • 只需要设置一次,之后所有 find_element() 调用都会等待。
  • 无法针对特定元素设置不同的等待时间

2. 显式等待(Explicit Wait)

显式等待用于等待某个特定元素出现,在超时时间内不断检查,直到条件满足。
它比隐式等待更精确,可以用于特定的元素。

适用场景

  • 只想等待某个特定元素,而不是所有元素。
  • 需要等待的条件较复杂,例如元素可见、可点击等。
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

# 设置 Edge 浏览器
driver = webdriver.Edge()

# 访问网页
driver.get("https://example.com")

# 等待最多 10 秒,直到元素可见
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "some