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

10 浏览
0 Comments

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

我正在使用Python的Selenium进行网页抓取,遇到了一个问题。我需要点击一个“下一页”按钮来跳转到某个网站的下一页,但是当到达最后一页时,我需要停止点击。我想的做法是,在try/except语句中使用some_element.click(),并在按钮不可点击时等待直到出现错误。然而,似乎.click()没有发出任何信号,它在按钮无法点击时不会抛出错误,也没有发出任何真或假的信号。\n我尝试使用的代码片段如下:\n

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

\n还有其他方法吗?谢谢。

0
0 Comments

问题的原因:Selenium的element_to_be_clickable等待函数在某些情况下判断按钮可点击,即使它已经被禁用。这可能是由于HTML框架使用了描述不可点击按钮的特征类(例如"disabled")。

解决方法:可以使用Selenium和Python中的getAttribute()方法来获取按钮的类,并检查类的列表中是否包含来自HTML框架的描述不可点击按钮的特征类(例如"disabled")。

下面是解决方法的代码示例:

# 导入必要的库
from selenium import webdriver
# 创建浏览器实例
driver = webdriver.Chrome()
# 打开网页
driver.get("your_website_url")
# 定位按钮元素
button = driver.find_element_by_xpath("your_button_xpath")
# 获取按钮的类
button_classes = button.get_attribute("class")
# 检查类的列表中是否包含描述不可点击按钮的特征类
if "disabled" in button_classes:
    print("The button is not clickable")
else:
    print("The button is clickable")
    
# 关闭浏览器
driver.quit()

通过上述代码,我们可以获取按钮的类,并检查类的列表中是否包含描述不可点击按钮的特征类(例如"disabled")。如果包含,则说明按钮不可点击;如果不包含,则说明按钮可点击。

希望以上内容对你有帮助!

0
0 Comments

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

在不了解目标示例的更多信息之前,最小的可说的是一个可点击的属性应该有一个'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。认为是真实值的值,即等于“true”或“false”的值,将作为布尔值返回。所有其他非None值都作为字符串返回。对于不存在的属性或属性,返回None。

更多关于使用get_attribute的信息,请参见[这里](http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.remote.webelement.WebElement.get_attribute)。

您还可以尝试使用is_displayed或is_enabled。

我很确定这将解决我的问题。我现在旁边没有完整的代码,但我很快就会测试它。只有一件小事,该类在最后一页更改其名称。我将尽快尝试测试代码。非常感谢。

如果您确定类名在“最后一页”上更改,您还可以执行检查以查看是否存在具有给定类名的元素。请参见[stackoverflow.com/questions/7991522/…](http://stackoverflow.com/questions/7991522)

抱歉花了这么长时间,我必须重写代码(因为现在我没有应用程序的源代码)。我想尝试您的第一个建议,但是我有一个新问题。每当我使用find_element_by_class_name时,我会收到错误消息:“Message: invalid selector: Compound class names not permitted”。基本上,因为类名中有一个空格,即“copy-light next”。有什么快速建议吗?谢谢。

尝试只使用“next”而不是“copy-light next”,部分字符串应该能够匹配。否则,请尝试以稍微不同的方式捕获对象,请参见[stackoverflow.com/questions/17808521/…](http://stackoverflow.com/questions/17808521)

所以,您的第一个建议有效,我必须使用css_selector(find_element_by_css_selector)导航到按钮,因为在查找具有空格名称的类时出现错误。非常感谢。如果您有任何关于如何解决复合类错误的建议,我将更加感激。

仍在努力工作,并且至今仍然是一个很好的答案。

0