如何使用 Selenium Python 提取 #shadow-root (open) 中的信息?

Ale*_* AG 8 python selenium selenium-webdriver shadow-dom queryselector

我得到了与在线商店https://www.tiendasjumbo.co/buscar?q=mani相关的下一个网址,但我无法将产品标签提取到另一个字段:

from selenium import webdriver
import time
from random import randint

driver = webdriver.Firefox(executable_path= "C:\Program Files (x86)\geckodriver.exe")
driver.implicitly_wait(10)
time.sleep(4)

url =  "https://www.tiendasjumbo.co/buscar?q=mani"
driver.maximize_window()
driver.get(url)
driver.find_element_by_xpath('//h1[@class="impulse-title"]')
Run Code Online (Sandbox Code Playgroud)

我做错了什么,我也尝试过切换 iframe 但没有办法实现我的目标?欢迎任何帮助。在此输入图像描述

Deb*_*anB 12

网站https://www.tiendasjumbo.co/buscar?q=mani中的产品位于#shadow-root (open).

\n

冲动搜索

\n
\n

解决方案

\n

要提取您必须使用的产品标签shadowRoot.querySelector(),您可以使用以下定位器策略

\n
    \n
  • 代码块:

    \n
    driver.get(\'https://www.tiendasjumbo.co/buscar?q=mani\')\nitem = driver.execute_script("return document.querySelector(\'impulse-search\').shadowRoot.querySelector(\'div.group-name-brand h1.impulse-title span.formatted-text\')")\nprint(item.text)\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
  • 控制台输出:

    \n
    La especial mezcla de nueces, man\xc3\xad, almendras y mara\xc3\xb1ones x 450 g\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
\n
\n

参考

\n

您可以在以下位置找到一些相关讨论:

\n\n
\n

Microsoft Edge 和 Google Chrome 版本 96

\n

Chrome v96 更改了 Selenium 的影子根返回值。一些有用的链接:

\n\n