如何使用Selenium提取ShadowRoot类型元素中的日期文本内容
解决方法
以下方案按优先级从高到低排列,可覆盖绝大多数场景:
1. 直接读取输入框value属性
日期选择器填充的内容默认存储在输入框的value属性中,不属于元素的innerText,所以使用.text无法获取,优先尝试如下代码:
date_input = driver.find_element_by_xpath(你的元素路径) date = date_input.get_attribute("value")
2. 穿透ShadowRoot取值
如果确认目标元素被ShadowRoot包裹,使用Selenium 4.0+原生支持的ShadowRoot穿透能力即可:
- 首先定位到带
#shadow-root标识的宿主父元素 - 获取Shadow根节点后再定位内部输入框
- 读取输入框的
value属性
示例代码:
from selenium.webdriver.common.by import By # 定位ShadowRoot宿主元素 shadow_host = driver.find_element_by_xpath("Shadow宿主元素的XPATH路径") # 获取ShadowRoot节点 shadow_root = shadow_host.shadow_root # 从ShadowRoot内部定位日期输入框 date_input = shadow_root.find_element(By.XPATH, "输入框在Shadow内部的XPATH路径") # 取值 date = date_input.get_attribute("value")
3. 兼容性兜底方案
如果上述方案都不生效,直接通过执行JS语句取值,不受ShadowRoot和浏览器差异限制:
# 普通元素取值 date = driver.execute_script('return document.querySelector("输入框的完整CSS选择器").value') # ShadowRoot包裹的元素取值示例 date = driver.execute_script('return document.querySelector("Shadow宿主元素CSS选择器").shadowRoot.querySelector("输入框CSS选择器").value')
内容的提问来源于stack exchange,提问作者CodeKorn
相关产品推荐
相关产品推荐

