Unable to locate the Sign In element within #shadow-root (open) using Selenium and Python(无法使用 Selenium 和 Python 在 #shadow-root (open) 中找到登录元素)
问题描述
我正在尝试使用 selenium 自动执行某些操作,但无法在页面上找到第一个元素 :
从 selenium 导入 webdriver选项 = webdriver.ChromeOptions()options.add_argument(开始最大化")options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=options, executable_path=r'C:WebDriverschromedriver.exe')driver.get('https://developer.servicenow.com/dev.do')SignInButton = driver.execute_script("return document.querySelector('dps-app').shadowRoot.querySelector('dps-navigation-header').shadowRoot.querySelector('header.dps-navigation-header dps-login').shadowRoot.querySelector('dps-button')")SignInButton.click()
- 浏览器快照:
参考文献
您可以在以下位置找到一些相关的详细讨论:
- 如何交互在使用 cssSelector 清除 Chrome 浏览器的浏览数据时使用 #shadow-root (open) 中的元素
- 如何使用 selenium 自动化影子 DOM 元素?
I'm trying to use selenium to automate some actions but am unable to find the first element on the page https://developer.servicenow.com/dev.do and so cannot login
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver_path = "../bin/chromedriver.exe"
driver = webdriver.Chrome(driver_path)
driver.get("https://developer.servicenow.com/dev.do")
driver.find_element_by_xpath("/html/body/dps-app//div/header/dps-navigation-header//header/div/div[2]/ul/li[3]/dps-login//div/dps-button//button/span")
I get the error
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/dps-app//div/header/dps-navigation-header//header/div/div[2]/ul/li[3]/dps-login//div/dps-button//button/span"}
To Sign In button is deep within multiple #shadow-root (open)
Solution
Tto click()
on the desired element you can use shadowRoot.querySelector()
and you can use the following Locator Strategy:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'C:WebDriverschromedriver.exe')
driver.get('https://developer.servicenow.com/dev.do')
SignInButton = driver.execute_script("return document.querySelector('dps-app').shadowRoot.querySelector('dps-navigation-header').shadowRoot.querySelector('header.dps-navigation-header dps-login').shadowRoot.querySelector('dps-button')")
SignInButton.click()
- Browser Snapshot:
References
You can find a couple of relevant detailed discussions in:
- How to interact with the elements within #shadow-root (open) while Clearing Browsing Data of Chrome Browser using cssSelector
- How to automate shadow DOM elements using selenium?
这篇关于无法使用 Selenium 和 Python 在 #shadow-root (open) 中找到登录元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:无法使用 Selenium 和 Python 在 #shadow-root (open) 中找
基础教程推荐
- 将 YAML 文件转换为 python dict 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01