Python selenium 等待方式详解:强制等待、隐性等待和显性等待
需积分: 1 63 浏览量
更新于2024-08-04
收藏 124KB PDF 举报
解读Python selenium的等待方式
Python selenium 是一个功能强大的自动化测试工具,但是很多人在使用 selenium 时经常会遇到等待的问题,今天我们来详细讲解 Python selenium 的等待方式。
等待的必要性
-------------
在使用 selenium 时,我们经常会遇到一些问题,如下拉框定位不到、弹出框定位不到等,这些问题大多数情况下都是因为没有加等待或 frame 问题。我们的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,两者之间的速度差异会导致很多问题。
强制等待
----------
强制等待是最简单粗暴的一种等待方式,就是使用 sleep 函数强制让程序等待一定的时间,不管浏览器是否加载完了,程序都得等待这个时间。例如:
```
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get('http://huilansame.github.io')
sleep(3) # 强制等待 3 秒
print(driver.current_url)
driver.quit()
```
这种方式叫强制等待,不管浏览器是否加载完了,程序都得等待 3 秒,然后继续执行下面的代码。这种方式可以用于调试,但是不建议总用这种等待方式,因为它太死板,严重影响程序执行速度。
隐性等待
----------
隐性等待是第二种等待方式,使用 implicitly_wait 函数来设置等待时间。隐性等待的意义是:闪电侠和凹凸曼约定好,不论闪电侠去哪儿,都要等凹凸曼 xx 秒,如果凹凸曼在这段时间内来了,则俩人立即出发去打怪兽,如果凹凸曼在规定时间内没到,则闪电侠自己去,那自然就等着凹凸曼给你抛异常吧。
```
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(30) # 隐性等待,最长等 30 秒
driver.get('http://huilansame.github.io')
```
隐性等待的好处是可以减少等待时间,提高程序执行速度,但是需要注意的是,如果在规定时间内元素没有加载出来,程序将抛出异常。
显性等待
----------
第三种等待方式是显性等待,使用 WebDriverWait 类来实现等待。显性等待可以根据实际情况来等待元素的加载,例如:
```
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
driver.get('http://huilansame.github.io')
element = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
```
显性等待可以实现更灵活的等待方式,但是需要注意的是,需要根据实际情况来设置等待时间和条件。
结论
----
Python selenium 的等待方式有三种:强制等待、隐性等待和显性等待。每种等待方式都有其优缺点,需要根据实际情况来选择合适的等待方式,以提高程序执行速度和稳定性。
2023-04-17 上传
2018-08-07 上传
2022-06-11 上传
2021-09-27 上传
2013-07-12 上传
2020-07-13 上传
2020-11-27 上传
点击了解资源详情
点击了解资源详情
程序猿小乙
- 粉丝: 63
- 资源: 1740
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍