首页 > 解决方案 > Python:通过 Selenium remotedriver 手动配置 Chrome://settings

问题描述

我正在尝试通过 selenium webdriver 控制 chrome://settings,我尝试这样做的方式如下:

driver.get('chrome://settings/content/siteDetails?site=https%3A%2F%2Fwww.google.com')
a_button = WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.XPATH, '//select[contains(@id, "permission")]')))

由于某种原因 selenium 无法识别 xpath,因此我无法选择它并在设置中移动或更改任何内容

*** selenium.common.exceptions.TimeoutException: Message:

ch//设置

我的硒版本是硒==3.141.0

标签: pythonpython-3.xseleniumselenium-webdriverselenium-chromedriver

解决方案


driver = webdriver.Chrome()

driver.get(
    'chrome://settings/content/siteDetails?site=https%3A%2F%2Fwww.google.com')
temp= driver.execute_script(
    "return document.querySelector('settings-ui').shadowRoot.querySelector('settings-main#main').shadowRoot.querySelector('settings-basic-page')")
rules = driver.execute_script(
    "return arguments[0].shadowRoot.querySelector('settings-privacy-page').shadowRoot.querySelector('settings-animated-pages#pages settings-subpage site-details').shadowRoot.querySelector('div.list-frame:not(div>div.list-frame)')", temp)
location = driver.execute_script(
    "return arguments[0].querySelector('site-details-permission[label=\"Location\"]').shadowRoot.querySelector('#permission')", rules)
camera = driver.execute_script(
    "return arguments[0].querySelector('site-details-permission[label=\"Camera\"]').shadowRoot.querySelector('#permission')", rules)

location.click()
location.find_element_by_id("allow").click()

camera.click()
camera.find_element_by_id("block").click()

它在 shadowRoot 内部,因此您必须使用执行脚本并遍历每个影子根。在上面的代码中,您只需更改“位置”行中的标签即可更改其他规则,因为“规则”对象是所有其他规则的父对象。


推荐阅读