【问题标题】: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?

标签: python selenium web-scraping


【解决方案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

【讨论】:

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

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

【讨论】:

  • 谢谢,我也会测试一下。我不知道 getAttribute() 可以以这种方式使用。
  • 这个答案+1。 Selenium 使用 element_to_be_clickable 等待功能引入了预期条件,但由于某些未知原因,即使按钮被禁用,它仍认为按钮可点击。获取类属性并搜索“禁用”为我解决了这个问题。
猜你喜欢
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
相关资源
最近更新 更多