当前位置: 代码网 > it编程>前端脚本>Python > 【Python】selenium 的EC.presence_of_element_located 和 EC.element_to_be_clickable 的区别

【Python】selenium 的EC.presence_of_element_located 和 EC.element_to_be_clickable 的区别

2024年08月02日 Python 我要评论
区分EC.element_to_be_clickable和EC.presence_of_element_located 和visibility_of_element_located

写在前面:

最近我在整理显性等待ec的方法的时候,忽然发现显性等待不止一种写法。我比较常用的是ec.presence_of_element_located 这个方法,但是居然发现还有其他的显性等待写法(amazing!! )让我感兴趣的是

ec.element_to_be_clickableec.presence_of_element_locatedec.visibility_of_element_located这三个模块,因为它在我在解决 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.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的汇总

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com