Extraire des informations d'une #shadow-root à l'aide de Selenium Python
Dans le domaine du web scraping, extraire des données d'éléments dissimulés dans #shadow -les racines peuvent poser un défi important. Cet article explore les techniques pour surmonter cet obstacle à l'aide de Selenium Python.
Problème :
Considérez l'URL https://www.tiendasjumbo.co/buscar?q= mani dans une boutique en ligne. Pour extraire les étiquettes de produits et d'autres champs de ce site, un utilisateur a tenté l'approche suivante :
<code class="python">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"]')</code>
Cependant, cette approche a échoué, et le changement d'iframe s'est avéré tout aussi infructueux.
Solution :
La clé pour extraire des données de ce site réside dans la reconnaissance que les produits sont situés dans une #shadow-root. Pour accéder à ces éléments, Selenium fournit la méthode shadowRoot.querySelector(). Grâce à cette méthode, l'étiquette du produit peut être extraite à l'aide de la stratégie de localisation suivante :
<code class="python">driver.get('https://www.tiendasjumbo.co/buscar?q=mani') item = driver.execute_script("return document.querySelector('impulse-search').shadowRoot.querySelector('div.group-name-brand h1.impulse-title span.formatted-text')") print(item.text)</code>
L'exécution de ce script génère l'étiquette du produit :
<code class="text">La especial mezcla de nueces, maní, almendras y marañones x 450 g</code>
Références :
Pour plus d'informations, reportez-vous aux ressources suivantes :
Remarque :
Concernant Microsoft Edge et Google Chrome version 96, des modifications des valeurs de retour de la racine fantôme pour Selenium ont été introduites. Reportez-vous aux liens fournis dans la solution pour plus d'informations sur la gestion de ces changements dans différents langages de programmation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!