1. Préparation à la navigation
Avant de commencer nos grandes aventures, il faut s'équiper avec les bons outils : Selenium et un peu de ruse. On part du principe que tu sais déjà configurer Selenium et le driver pour ton navigateur, alors allons-y !
Configuration du driver
from selenium import webdriver
# Lancement du driver du navigateur, par exemple Chrome
driver = webdriver.Chrome()
# On ouvre la première page de notre aventure
driver.get("http://example.com/start-page")
Jusqu'ici, rien de spécial : on a ouvert un navigateur et chargé la page de départ. Mais là où commence la vraie aventure : on ne veut pas juste rester sur une seule page. On veut visiter toutes ses voisines !
2. Pagination : balade d'une page à l'autre
La façon la plus simple et sympa de naviguer entre les pages, c'est la pagination. Tu as sûrement vu ces petits numéros en bas de page, non ? Ils ressemblent à des panneaux routiers : « Prochaine étape – page 2 ».
Extraction de données des pages
Avant de commencer le voyage, on voudrait récolter des infos sur la page actuelle. Disons que ce sont des listes de produits ou des titres d'articles.
def extract_data():
# On trouve tous les éléments intéressants sur la page, genre les titres
titles = driver.find_elements_by_class_name("item-title")
for title in titles:
print(title.text) # Oui, on affiche juste le texte, mais tu peux le sauvegarder où tu veux
extract_data()
Si tu as séché les précédentes conférences, ce bout de code cherche tous les titres avec la classe item-title
et les affiche.
Navigation vers la page suivante
Maintenant qu'on a récupéré nos données, il est temps d'aller plus loin. La pagination est souvent présentée sous forme de boutons avec des liens vers la page suivante ou précédente. On doit trouver ces boutons et cliquer dessus.
def go_to_next_page():
try:
# On trouve le bouton de la page suivante et on clique dessus
next_button = driver.find_element_by_link_text("Next")
next_button.click()
except NoSuchElementException:
# Si le bouton n'existe pas, c'est qu'on est à la fin
print("Fin de la liste des pages.")
Cette fonction cherche un lien avec le texte « Next »
. Si elle le trouve, elle clique dessus et on passe à la page suivante. Sinon, notre bot comprend qu'il est arrivé à la fin d'Internet... enfin, au moins pour cette séquence de pages.
3. Navigation cyclique à travers les pages
Qu'est-ce qui nous manque pour être heureux ? Exact, une boucle ! On va tout mettre ensemble dans une boucle pratique pour que notre bot puisse visiter toutes les pages disponibles, comme un vrai pro.
while True:
extract_data() # On collecte les données de la page actuelle
go_to_next_page() # On passe à la page suivante
time.sleep(2) # On fait une petite pause pour ne pas effrayer le serveur
Voilà, maintenant notre bot navigue courageusement à travers toutes les pages où on peut cliquer sur le bouton « Next »
. Ce code s'exécutera tant qu'il reste des pages. N'oublie pas qu'une petite pause entre les requêtes, c'est ta meilleure amie. Personne n'aime les spammeurs, surtout les admins des sites.
4. Interaction dynamique
Les amis, tout n'est pas aussi simple que dans ces exemples avec la pagination. Parfois, une page se comporte comme un ninja insaisissable, chargeant du contenu dynamiquement au fur et à mesure que tu fais défiler. Pas de panique, on va aussi gérer ça.
Attente explicite
Les attentes permettent à ton code de méditer un peu jusqu'à ce que l'élément nécessaire soit disponible. C'est super utile quand le contenu ne se charge pas tout de suite.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def wait_for_element(locator):
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, locator))
)
return element
except TimeoutException:
print("Élément non trouvé.")
Avec cette fonction, ton bot sera en harmonie avec le contenu chargé dynamiquement, attendant patiemment que les éléments soient disponibles.
Défilement de la page
Pour du contenu dynamique contenu dans des pages magiques comme un défilement infini, on peut avoir besoin de défiler vers le bas pour charger plus d'éléments.
def scroll_down():
# Utilise du JavaScript pour défiler vers le bas
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
Ce script JavaScript aide à effectuer un défilement fluide vers le bas, permettant à la page de charger le contenu. Tu peux utiliser cette technique dans une boucle pour gérer le défilement infini.
5. Particularités et astuces
Aller au-delà des exemples, c'est un monde d'aventures plein de surprises. Imagine ton bot prêt à gérer différents scénarios, comme toi.
Si le bouton « Next »
n'existe pas mais qu'il y a une pagination avec des numéros de pages, utilise une approche dynamique en insérant le numéro directement dans l'URL. Et si ton site décide soudainement de jouer les ninjas et de cacher certaines pages, ajuste tes scripts pour qu'ils puissent s'adapter et rester prêts aux imprévus.
GO TO FULL VERSION