我尝试通过xpath查找目标元素,以便可以单击它。但是在运行代码时找不到它,尽管可以在chrome浏览器上通过右键单击选项手动找到它。
详细信息:我正在使用
driver.get('chrome://settings/clearBrowserData')
从chrome浏览器弹出历史记录,然后按硒等待元素, 然后尝试通过以下方法单击它:
driver.find_element_by_css_selector('* /deep/ #clearBrowsingDataConfirm').click()
或通过:
driver.find_element_by_xpath(r'//paper-button[@id="clearBrowsingDataConfirm"]').click()
两者都不起作用
您是否可以通过xpath告诉解决方案,因为我比较熟悉。或通过其他任何清除Chrome历史记录的方法,谢谢
答案 0 :(得分:0)
查看“ Chrome设置”页面的源代码看起来像是您要查找的按钮,它隐藏在ShadowDOM
中因此,您需要迭代ShadowRoot的多个级别
所以算法看起来像:
shadow-root
并将其投放到WebElement 示例代码:
from selenium import webdriver
def expand_root_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
driver = webdriver.Chrome("c:\\apps\\webdriver\\chromedriver.exe")
driver.maximize_window()
driver.get("chrome://settings/clearBrowserData")
settingsUi = driver.find_element_by_tag_name("settings-ui")
settingsUiShadowRoot = expand_root_element(settingsUi)
settingsMain = settingsUiShadowRoot.find_element_by_tag_name("settings-main")
settingsShadowRoot = expand_root_element(settingsMain)
settingsBasicPage = settingsShadowRoot.find_element_by_tag_name("settings-basic-page")
settingsBasicPageShadowroot = expand_root_element(settingsBasicPage)
settingsPrivacyPage = settingsBasicPageShadowroot.find_element_by_tag_name("settings-privacy-page")
settingsPrivacyShadowRoot = expand_root_element(settingsPrivacyPage)
settingsClearBrowsingDataDialog = settingsPrivacyShadowRoot.find_element_by_tag_name(
"settings-clear-browsing-data-dialog")
settingsClearBrowsingDataDialogShadowRoot = expand_root_element(settingsClearBrowsingDataDialog)
settingsClearBrowsingDataDialogShadowRoot.find_element_by_id("clearBrowsingDataConfirm").click()
答案 1 :(得分:0)
我这样做可以使它起作用:
driver.ExecuteScript("return document.querySelector('body > settings-ui').shadowRoot.querySelector('#main').shadowRoot.querySelector('settings-basic-page').shadowRoot.querySelector('#advancedPage > settings-section:nth-child(1) > settings-privacy-page').shadowRoot.querySelector('settings-clear-browsing-data-dialog').shadowRoot.querySelector('#clearBrowsingDataConfirm').click();");