python+selenium+unittest元素等待小结
发布日期:2021-05-14 09:15:31 浏览次数:17 分类:精选文章

本文共 2117 字,大约阅读时间需要 7 分钟。

显性等待

显性等待(Explicit Wait)是Selenium中常用的等待机制,主要用于观察特定元素在页面上的加载状态。通过结合WebDriverWait类的until()until_not()方法,可以灵活地控制等待时间和检测间隔。

参数说明

  • driver:浏览器驱动实例。
  • timeout:等待的最大时间(单位:秒),如果在此时间内目标元素未加载完成,会抛出异常。
  • poll_frequency:检测间隔时间,默认为0.5秒。
  • ignored_exceptions:忽略的异常类型,默认情况下会抛出NoSuchElementException异常。

使用方法

  • until(method, message=''):调用提供的方法,直到返回值为True时执行下一步。
  • until_not(method, message=''):调用提供的方法,直到返回值为False时执行下一步。

以下是常见的等待场景示例:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")
driver.implicitly_wait(10) # 设置隐式等待时间为10秒
driver.get('https://ishare.ifeng.com/c/s/7yjrAKzxgb2')
locator = (By.LINK_TEXT, '骆阳叶')
try:
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
print(driver.find_element_by_link_text('骆阳叶').get_attribute('href'))
finally:
driver.close()

参数说明

  • 这段代码表示等待10秒,每隔1秒去检查一次元素是否加载完成。如果在10秒内元素加载完成,则执行后续操作;如果超时,则抛出异常。

常见等待方式

  • WebDriverWait(driver, 10).until(EC.title_is(u"百度一下,你就知道")):判断页面标题是否完全等于预期字符串。
  • WebDriverWait(driver, 10).until(EC.title_contains(u"百度一下")):判断页面标题是否包含预期字符串。
  • WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'kw'))):判断元素是否已加载至DOM树中。
  • WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'su'))):判断元素是否已加载至DOM树中并可见。
  • WebDriverWait(driver, 10).until(EC.staleness_of(driver.find_element(By.ID, 'su'))):等待元素从DOM树中移除。

隐性等待

隐性等待(Implicit Wait)是一种更简单的等待方式。它会在规定的总时间内等待页面的所有元素加载完成。如果在此期间所有元素都加载完成,则执行下一步操作;如果超时,则继续执行后续操作。

from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 设置隐式等待时间为10秒
driver.get("XXX")
driver.quit()

优缺点

  • 优点:10秒并非固定时间,不会影响脚本执行速度。
  • 缺点:如果页面尚未完全加载,可能需要继续等待。

强制等待

强制等待(Explicit Wait)由time模块提供,适用于需要精确控制等待时间的场景。

from time import sleep
driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")
driver.get('https://ishare.ifeng.com/c/s/7yjrAKzxgb2')
sleep(10) # 强行等待10秒
driver.find_element_by_xpath("xxxxxx")
driver.quit()

优缺点

  • 优点:适合调试和精确控制等待时间。
  • 缺点:等待时间到时会执行下一步操作,可能无法保证元素已加载完成。
上一篇:selenium元素点击无效处理方法
下一篇:八、C语言指针

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月29日 06时30分43秒