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

如何用Selenium Python定位chrome://settings/passwords页面的Add按钮

解决Chrome设置密码页元素定位问题

核心原因:Chrome设置页面使用嵌套Shadow DOM

Chrome的chrome://settings/passwords页面采用了多层嵌套的Shadow DOM结构,普通的Selenium元素定位方法无法穿透Shadow DOM访问内部元素,这就是你无法找到addPasswordButton的根本原因。另外你之前使用web_driver.switch_to(a)是错误用法,switch_to用于切换frame或窗口,不能直接切换元素。

解决方案:逐层获取Shadow Root并定位元素

需要通过JavaScript逐层获取每个层级的Shadow Root,再在对应的Shadow Root内部查找目标元素。以下是完整的Python代码示例:

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

driver = webdriver.Chrome()
driver.get("chrome://settings/passwords")

# 1. 获取settings-ui的shadow root
settings_ui = driver.find_element(By.TAG_NAME, "settings-ui")
settings_ui_shadow = driver.execute_script("return arguments[0].shadowRoot", settings_ui)

# 2. 获取settings-main的shadow root
settings_main = settings_ui_shadow.find_element(By.TAG_NAME, "settings-main")
settings_main_shadow = driver.execute_script("return arguments[0].shadowRoot", settings_main)

# 3. 获取settings-basic-page的shadow root
settings_basic = settings_main_shadow.find_element(By.TAG_NAME, "settings-basic-page")
settings_basic_shadow = driver.execute_script("return arguments[0].shadowRoot", settings_basic)

# 4. 获取passwords-section的shadow root
passwords_section = settings_basic_shadow.find_element(By.ID, "passwords-section")
passwords_section_shadow = driver.execute_script("return arguments[0].shadowRoot", passwords_section)

# 5. 定位Add按钮并点击
add_btn = passwords_section_shadow.find_element(By.ID, "addPasswordButton")
add_btn.click()

额外说明

  1. 你之前的XPATH表达式存在语法错误://*[@id='addPasswordButton')]多了一个右括号,正确写法是//*[@id='addPasswordButton'],但即使修正语法,由于Shadow DOM的限制依然无法定位。
  2. RtlGetAppContainerNamedObjectPath错误是Windows底层函数的异常反馈,本质是Selenium无法定位到元素时的底层报错,解决Shadow DOM的访问问题后该错误会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:37:42