首页 > 解决方案 > 使用 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)

标签: seleniumfirefoxweb-scrapinggeckodrivershadow-dom

解决方案


这不是真正的解决方案,而是一种解决方法。据我所知,Gekodriver 似乎不支持 shadow DOM,但可以访问一个元素。shadowRoot 不返回 web 元素,因此您需要更深入一些。

shadowRoot = self.driver.execute_script('return arguments[0].shadowRoot.firstChild', element)

它并不完美,但您可以正常使用该元素。


推荐阅读