You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:42:29