淘宝客推广网站模板,wordpress单号查询,湛江专业雷剧全集,磁力下载Selenium 的四种等待方式及使用场景
隐式等待#xff08;Implicit Wait#xff09;显式等待#xff08;Explicit Wait#xff09;自定义等待#xff08;Custom Wait#xff09;固定等待#xff08;Sleep#xff09; 1. 隐式等待
定义#xff1a; 隐式等待是为 WebD…Selenium 的四种等待方式及使用场景
隐式等待Implicit Wait显式等待Explicit Wait自定义等待Custom Wait固定等待Sleep 1. 隐式等待
定义 隐式等待是为 WebDriver 设置一个全局的超时时间在此时间内如果目标元素未出现WebDriver 会定期轮询检查该元素是否存在一旦找到立即继续执行后续代码。
适用场景 适用于页面加载较慢但元素固定的场景比如登录后的静态页面。
代码示例
from selenium import webdriverdriver webdriver.Chrome()# 设置隐式等待为10秒
driver.implicitly_wait(10)driver.get(https://example.com)
element driver.find_element_by_id(some_element)
element.click()driver.quit()2. 显式等待
定义 显式等待是为某些特定的元素设置等待条件和超时时间直到满足条件后才会继续执行。常用 WebDriverWait 类和 expected_conditions 模块。
适用场景 适用于页面动态加载元素需要特定条件才能出现的情况例如弹窗加载、按钮变为可点击等。
常用条件
presence_of_element_located等待元素出现在 DOM 中但不一定可见。visibility_of_element_located等待元素出现在 DOM 中且可见。element_to_be_clickable等待元素可见并可点击。
代码示例
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.Chrome()
driver.get(https://example.com)# 设置显式等待条件等待某按钮元素可点击
wait WebDriverWait(driver, 10)
element wait.until(EC.element_to_be_clickable((By.ID, some_button)))
element.click()driver.quit()3. 自定义等待
定义 通过编写循环逻辑自定义等待条件。适合复杂或独特的场景比如需要检查某些动态值或自定义条件是否满足。
适用场景 用于特殊条件判断如根据页面元素的特定属性或文本值动态等待。
代码示例
import time
from selenium import webdriverdriver webdriver.Chrome()
driver.get(https://example.com)# 自定义等待
timeout 10
poll_frequency 0.5 # 每0.5秒检查一次
elapsed_time 0while elapsed_time timeout:try:element driver.find_element_by_id(some_element)if element.is_displayed():print(Element found!)breakexcept:passtime.sleep(poll_frequency)elapsed_time poll_frequency
else:print(Timeout: Element not found)driver.quit()4. 固定等待
定义 使用 Python 的 time.sleep() 方法强制线程暂停指定的时间无论目标元素是否已经加载完成。
适用场景
临时调试代码观察执行过程。页面完全静态、加载时间稳定的场景。作为最后的兜底方案。
代码示例
import time
from selenium import webdriverdriver webdriver.Chrome()
driver.get(https://example.com)# 固定等待5秒
time.sleep(5)# 查找元素并点击
element driver.find_element_by_id(some_element)
element.click()driver.quit()四种等待方式对比
等待方式优点缺点适用场景隐式等待全局生效代码简洁不够灵活无法单独为某元素设置等待条件静态页面目标元素加载时间固定显式等待灵活性高可设置条件和单独的超时时间代码复杂需要明确等待条件动态页面特定元素需要等待某些条件完成时自定义等待满足特定场景需求可实现复杂逻辑条件判断需要手动实现逻辑代码复杂条件特殊且显式等待无法满足的场景固定等待简单直接适合调试低效不灵活可能浪费时间调试代码、加载时间固定的静态场景