Python Selenium 中的显式等待

2023-04-17 00:00:00 python selenium 等待

Python Selenium 中的显式等待是指,在特定条件满足之前,等待一段预定的时间。这种等待方式会在代码执行期间一直检查特定条件是否被满足。如果条件被满足,程序将继续执行。否则,继续等待,直到条件被满足或超时发生。

显式等待可通过添加 WebDriverWait 类来实现。该类需要两个参数:要等待的驱动对象和等待的时间(以秒为单位)。

具体来说,可以使用 Expected Conditions 类来定义要等待的条件。例如,以下代码会等待浏览器页面加载 “pidancode.com”:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver.get("http://pidancode.com")

wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "content")))

在代码中,我们使用 WebDriverWait 对象等待 10 秒钟。在这里,wait.until() 方法将继续等待,直到我们的条件被满足,即元素的 ID 为 “content” 出现在页面上。

在等待期间,Selenium 将每隔 500 毫秒检查一次条件是否被满足。如果条件被满足,则代码将立即继续执行。如果在等待期间超时了,程序将抛出一个异常。

下面是一个更完整的示例,该示例使用显式等待等待页面加载完成后,再执行其他操作。在本例中,“pidancode.com”网站将被打开,等待 10 秒钟等待页面加载,然后获取页面的标题,并将其打印到控制台:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 使用 Firefox 驱动程序
driver = webdriver.Firefox()

# 打开网站
driver.get("https://pidancode.com")

# 显式等待 10 秒钟
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "content")))

# 取得页面标题并输出
title = driver.title
print(title)

# 关闭浏览器
driver.quit()

在此代码示例中,代码将等待包含 ID=”content”的元素出现,然后获取页面标题。如果在 10 秒钟内没有找到元素,则抛出一个超时异常。

相关文章