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

使用Selenium修改span的data-checked属性报错求助

解决Selenium修改data-checked属性的错误及批量修改方案

问题场景

有19个带data-checked属性的span元素,示例代码如下:

<span id="u25-accordion-panel--61" data-type="checkbox" data-checked style="display: none;"></span>

尝试用Selenium修改单个元素的该属性时触发语法错误,原代码及报错信息如下:

原Selenium代码

options = webdriver.EdgeOptions()
options.add_argument("start-maximized")
driver = webdriver.Edge(options=options)
driver.implicitly_wait(20)
driver.get(
    'https://www.udemy.com/course/angular-10-fundamentos-8-app/')


elem = driver.find_element(By.CSS_SELECTOR,
                           '#udemy > div.ud-main-content-wrapper > div.ud-main-content > div > div > div.paid-course-landing-page__container > div.paid-course-landing-page__body > div > div:nth-child(3) > div > button')
elem.click()

elems = driver.find_elements(By.CSS_SELECTOR,
                             'div.accordion-panel--panel--24beS > span')

driver.execute_script("arguments[0].data-checked = 'checked';", elems[1])

报错信息

driver.execute_script("arguments[0].data-checked = 'checked';", elems[1])
selenium.common.exceptions.JavascriptException: Message: javascript error: Invalid left-hand side in assignment
  (Session info: MicrosoftEdge=109.0.1518.78)

错误原因

在JavaScript中,带连字符的属性(如data-checked)无法直接通过.运算符访问赋值,连字符会被解析为减法运算符,导致语法错误。必须使用setAttribute()方法操作这类属性。

解决方法

1. 修正单个元素的修改代码

将原执行脚本的代码替换为:

driver.execute_script("arguments[0].setAttribute('data-checked', 'checked');", elems[1])

2. 批量修改所有目标元素(Python遍历实现)

遍历找到的所有元素,逐个执行属性修改:

options = webdriver.EdgeOptions()
options.add_argument("start-maximized")
driver = webdriver.Edge(options=options)
driver.implicitly_wait(20)
driver.get(
    'https://www.udemy.com/course/angular-10-fundamentos-8-app/')


elem = driver.find_element(By.CSS_SELECTOR,
                           '#udemy > div.ud-main-content-wrapper > div.ud-main-content > div > div > div.paid-course-landing-page__container > div.paid-course-landing-page__body > div > div:nth-child(3) > div > button')
elem.click()

elems = driver.find_elements(By.CSS_SELECTOR,
                             'div.accordion-panel--panel--24beS > span')

# 批量修改所有元素的data-checked属性
for elem in elems:
    driver.execute_script("arguments[0].setAttribute('data-checked', 'checked');", elem)

3. 优化方案:JavaScript一次性批量处理(更高效)

直接在JavaScript中完成遍历修改,减少Python与JS的交互次数:

options = webdriver.EdgeOptions()
options.add_argument("start-maximized")
driver = webdriver.Edge(options=options)
driver.implicitly_wait(20)
driver.get(
    'https://www.udemy.com/course/angular-10-fundamentos-8-app/')


elem = driver.find_element(By.CSS_SELECTOR,
                           '#udemy > div.ud-main-content-wrapper > div.ud-main-content > div > div > div.paid-course-landing-page__container > div.paid-course-landing-page__body > div > div:nth-child(3) > div > button')
elem.click()

# 直接用JS批量修改所有目标元素
driver.execute_script("""
    const elements = document.querySelectorAll('div.accordion-panel--panel--24beS > span');
    elements.forEach(el => el.setAttribute('data-checked', 'checked'));
""")

内容的提问来源于stack exchange,提问作者Frank Romero Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:35:20