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

Python Selenium如何基于aria-label等自定义属性定位点击Shadow DOM中的元素

自定义标签Shadow DOM元素定位点击方案

你原来的CSS选择器定位逻辑是完全可行的,点击失败的核心原因是目标元素自带disabled属性与pointer-events: none样式,浏览器默认拦截了该元素的所有点击事件,需要先解除限制再执行点击操作。

方案1:保留原有定位逻辑,先解除点击限制再操作

from selenium.webdriver.common.by import By

# 原有定位逻辑正确,建议替换为Selenium新版推荐的By类写法
button = shadow_root4.find_element(By.CSS_SELECTOR, 'com-calendar-date[date="2021-09-28"]')

# 移除所有阻止点击的属性与样式
driver.execute_script("""
arguments[0].removeAttribute('disabled');
arguments[0].removeAttribute('aria-disabled');
arguments[0].style.pointerEvents = 'auto';
""", button)

# 执行点击,可选择原生点击或JS点击
button.click()
# driver.execute_script("arguments[0].click();", button)

方案2:遍历匹配自定义标签属性,兼容特殊场景

如果Shadow DOM下CSS属性选择器存在兼容问题,可以先获取所有同标签元素,再遍历匹配date属性:

from selenium.webdriver.common.by import By

all_date_eles = shadow_root4.find_elements(By.TAG_NAME, 'com-calendar-date')
target_date = "2021-09-28"

for ele in all_date_eles:
    if ele.get_attribute("date") == target_date:
        driver.execute_script("""
        arguments[0].removeAttribute('disabled');
        arguments[0].style.pointerEvents = 'auto';
        arguments[0].click();
        """, ele)
        break

注意事项

如果目标日期属于组件逻辑上禁止选择的范围(比如已过期日期、未开放预约日期),强制点击后需要验证后续业务流程是否符合预期,避免强制操作带来的业务异常。

内容的提问来源于stack exchange,提问作者Mark Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:54:02