selenium - 使用 Python Selenium Geckodriver 的 Shadow DOM
问题描述
我正在尝试使用此代码访问以下网站https://www.wego.ae/en/flights/searches/cSFO-cLHR-2020-03-09:cLHR-cSFO-2020-03-22上的影子根元素/economy/1a:0c:0i?sort=price&order=asc应该在 Chrome 驱动程序上工作,但在 Geckodriver 上会给出循环对象异常。
任何人都能够使其在 Firefox geckodriver 上运行并可以分享他们的代码吗?
def expandShadowElement(self,element):
shadowRoot = self.driver.execute_script('return arguments[0].shadowRoot', element)
return shadowRoot
root1 = self.driver.find_element_by_tag_name('makalu-app')
shadowRoot1 = self.expandShadowElement(root1)
解决方案
这不是真正的解决方案,而是一种解决方法。据我所知,Gekodriver 似乎不支持 shadow DOM,但可以访问一个元素。shadowRoot 不返回 web 元素,因此您需要更深入一些。
shadowRoot = self.driver.execute_script('return arguments[0].shadowRoot.firstChild', element)
它并不完美,但您可以正常使用该元素。
推荐阅读
- python-3.x - Python 中的 3D Dicom 可视化
- linq - LINQ Core 中的 Pivot 和 Unpivot
- python - Python webscraping 未使用 BeautifulSoup 显示所有行
- android - 通过代码更改缺口的背景颜色不起作用
- python - 在 Tensorflow 1.13 中出现“NameError: name 'Reduction' is not defined”错误
- python - 如何解决 Django 注册模板导入/引用的问题
- python - 将引擎从点更改为neato时找不到graphviz PATH变量
- php - 如何使用数据库中的日期(包括时间)作为 php 表中隐藏字段的值
- django - (Django) 显示有关模型实例的简单统计信息
- python - python线程start_new_thread和使用celery的区别,哪个对django的异步任务有好处