Découvrez pourquoi Selenium peut ne pas trouver d'éléments en utilisant des noms de classe et des XPaths complexes, et comment utiliser efficacement les sélecteurs CSS avec WebDriverWait pour extraire des données de pages web dynamiques.
---
Visitez ces liens pour le contenu original et plus de détails, tels que des solutions alternatives, les dernières mises à jour/développements sur le sujet, des commentaires, l'historique des révisions, etc. Par exemple, le titre original de la question était : Pourquoi Selenium ne trouve-t-il pas d'éléments ?
Si quelque chose vous semble étrange, n'hésitez pas à me laisser un commentaire sous cette vidéo.
---
Aperçu du problème
Lors du scraping de sites web avec Selenium, un problème courant est de ne pas obtenir de résultats lors de la recherche d'éléments. Cela se produit souvent parce que :
Les éléments cibles ne correspondent pas aux sélecteurs spécifiés (noms de classe ou XPath).
Les éléments ne sont pas encore chargés lorsque la recherche s'exécute.
Des XPaths complexes ou fragiles peuvent facilement se briser avec des changements de structure du site.
Pourquoi votre code pourrait ne rien retourner
Dans l'exemple, les éléments ont été localisés en utilisant :
[[Voir la vidéo pour révéler ce texte ou extrait de code]]
C'est problématique car By.CLASS_NAME n'accepte qu'un seul nom de classe, pas plusieurs. Utiliser deux noms de classe ensemble provoque un échec.
De plus, utiliser un XPath absolu à l'intérieur de chaque élément de maison est fragile et risque de se briser si la mise en page de la page change.
Une approche meilleure et plus fiable
Utilisez des sélecteurs CSS au lieu de noms de classe ou de XPaths complexes
Les sélecteurs CSS permettent de cibler les éléments par combinaison d'attributs et de hiérarchie de manière claire et concise.
Attendez que les éléments apparaissent
Les pages web chargent souvent des données dynamiquement. Utilisez WebDriverWait et expected_conditions pour attendre que les éléments soient présents avant d'extraire des données.
Exemple de code
[[Voir la vidéo pour révéler ce texte ou extrait de code]]
Pourquoi cela fonctionne mieux
Sélecteur CSS : cible chaque annonce de maison (div[data-testid=result-item]) et son titre <h2> directement.
WebDriverWait : garantit que Selenium attend que les éléments apparaissent sur la page.
Extraction de texte robuste : etext() gère les cas où .text pourrait être vide mais textContent contient les données.
Résumé
Pour éviter que Selenium ne trouve pas d'éléments :
Évitez de combiner plusieurs classes dans By.CLASS_NAME — utilisez plutôt By.CSS_SELECTOR.
Préférez les sélecteurs CSS ou XPath relatif à XPath absolu.
Utilisez des attentes explicites (WebDriverWait) pour gérer le contenu dynamique des pages.
Cette approche conduit à des scripts de web scraping plus fiables et maintenables.