我想获取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
如有任何建议,我们将不胜感激!
你可以像下面这样摆脱它:
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()