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

Python+Selenium如何获取ShadowRoot内容并点击Process按钮

问题修复方案

你的代码存在语法错误和逻辑问题,导致无法正确获取Shadow DOM内容,以下是修正后的实现:

错误点分析

  • expand_shadow_element函数内的JS脚本语法错误,正确获取Shadow Root的语句应为return arguments[0].shadowRoot
  • 未保存Shadow Root的获取结果,后续查找元素仍在主DOM中进行,而非Shadow DOM内部
  • 获取文本内容的JS脚本同样存在语法错误

修正后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

def get_shadow_root(element):
    # 正确获取元素的Shadow Root
    return driver.execute_script('return arguments[0].shadowRoot', element)

# 定位包含Shadow DOM的父元素
shadow_host = driver.find_element(By.XPATH, "//*[@id='shellNavComponent']")
time.sleep(1)

# 获取Shadow Root
shadow_root = get_shadow_root(shadow_host)

# 在Shadow Root内部查找元素并获取文本内容
target_element = shadow_root.find_element(By.CSS_SELECTOR, 'ul:nth-child(2)')
text_content = driver.execute_script('return arguments[0].textContent', target_element)
print(text_content)

# 查找并点击Process按钮(需根据实际结构调整选择器)
process_button = shadow_root.find_element(By.XPATH, ".//*[text()='Process']")
# 若按钮有明确属性,也可使用CSS选择器,例如:
# process_button = shadow_root.find_element(By.CSS_SELECTOR, "button[id='process-btn']")
process_button.click()

关键说明

  • 必须通过Shadow Root对象调用find_element方法,才能在Shadow DOM内部查找节点
  • 按钮选择器需根据页面实际DOM结构调整,优先使用ID、class等唯一属性,避免仅依赖文本
  • 建议用WebDriverWait替代time.sleep做显式等待,提升代码稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:32:36