selenium--等待的三种方式
前戏
在我们做UI自动化的时候,最不稳定的就是页面了,由于各种原因页面的元素没有加载出来,比如网速慢,服务器响应慢等等,这时候如果我们去操作页面的元素,selenium会给我们抛出一个NoSuchElementException的异常。我们可以等待页面页面加载出来或者一段时间再去操作,这样的话大大降低了这种错误的出现。
我们可以用python内置的sleep来强制等待,或者用selenium提供的显示等待或者隐式等待的方法
相关模块:
WebDriverWait 显示等待针对元素必用
expected_conditions 预期条件类(用于显示等待)
NoSuchElementException 用于隐式等待抛出异常
sleep
sleep强制等待,不管元素有没有加载出来,都必须等到时间才会往下去执行
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://www.baidu.com') sleep(2) driver.find_element_by_css_selector('#kw').send_keys('python') sleep(2) driver.quit()
隐式等待
隐式等待不针对某一个元素进行等待,全局元素等待,隐式等待会等待整个页面加载完成,也就是说浏览器窗口标签栏中不在出现转动的小圆圈,才会执行下一步
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from time import sleep, ctime driver = webdriver.Chrome() driver.get('http://www.baidu.com') sleep(2) # 设置隐式等待,最多等待 5s,如果五秒内什么时候加载完就什么时候进行操作 driver.implicitly_wait(5) try: print(ctime()) driver.find_element_by_css_selector('#kw').send_keys('python') driver.find_element_by_css_selector('#su').click() except NoSuchElementException as msg: print(msg) finally: print(ctime()) sleep(2) driver.quit()
显示等待
显示等待是针对某一个元素进行相关等待判定
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from time import sleep driver = webdriver.Chrome() driver.get('http://www.baidu.com') sleep(2) driver.find_element_by_css_selector('#kw').send_keys('python') # 一共等待 5 秒钟,每 0.5s 找一次,直到通过 ID 找到 element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'su'))) element.click() sleep(2) driver.quit()
不是总结的总结
学了等待的三种方法,我最常用的还是显示等待,写一个公共的方法,把通过什么定位和定位元素抽离出来,什么时候用,传这两个参数就可以了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)