1. Défilement automatique de page
Imagine que tu es en train de scroller une interminable mais familière timeline sur un réseau social, là où le contenu se charge paresseusement au fur et à mesure que tu descends. Ce défilement magique a en fait une API qui peut être automatisée avec Selenium.
Méthode execute_script()
La méthode execute_script() dans Selenium permet d'exécuter du code JavaScript sur la page, et c'est un outil puissant quand il s'agit de défilement. Voyons comment l'utiliser pour défiler une page.
from selenium import webdriver
import time
# Initialisation du driver du navigateur
driver = webdriver.Chrome()
# Ouverture de la page cible
driver.get('https://example.com/scrolling_page')
# Défilement de la page vers le bas
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3) # On attend pour que le contenu puisse se charger
# Défilement de la page vers le haut (pour le fun)
driver.execute_script("window.scrollTo(document.body.scrollHeight, 0);")
# Terminer la session
driver.quit()
Dans ce script, nous utilisons window.scrollTo() pour défiler la page. Les arguments (0, document.body.scrollHeight) indiquent un défilement du début jusqu'à la fin de la page. C'est une technique simple et efficace pour s'assurer que tous les éléments dynamiques sont complètement chargés.
Pourquoi est-ce important ?
Utiliser execute_script() pour défiler une page permet de charger le contenu qui peut être caché au début, comme c'est le cas avec le défilement infini. C'est particulièrement utile pour les réseaux sociaux et les timelines d'actualités où le contenu est chargé dynamiquement.
2. Navigation par liens
Maintenant que nous avons compris le défilement, passons à la prochaine étape — naviguer automatiquement à travers des liens. C'est une compétence clé pour collecter des données, surtout si elles sont réparties sur plusieurs pages.
Les bases de la navigation par liens
Pour cliquer sur un lien, nous pouvons utiliser la méthode click() sur un élément sélectionné. Regardons un exemple simple :
from selenium import webdriver
# Initialisation du driver du navigateur
driver = webdriver.Chrome()
# Ouverture de la page cible
driver.get('https://example.com/links_page')
# Trouver le lien par son texte et cliquer dessus
link = driver.find_element_by_link_text('Next Page')
link.click()
# Terminer la session
driver.quit()
Dans cet exemple, nous recherchons un lien par son contenu textuel. Mais que faire si le texte n'est pas unique ? Dans ce cas, nous pouvons utiliser des méthodes plus précises comme find_element_by_xpath() ou find_element_by_css_selector().
# Recherche d'un lien par XPath
link = driver.find_element_by_xpath('//a[@href="/next_page"]')
link.click()
Avantages de la navigation automatique par liens
Naviguer à travers les liens avec Selenium permet d'automatiser le processus de collecte de données sur des pages avec une pagination, ou lorsque les données sont réparties sur plusieurs sections d'un site. Cela fonctionne très bien pour parcourir les résultats de recherche ou explorer un catalogue de produits sur des sites de e-commerce.
3. Combiner défilement et navigation
Maintenant, imagine que tu dois défiler une page pour trouver un lien ou un élément particulier, puis passer à une autre page. C'est un processus combiné qui peut être automatisé.
Exemple de script combiné
from selenium import webdriver
import time
# Initialisation du driver du navigateur
driver = webdriver.Chrome()
# Ouverture de la page cible
driver.get('https://example.com/scroll_and_click')
# Défilement de la page pour charger les éléments cachés
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
# Trouver et cliquer sur le lien requis
link = driver.find_element_by_xpath('//a[text()="Load More"]')
link.click()
# Terminer la session
driver.quit()
Quels problèmes peuvent survenir ?
En travaillant avec des pages dynamiques, il arrive parfois que les éléments ne se chargent pas assez rapidement ou ne soient pas complètement présents. Dans ces cas, il est nécessaire d'utiliser des techniques d'attente pour s'assurer que les éléments avec lesquels tu veux interagir sont disponibles.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Attente que l'élément soit cliquable
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//a[text()="Load More"]'))
)
element.click()
Utiliser des méthodes d'attente aide à éviter les échecs dus à des éléments non prêts et garantit un fonctionnement plus stable du script.
GO TO FULL VERSION