#python #selenium #web-scraping #firefox
Вопрос:
Я хочу получить элемент в теневом корне(открыть), но следующий код не работает. К сожалению, я не могу показать html здесь по конфиденциальной причине. Это очень похоже на этот случай по ссылке: https://www.tutorialguruji.com/python/accessing-shadowroot-via-selenium-in-firefox-returns-javascriptexception-cyclic-object-value/
Firefox, селен, python
def expand_shadow_element(element):
# return a list of elements
shadowRoot = driver.execute_script('return arguments[0].shadowRoot.children', element)
return(shadowRoot)
#wait for element to load
el = WebDriverWait(driver, timeout=20).until(lambda d:d.find_element_by_tag_name("amplify-authenticator"))
time.sleep(5)
#expand the shadowroot and click the canvas
host = driver.find_element_by_tag_name("amplify-authenticator")
shadowRoot = expand_shadow_element(host)
print(shadowRoot[1])
canvas = shadowRoot[1].find_element_by_id('username')
canvas.click()
ошибка, которую я получаю, это
Traceback (most recent call last):
File "UHportal_login.py", line 60, in <module>
canvas = shadowRoot[1].find_element_by_id('username')
File "C:Usersmyname.condaenvssessionlibsite-packagesseleniumwebdriverremotewebelement.py", line 305, in find_element_by_tag_name
return self.find_element(by=By.TAG_NAME, value=name)
File "C:Usersmyname.condaenvssessionlibsite-packagesseleniumwebdriverremotewebelement.py", line 659, in find_element
{"using": by, "value": value})['value']
File "C:Usersmyname.condaenvssessionlibsite-packagesseleniumwebdriverremotewebelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:Usersmyname.condaenvssessionlibsite-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:Usersmyname.condaenvssessionlibsite-packagesseleniumwebdriverremoteerrorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="username"]