📜  在Selenium Python中等待(1)

📅  最后修改于: 2023-12-03 14:51:22.111000             🧑  作者: Mango

在Selenium Python中等待

Selenium是一个自动化测试工具,使用它可以模拟用户的交互行为,比如点击、输入、下拉选择等,从而完成自动化测试。但是,由于网络请求速度慢、网站有延迟等原因,有些时候我们需要等待一段时间才能够获取到预期的结果。

在Selenium Python中,等待有多种方式,下面我们分别介绍。

强制等待

强制等待是最简单的一种等待方式,即通过time.sleep()函数暂停程序的执行一段时间,在这个时间段内程序不做其他操作,直到时间结束。

下面是一个例子,我们在打开百度网页后,暂停5秒钟再进行后续操作。

import time
from selenium import webdriver

driver = webdriver.Chrome()  # 创建浏览器对象
driver.get('https://www.baidu.com')  # 打开百度网页

time.sleep(5)  # 强制等待5秒钟

driver.quit()  # 退出浏览器

虽然方便快捷,但强制等待也有它的缺点:不管网页是否已经加载完毕,我们都会暂停一定时间,可能会导致浪费时间。

隐式等待

隐式等待是指在一定时间内轮询查找某个元素,如果没有找到,则抛出TimeoutException异常,一旦找到则立即执行相关操作。

我们可以通过driver.implicitly_wait()函数设置隐式等待时间。下面是一个例子,在打开百度网页后,隐式等待10秒钟再进行后续操作。

from selenium import webdriver

driver = webdriver.Chrome()  # 创建浏览器对象
driver.implicitly_wait(10)  # 隐式等待10秒钟
driver.get('https://www.baidu.com')  # 打开百度网页

# 执行相关操作

driver.quit()  # 退出浏览器

隐式等待的好处是可以让我们更灵活地控制等待的时间,但缺点是在每个查找元素操作中都会进行轮询,可能会导致性能降低。

显式等待

相比前两种等待方式,显式等待更加高级,可以根据具体的条件等待某个元素的出现或者消失。

Selenium Python提供了WebDriverWaitexpected_conditions模块来实现显式等待。

下面是一个例子,在打开百度网页后,等待10秒钟,直到“百度一下”按钮出现后再进行后续处理。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver

driver = webdriver.Chrome()  # 创建浏览器对象
driver.get('https://www.baidu.com')  # 打开百度网页

wait = WebDriverWait(driver, 10)  # 等待10秒钟
element = wait.until(EC.element_to_be_clickable((By.ID, 'su')))  # 等待“百度一下”按钮出现

# 执行相关操作

driver.quit()  # 退出浏览器

在这个例子中,我们使用了WebDriverWait()函数创建一个等待对象,等待时间为10秒钟。然后我们使用until()函数等待“百度一下”按钮出现,等待条件为按钮可点击,一旦检测到符合此条件的元素即可通过。

显式等待的好处是更加智能,可以根据具体条件进行等待,而不是等待一定的时间固定等待。但是,会增加代码的书写难度和代码量。

综上所述,我们可以根据自己的实际需求,选择不同的等待方式,在适当的时候等待某个元素的出现,保证程序的稳定性和准确性。