首页 > Python资料 博客日记
【Python】selenium 的EC.presence_of_element_located 和 EC.element_to_be_clickable 的区别
2024-09-20 08:00:05Python资料围观44次
写在前面:
最近我在整理显性等待EC的方法的时候,忽然发现显性等待不止一种写法。我比较常用的是EC.presence_of_element_located 这个方法,但是居然发现还有其他的显性等待写法(Amazing!! )让我感兴趣的是
EC.element_to_be_clickable
和 EC.presence_of_element_located
和 EC.visibility_of_element_located
这三个模块,因为它在我在解决 Exception 问题模块时,会用到的方法。于是让我产生了写这三者区别的想法。
这三者会用到的exception 出处:
这三个模块都是是 Selenium WebDriver 中 expected_conditions
(预期条件)模块的两个不同的函数,它们用于显式等待(Explicit Waits)中,以确保在执行某些操作之前页面上的元素满足特定的条件。
以下是他们的区别:
1. EC.presence_of_element_located
这个条件用于等待一个元素存在于DOM中。与可点击的 element_to_be_clickable 不同,它只检查元素是否存在,而不关心元素是否可见或可交互。
它适用于确保元素已经被加载到页面上,但不一定需要与元素进行交互。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myElement"))
)
这段代码会等待最多10秒钟,直到页面上存在一个ID为"myElement"的元素。
2. EC.element_to_be_clickable
它存在于DOM中,element_to_be_clickable 这个条件用于等待一个元素变得可点击,这意味着元素不仅需要是可见的,而且没有被其他元素遮挡,并且没有被禁用(例如,不是 display: none 或 visibility: hidden,并且没有 pointer-events: none 样式,pointer-events: none
的CSS属性不会阻止点击事件)。
它检查元素的可见性以及是否可以进行交互操作,如点击。
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "myElement"))
)
这段代码会等待最多10秒钟,直到页面上存在一个ID为"myElement"的元素,并且这个元素是可点击的。
3. EC.visibility_of_element_located
1.这个条件用于等待一个元素在页面上可见。一个元素被认为是可见的,如果它存在于DOM中,宽高都大于0,并且其CSS属性允许它被看到(例如,不是 display: none 或 visibility: hidden)。
2.它不检查元素是否可以交互,只关心元素是否能够被用户看到。
try:
# 等待直到页面上id为'myElement'的元素变得可见
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "myElement"))
)
# 一旦元素可见,可以执行进一步的操作,例如点击
# element.click()
except TimeoutException:
print("在指定时间内元素没有变得可见")
在这个示例中,我们使用 WebDriverWait 来等待最多10秒钟,直到页面上ID为 myElement 的元素变得可见。如果元素在这段时间内变得可见,我们可以对它执行进一步的操作;如果没有,将抛出TimeoutException。
4. 区别总结
EC.presence_of_element_located
关注的是元素的存在和可见性,而不考虑是否可进行点击操作。EC.element_to_be_clickable
不仅要求元素存在和可见,还要求元素可点击,即没有被其他元素覆盖,也没有禁用点击事件。visibility_of_element_located
:检查元素是否可见(存在且宽高大于0,没有被CSS隐藏)。
在实际使用中,如果我们需要等待一个元素以便与之交互(如点击),通常使用 EC.element_to_be_clickable,因为它确保了元素不仅加载完成,而且可以进行交互操作。
如果只是需要确认元素的存在,而不关心是否可交互,那么可以使用 EC.presence_of_element_located。
如果是确认元素是不是可见的,也不关心是否可交互,那么可以使用 EC.visibility_of_element_located。
PS:
如果想了解其他的【显性等待】中的expected_conditions 的方法,可以了解:【Python】Selenium WebDriver 中 expected_conditions(预期条件)模块
如果想要了解其他Exception的分类,可以了解:【Python】selenium的异常类selenium.common.exceptions的汇总
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj