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
相关产品推荐
相关产品推荐

