📅  最后修改于: 2023-12-03 14:51:22.111000             🧑  作者: Mango
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提供了WebDriverWait
和expected_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()
函数等待“百度一下”按钮出现,等待条件为按钮可点击,一旦检测到符合此条件的元素即可通过。
显式等待的好处是更加智能,可以根据具体条件进行等待,而不是等待一定的时间固定等待。但是,会增加代码的书写难度和代码量。
综上所述,我们可以根据自己的实际需求,选择不同的等待方式,在适当的时候等待某个元素的出现,保证程序的稳定性和准确性。