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

使用Selenium Python判断按钮点击状态及元素可编辑属性

如何通过价格元素的属性判断编辑状态切换按钮是否被点击?

我需要判断一个图片按钮是否被点击,这个按钮用来切换商品价格的编辑/保护状态,但按钮本身没有任何属性变化。后来发现价格元素在可编辑时带有contenteditable="true"属性,不可编辑时则带有disabled="true"属性。我试了几种获取属性的写法都没解决问题,求帮助:

cod = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="tbodyDatos"]/tr[1]/td[5]/div'))).get_attribute("disabled")

cod = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="tbodyDatos"]/tr[1]/td[5]/div'))).get_attribute("attributes[1]")

cod = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="tbodyDatos"]/tr[1]/td[5]/div'))).get_attribute("attributes[1].nodeValue")

解决方法

你的问题出在对get_attribute()方法的用法理解有误,以下是修正后的方案:

1. 错误写法分析

  • 第一种写法get_attribute("disabled")本身逻辑没问题,但你没正确处理返回值:当元素存在disabled="true"时,返回字符串"true";元素处于可编辑状态(无disabled属性)时,返回None。
  • 后两种写法attributes[1]、attributes[1].nodeValue是错误的,get_attribute()只接受属性名作为参数,不能直接使用DOM节点的属性访问语法。

2. 正确判断逻辑

直接通过目标元素的contenteditable和disabled属性来判断状态:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待价格元素加载完成
price_element = WebDriverWait(driver, 20).until(
    EC.visibility_of_element_located((By.XPATH, '//*[@id="tbodyDatos"]/tr[1]/td[5]/div'))
)

# 判断是否处于可编辑状态
is_editable = price_element.get_attribute("contenteditable") == "true"

# 判断是否处于不可编辑(保护)状态
# 注:部分场景下get_attribute("disabled")会返回布尔值True,用is not None更稳妥
is_disabled = price_element.get_attribute("disabled") is not None

# 根据状态反推按钮是否被点击(请根据你的初始状态调整逻辑)
# 例:假设初始状态为不可编辑,点击按钮后变为可编辑
if is_editable:
    print("按钮已被点击,当前价格可编辑")
else:
    print("按钮未被点击,当前价格处于保护状态")

3. 补充说明

  • contenteditable的默认值通常是"inherit",所以必须严格判断是否等于"true"才能确定是可编辑状态。
  • 如果页面中存在多个商品行,只需修改XPath中的tr[1]为对应行的索引即可适配。

内容的提问来源于stack exchange,提问作者Camilo Quintero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:30:59