使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?

Posted

技术标签:

【中文标题】使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?【英文标题】:Using Selenium and Python, how to check whether the button is still clickable?使用 Selenium 和 Python,如何检查按钮是否仍然可点击? 【发布时间】:2015-08-22 05:20:21 【问题描述】:

所以我正在使用 Selenium 和 Python 进行一些网络抓取,但我遇到了问题。我正在单击“下一步”按钮以移至某个网站的下一页,但是当我到达最后一页时,我需要停止单击它。现在,我这样做的想法只是在 try/except 语句中使用 some_element.click() 并等到它给我一个错误而按钮不再可点击。但是,似乎 .click() 不会发出任何类型的信号,当无法单击按钮并且不会发出任何真或假信号时,它不会引发错误。

我尝试使用的代码 sn-p:

while True:
    try:
       button = driver.find_element_by_class_name('Next_button')
       button.click()
    except:
       break

还有其他方法吗?谢谢和欢呼。

【问题讨论】:

到达最后一页时是否显示元素? 可能是该链接仍然可以点击,但它没有移动到下一页,而是什么都不做。你能分享你运行代码的网站的链接吗? @Saifur 是对的。检查最后一页时该按钮的 html 属性发生了哪些变化。 Saifur,下一页按钮仍然显示,但在最后一页上显示为灰色。 @Vikas Neha Ojha,类名在最后一页发生了变化,它的xpath也是如此。如何在 Python 中检测到这种变化?还是我错误地理解了你的建议。 alecxe,是的,这可能是真的。循环永远持续下去。 循环永远持续下去 - 请说明它是否正在浏览下一个网页。您提到类名发生了变化,我可以看到您正在尝试仅按类名查找元素,因此您的代码仍然可以工作。能否请您仅在初始页面和最后一页上发布按钮的html? 【参考方案1】:

在不了解您的示例目标的情况下,可以说的最低限度是可点击属性将具有“href”属性。 您可以使用元素的get_attribute 属性:

button = driver.find_element_by_class_name('Next_button')
href_data = button.get_attribute('href')
if href_data is None:
  is_clickable = False

获取元素的给定属性或属性。

此方法将首先尝试返回具有给定名称的属性的值。如果同名的属性不存在,则返回同名属性的值。如果没有具有该名称的属性,则返回 None。

被认为是真实的值,即等于“真”或“假”,作为布尔值返回。所有其他非 None 值都作为字符串返回。对于不存在的属性或属性,返回 None。

更多关于使用get_attribute

你也可以试试is_displayedis_enabled

【讨论】:

我很确定这会解决我的问题。我旁边没有完整的代码,但我会尽快对其进行测试。只有一件小事,该类在最后一页更改了名称。我会尽快测试代码。非常感谢。 如果您确定“最后一页”上的类名发生了变化,您还可以执行检查以查看具有给定类名的元素是否存在:***.com/questions/7991522/… 对不起,我花了这么长时间,直到那时我不得不重写代码(因为我现在没有我的应用程序的源代码)。我想尝试您的第一个建议,但我有一个新问题。每当我使用 find_element_by_class_name 时,我都会收到错误消息:“消息:无效选择器:不允许复合类名”。基本上,因为类名中有一个空格,“copy-light next”。有什么快速的建议吗?谢谢。 尝试“next”而不是“copy-light next”,部分字符串应该被捕获。否则尝试以不同的方式捕获对象,请参见此处:***.com/questions/17808521/… 仍在工作,今天是一个很好的答案。【参考方案2】:

使用它来获取课程 element.get_attribute("class") 并检查类列表是否包含您的 html 框架中用于描述不可点击按钮的特征类(例如“禁用”)

【讨论】:

谢谢,我也会测试一下。我不知道 getAttribute() 可以以这种方式使用。 这个答案+1。 Selenium 使用 element_to_be_clickable 等待功能引入了预期条件,但由于某些未知原因,即使按钮被禁用,它仍认为按钮可点击。获取类属性并搜索“禁用”为我解决了这个问题。

以上是关于使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?的主要内容,如果未能解决你的问题,请参考以下文章

Python + Selenium - 如何检查使用 CSS 设置样式并显示为内容的图像?

如何使用 Python 在 Selenium WD 中检查变量的值是不是为整数? [复制]

使用 selenium 和 python 检查是不是存在任何警报

如何检查 Selenium Python 中是不是选中/取消选中复选框? [复制]

在 Python 中,如何检查 Selenium WebDriver 是不是已退出?

如何使用 Selenium 和 Python 选择具有 unselectable="on" 属性的剑道下拉元素