隐性等待和显性等待
2023-03-14 09:45:23 时间
一、隐性等待
implicitly_wait(30)的用法应该比time.sleep() 更智能,前者可以在一个时间范围内智能的等待,后者只能选择一个固定的时间的等待。
文档解释:
selenium.webdriver.remote.webdriver.implicitly_wait(time_to_wait)
隐式地等待一个元素被发现或一个命令完成;这个方法每次会话只需要调用一次
time_to_wait: 等待时间
用法:
browser.implicitly_wait(30)
1 # coding = utf-8 2 from selenium import webdriver 3 import time #调入time 函数 4 browser = webdriver.Firefox() 5 browser.get("http://www.baidu.com") 6 browser.implicitly_wait(30) #智能等待30秒,适用下方所有命令 7 browser.find_element_by_id("kw").send_keys("selenium") 8 browser.find_element_by_id("su").click() #30秒内找到su的id,立即点击,否则报异常 9 browser.quit()
二、显性等待
WebDriverWait显性等待的场景:操作引起了页面的变化,而接下来要操作变化的元素的时候,就需要使用显性等待。
以百度首页登录界面为例子,比如点击登录后,在登录界面点击短信登录进行切换:
当我们不点击登录时,发现在dom树中,根本没有短信登录的元素,所以,我们要想点击这个元素,那就需要等待这个元素加载到dom树中,可以找到才行:
1 from selenium import webdriver 2 from time import sleep 3 from selenium.webdriver.support.wait import WebDriverWait 4 from selenium.webdriver.support import expected_conditions as EC 5 from selenium.webdriver.common.by import By 6 7 # 创建谷歌浏览器对象, 会话开始 8 chrome_driver = webdriver.Chrome() 9 10 # 访问百度 11 chrome_driver.get("http://www.baidu.com") 12 # 定位登录按钮并进行点击 13 chrome_driver.find_element_by_xpath('//*[@id="s-top-loginbtn"]').click() 14 15 sleep(5) 16 # 使用显性等待, 等待元素id="TANGRAM__PSP_11__changeSmsCodeItem"加载到dom树中,等待上限是10s,每0.8秒去验证一下条件是否成立. 17 WebDriverWait(chrome_driver, 10, 0.8).until(EC.presence_of_element_located((By.ID, 18 'TANGRAM__PSP_11__changeSmsCodeItem'))) 19 20 chrome_driver.find_element_by_id('TANGRAM__PSP_11__changeSmsCodeItem').click()
三、强制等待
time.sleep(3)
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的