【问题标题】:How to get data behind shadow-root (open) in selenium on python?如何在 python 上的 selenium 中获取 shadow-root (open) 后面的数据?
【发布时间】:2021-10-09 13:33:00
【问题描述】:

我想在 shadow-root 之后的 redbox 中获取数据,我该怎么做。 我试过使用 xpaths 和 css_selectors 没有任何运气。

from selenium import webdriver
import time

driver = driver = webdriver.Firefox(executable_path= "C:\Program Files (x86)\geckodriver.exe")
driver.get('https://betfury.io/sport-betting')
time.sleep(5)
driver.find_element_by_xpath('//button[@class="popup-btn-close"]').click() #close pop_up
driver.find_element_by_xpath('//div[@id="bettech"]') # this works
driver.find_element_by_xpath('//div[@class="bt3306"]') # this does not work

任何建议将不胜感激!

【问题讨论】:

    标签: python selenium shadow-dom


    【解决方案1】:

    你可以像下面这样摆脱它:

    def expand_shadow_element(element):
      shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
      return shadow_root
    
    
    outer = expand_shadow_element(driver.find_element_by_css_selector("div.bt-inner-page"))
    inner = outer.find_element_by_xpath("//div[@class="bt3306"]")
    inner.click()
    

    此外,这个bt3306 看起来有点动态。所以尝试使用可靠的类或任何其他定位器。但就 Shadow-root 而言,您可以使用上面的代码摆脱它

    更新 1:

    我们做错了,因为bt-inner-page 是一个id,我们必须使用# 而不是.

     def expand_shadow_element(element):
          shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
          return shadow_root
    
    outer = expand_shadow_element(driver.find_element_by_css_selector("div#bt-inner-page"))
        inner = outer.find_element_by_xpath("//div[@data-editor-id='navbarIcon']//*[name()='svg']")
        inner.click()
    

    【讨论】:

    • 我仍然收到此错误消息 - NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div.bt-inner-page"}
    • 好的,更新了@Joe 上面的代码,试试看,如果您遇到任何问题,请告诉我们
    • Message: invalid selector: Unable to locate an element with the xpath expression //div[@class='bt3306'] because of the following error: NotSupportedError: Failed to execute 'evaluate' on 'Document': The node provided is '#document-fragment', which is not a valid context node type. 现在收到以下问题...
    • 好的,正如我在回答中提到的那样,bt3306 看起来有点动态,您在 UI 中查看的是哪个元素?
    • 所以我使用它上面的 xpath 来确保这不是问题,并得到相同的错误消息 - Message: invalid selector: Unable to locate an element with the xpath expression //div[@dir='ltr'] because of the following error: NotSupportedError: Failed to execute 'evaluate' on 'Document': The node provided is '#document-fragment', which is not a valid context node type. (Session info: chrome=92.0.4515.131)
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 2022-01-08
    • 2021-03-10
    • 2020-10-29
    • 2021-05-18
    • 2021-12-21
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多