Python Selenium中is_enabled()判断分页按钮状态失效及分页查找元素替代方案咨询
解决Selenium判断Material UI下一页按钮禁用状态的问题
我懂你遇到的这个坑——Angular Material的分页按钮禁用时,Selenium的is_enabled()偏偏识别不出来,这是因为这类UI框架会用原生disabled属性+自定义CSS类的组合标记禁用状态,而Selenium的is_enabled()对这种场景的判断容易失效。
先对照你的按钮HTML看核心差异:
- 禁用状态:按钮带有
disabled="true"属性,且类名包含mat-button-disabled - 正常状态:没有上述两个标记
针对这个情况,我们可以用两种更可靠的方式判断按钮是否禁用:
方法1:直接检查disabled属性
通过获取按钮的disabled属性值判断:禁用时返回"true",可用时返回None,逻辑非常直观:
# 先修正你原来的xpath语法错误:[value})] 改成 '{value}' elpath = f"//span[contains(text(),'{value}')]" while True: time.sleep(2) try: driver.find_element_by_xpath(elpath).click() break except Exception: next_btn = driver.find_element_by_xpath("Xpath to click Next Page") # disabled属性为None表示按钮可用 if next_btn.get_attribute("disabled") is None: next_btn.click() else: print("Element Not Found") break
方法2:检查CSS类名
禁用状态的按钮会被添加mat-button-disabled类,我们可以通过类名判断:
elpath = f"//span[contains(text(),'{value}')]" while True: time.sleep(2) try: driver.find_element_by_xpath(elpath).click() break except Exception: next_btn = driver.find_element_by_xpath("Xpath to click Next Page") btn_classes = next_btn.get_attribute("class") # 类名里没有禁用标记,就点击下一页 if "mat-button-disabled" not in btn_classes: next_btn.click() else: print("Element Not Found") break
方法3:结合两种判断(最稳妥)
为了避免单一判断的误差,同时检查属性和类名,兼容性更好:
elpath = f"//span[contains(text(),'{value}')]" while True: time.sleep(2) try: driver.find_element_by_xpath(elpath).click() break except Exception: next_btn = driver.find_element_by_xpath("Xpath to click Next Page") # 只要满足一个禁用条件,就判定为不可用 is_disabled = next_btn.get_attribute("disabled") is not None or "mat-button-disabled" in next_btn.get_attribute("class") if not is_disabled: next_btn.click() else: print("Element Not Found") break
另外提一句:你原来的xpath字符串有个小语法错误,[value})]应该改成'{value}')],不然会导致xpath解析失败,上面的代码已经帮你修正了这个问题~
内容的提问来源于stack exchange,提问作者Dreamcatcher_AR
相关产品推荐
相关产品推荐

