如何解决如何单击 shadow-root 元素内的按钮?
在我们在加泰罗尼亚的网站上获取 Covid-19 疫苗非常烦人,每次您想检查是否有可用的中心时,都必须介绍您的个人信息和 SMS 代码。
自从我学习 Python 以来,我正在尝试自动化该过程,第一步是单击主页上的按钮。但是,该按钮位于许多 shadow-root 元素中。
我之前做过一项研究,寻找类似的问题,并尝试了一些代码,但没有用。
这是我的代码:
from selenium.webdriver import Firefox
import time
# Define the driver
driver = Firefox(executable_path='C:/Users/Alexis/AppData/Local/Programs/Python/Python39/Tools/geckodriver.exe')
# Helper for getting the shadow root of a shadow host
def getShadowRoot(host):
shadow_root = driver.execute_script("return arguments[0].shadowRoot",host)
return shadow_root
# Open the browser and load the website (vacunacovidsalut.cat)
driver.get('http://vacunacovidsalut.cat/')
# Give browser some time to load all website elements
time.sleep(5)
# Get the button we need to click
host1 = driver.find_element_by_tag_name('vaccinapp-app')
root1 = getShadowRoot(host1)
host2 = driver.find_element_by_tag_name('vaccinapp-shell')
root2 = getShadowRoot(host2)
host3 = driver.find_element_by_tag_name('appointment-shell')
root3 = getShadowRoot(host3)
host4 = driver.find_element_by_tag_name('appointment-onboarding')
root4 = getShadowRoot(host4)
host5 = driver.find_element_by_tag_name('mwc_button')
root5 = getShadowRoot(host5)
btn_pedircita = root5.find_element_by_css_selector('#button')
btn_pedircita.click()
这是错误:
Traceback (most recent call last):
File "h:\Programacion\Python\VacunaCOVID\main.py",line 20,in <module>
root1 = getShadowRoot(host1)
File "h:\Programacion\Python\VacunaCOVID\main.py",line 9,in getShadowRoot
shadow_root = driver.execute_script("return arguments[0].shadowRoot",host)
File "C:\Users\Alexis\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py",line 634,in execute_script
return self.execute(command,{
File "C:\Users\Alexis\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py",line 321,in execute
self.error_handler.check_response(response)
File "C:\Users\Alexis\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py",line 242,in check_response
raise exception_class(message,screen,stacktrace)
selenium.common.exceptions.JavascriptException: Message: Cyclic object value
这是 HTML:
有什么建议吗?非常感谢!
解决方法
我以某种方式想出了如何去做。这是获取按钮的代码:
host1 = driver.find_element_by_tag_name('vaccinapp-app')
root1 = getShadowRoot(host1)
host2 = root1.find_element_by_tag_name('vaccinapp-shell')
root2 = getShadowRoot(host2)
host3 = root2.find_element_by_tag_name('appointment-shell')
root3 = getShadowRoot(host3)
host4 = root3.find_element_by_tag_name('appointment-onboarding')
root4 = getShadowRoot(host4)
host5 = root4.find_element_by_tag_name('mwc-button')
root5 = getShadowRoot(host5)
btn_pedircita = root5.find_element_by_tag_name('button')
btn_pedircita.click()
现在,关于如何改进/简化此代码的任何建议?我真的不喜欢重复所有这些台词。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。