使用Selenium和Python,如何检查按钮是否仍可点击?
使用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还有其他方法吗?谢谢。
问题的原因: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")。如果包含,则说明按钮不可点击;如果不包含,则说明按钮可点击。
希望以上内容对你有帮助!
使用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)导航到按钮,因为在查找具有空格名称的类时出现错误。非常感谢。如果您有任何关于如何解决复合类错误的建议,我将更加感激。
仍在努力工作,并且至今仍然是一个很好的答案。