[英]python selenium, can't find elements from page_source while can find from browser
我嘗試通過 xpath 查找目標元素,以便我可以單擊它。 但是在運行代碼時找不到它,雖然可以在chrome瀏覽器上通過右鍵單擊選項手動找到它。
詳細信息:我正在使用
driver.get('chrome://settings/clearBrowserData')
從 chrome 獲取歷史彈出窗口,然后通過 selenium 等待元素,然后我嘗試通過以下方式單擊它:
driver.find_element_by_css_selector('* /deep/ #clearBrowsingDataConfirm').click()
或通過:
driver.find_element_by_xpath(r'//paper-button[@id="clearBrowsingDataConfirm"]').click()
兩者都不起作用
如果可能,您能否通過 xpath 告訴解決方案,因為我更熟悉它。 或任何其他方式來清除 chrome 上的歷史記錄,謝謝
查看 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()
我通過這樣做讓它工作:
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();");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.