WebDriverWait
是 Selenium WebDriver 的一个等待机制,用于等待一个特定条件成立直到一个最大的时间阈值。这种等待方式是显式等待,与隐式等待相对。显式等待提供了一种更灵活的方式来等待页面上的元素或条件,因为它允许你指定等待条件和时间。
WebDriverWait
通常与 expected_conditions
一起使用,来指定等待的条件。当条件满足时,等待操作会立即结束,脚本继续执行。如果达到最大等待时间,而条件仍然不满足,则会抛出一个 TimeoutException
。
expected_conditions
是 Selenium WebDriver 中用于等待某些条件出现或消失的一组预定义的条件。这些条件提供了一种有效的方式来等待页面上的元素变得可见、可点击或满足其他条件,这对于处理动态内容的网页特别有用。
使用 expected_conditions
时,通常会与 WebDriverWait
类一起使用,以提供一个时间上的限制,确保脚本在继续执行前等待特定的条件满足。这样可以避免脚本因为页面元素还没加载完成而尝试进行操作导致的错误。
下面是一些常用的 expected_conditions
:
-
presence_of_element_located
:等待直到元素出现在DOM中,但不一定可见。 -
visibility_of_element_located
:等待直到元素出现在DOM中且可见(宽和高都大于0)。 -
element_to_be_clickable
:等待直到元素可见且可点击。 -
title_contains
:等待直到页面标题包含给定的文本。 -
alert_is_present
:等待直到弹窗出现。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.Firefox()
driver.get("http://example.com")try:
# 等待直到元素可见且可点击
clickableElement = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "myElementId"))
)
clickableElement.click()
finally:
driver.quit()
WebDriverWait
等待最多10秒钟,直到ID为"你的元素ID"的元素变得可见。如果在10秒内元素变可见,则继续执行后面的代码;如果10秒后元素仍然不可见,则会抛出 TimeoutException
。