web自动化07-元素等待
元素等待
1、什么是元素等待?
在定位页面元素时如果没找到,会在指定时间内一直等待的过程
2、为什么需要元素等待
-
网络速度慢
-
电脑配置低
-
服务器处理请求慢
3、三种元素等待类型
强制等待
隐式等待
显式等待
4、隐式等待
概念: 定位元素时,如果能定位到元素则直接返回该元素,不触发等待;
如果不能定位到该元素,则间隔一段时间后再去定位元素;
如果在达到最大时长时还没有找到指定元素(无法控制时间),则抛出元素不存在的异常 NoSuchElementException
实现方式:
方法:driver.implicitly_wait(timeout)
(timeout:为等待最大时长,单位:秒)
说明:隐式等待为全局设置(只需要设置一次,就会作用于所有元素)
注意:1、隐式等待是全局有效,只需要设置一次就行
2、当隐式等待被激活时,虽然目标元素出现了,但是当前页面的其他元素未加载完成,而继续等待,增加代码的执行时长
5、显式等待
概念:定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待;
如果不能定位到该元素,则间隔一段时间后再去定位元素;
如果在达到最大时长时还没有找到指定元素,则抛出超 时异常 TimeoutException 。
1. 导包 等待类 --> from selenium.webdriver.support.wait import WebDriverWait 2. WebDriverWait(driver, timeout, poll_frequency=0.5) 1). driver:浏览器驱动对象 2). timeout:超时的时长,单位:秒 3). poll_frequency:检测间隔时间,默认为0.5秒 3. 调用方法 until(method):直到...时 1). method:函数名称,该函数用来实现对元素的定位 2). 一般使用匿名函数来实现:lambda x: x.find_element_by_id("userA") 4. element = WebDriverWait(driver, 10, 1).until(lambda x: x.find_element_by_id("userA") )
实例代码:
import time from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Firefox() driver.get("file:///D:/webAutoTest/page/注册A.html") element = WebDriverWait(driver, 10, 1).until(lambda x: x.find_element_by_id("userA")) element.send_keys("admin") time.sleep(3) driver.quit()
显式等待和隐式等待区别:
-
隐式等待为全局元素,显式等待为单个元素有效
-
隐式等待直接通过驱动对象调用,显式等待方法封装在WebDriverWait类中
-
达到最大超时时长后抛出的异常不同:隐式为NoSuchElementException,显式等待为TimeoutException
6、强制等待
sleep()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)