
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 webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Bydriver = 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 webdriverdriver = webdriver.Chrome()driver.implicitly_wait(10) # 设置隐式等待时间为10秒driver.get("XXX")driver.quit()
优缺点
- 优点:10秒并非固定时间,不会影响脚本执行速度。
- 缺点:如果页面尚未完全加载,可能需要继续等待。
强制等待
强制等待(Explicit Wait)由time
模块提供,适用于需要精确控制等待时间的场景。
from time import sleepdriver = 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()
优缺点
- 优点:适合调试和精确控制等待时间。
- 缺点:等待时间到时会执行下一步操作,可能无法保证元素已加载完成。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月29日 06时30分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MySQL错误日志(Error Log)
2019-03-06
解决:angularjs radio默认选中失效问题
2019-03-06
windows环境下安装zookeeper(仅本地使用)
2019-03-06
缓冲区溢出实例(一)--Windows
2019-03-06
Python中字符串前添加r ,b, u, f前缀的含义
2019-03-06
Hadoop学习笔记—Yarn
2019-03-06
JSONPath小试牛刀之Snack3
2019-03-06
Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
2019-03-06
wxWidgets源码分析(3) - 消息映射表
2019-03-06
wxWidgets源码分析(5) - 窗口管理
2019-03-06
wxWidgets源码分析(7) - 窗口尺寸
2019-03-06
wxWidgets源码分析(8) - MVC架构
2019-03-06
wxWidgets源码分析(9) - wxString
2019-03-06
[白话解析] 深入浅出熵的概念 & 决策树之ID3算法
2019-03-06
[梁山好汉说IT] 梁山好汉和抢劫银行
2019-03-06
[源码解析] 消息队列 Kombu 之 基本架构
2019-03-06
[源码分析] 消息队列 Kombu 之 启动过程
2019-03-06
[源码分析] 消息队列 Kombu 之 Consumer
2019-03-06
抉择之苦
2019-03-06
wx.NET CLI wrapper for wxWidgets
2019-03-06