selenium - 三种元素等待
1.sleep 休眠方法
- sleep()由python的time模块提供。
- 当执行到sleep()方法时,脚本会定时休眠所设置的时长,sleep()方法默认参数是s(秒),sleep(2) 表示休眠2s;如果设置时长小于1秒,那就直接写sleep(0.5) 。
# coding:utf-8
# 导入time包
from time import sleep
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
sleep(2)
driver.find_element_by_id("kw").send_keys("selenium")
sleep(1.5)
driver.find_element_by_id("su").click()
2.隐式等待 implicitly_wait()
-
隐式等待是通过一定的时长等页面元素全部加载完成(就是等待页面左上角转圈结束)。如果超出了设置的时长,元素还没有加载出来,那么就会抛出异常 NoSuchElementException
-
隐式等待是全局的,只写一次就行了。
-
弊端:有些网站页面写得不好,js报错,一直在转圈,那么就会消耗时间,影响效率。
-
页面跳转的时候,不知道去等第二个页面
-
Implicitly_wait(10)默认参数的单位是秒,这里10秒并不是固定的等待时间,当脚本定位不到这个元素时,
它将以轮询的方式不断地判断元素是否是否被定位到,如果超过了10秒还是定位不到元素,那么就会抛出异常。
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw1").send_keys("python")
- 元素定位不到,抛出异常:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element:
3.显式等待 WebDriverWait()
-
首先打开源码看一下,源码的位置
-
看一下源码中,WebDriverWait每个参数的意思
- driver :webdriver的实例
- timeout :超时的总时长
- poll_frequency :循环查询的间隔时间,默认为0.5s
- ignored_exceptions :忽略异常,默认忽略 NoSuchElementException
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
element = WebDriverWait(driver, 15).until(lambda x: x.find_element_by_id("kw"))
print(element)
- 有个不好的地方就是,找不到元素只会报一个异常 TimeoutException,
所以调试的时候还是要先用常规的方法,先定位好,然后再封装成显式等待的方法
分类:
selenium
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现