如何在Python上的selenium中获取shadow-root(打开)后面的数据?

问题描述 投票:0回答:1

我想获取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个回答
0
投票

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

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()
© www.soinside.com 2019 - 2024. All rights reserved.