CodeGym /Cours /Python SELF FR /Navigation sur plusieurs pages avec un minimum d'éléments...

Navigation sur plusieurs pages avec un minimum d'éléments dynamiques

Python SELF FR
Niveau 38 , Leçon 1
Disponible

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

Python

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.

Python

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.

Python

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.

Python

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.

Python

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.

Python

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.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION