Selenium-几种等待方式
强制等待
一直使用的time.sleep(5),可以放在任意地方,不好的地方,不太准确确定时间
隐形等待
driver.implicitly_wait(5)
设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截至,然后执行下一步.注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步
但他还有一个问题,如果你页面加载挺好的,他会一闪而过,你也看不到具体的东西
对整个driver的周期都起作用,所以只要设置一次即可,和sleep不同
显性等待
WebDriverWait,配合该类的unitl()和until_not()方法,就能够根据判断条件而进行灵活的等待.
如何理解?
每隔N秒检查下,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常
语法如下:
from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver,超时时长,调用频率).until(可执行方法,超时的时候返回的信息)
对上述部分的解释:
drvier: 生成的driver是什么名字,就是什么
超时时长: 超时时长
调用频率: 调用unitl或until_not中的方法的间隔时间,默认是0.5秒
until是当元素出现或什么条件成立则继续执行
unitl_not是当元素消失或什么条件不成立则继续执行
可执行的方法: 达到条件,执行的下一步
超时的时候返回的信息: 超时返回的异常
#! /usr/bin/env python #coding=utf-8 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait import time driver = webdriver.Firefox() #隐性等待 driver.implicitly_wait(5) driver.get("https://www.baidu.com/") #显性等待 #WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时").send_keys("博客园") kw = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时") kw.send_keys("博客园") time.sleep(3) driver.quit()
调试的时候用 强制等待
等调通了,再改成隐形等待或者显性等待
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏