1. Utilisation du bouton « Suivant »
Si un site a un bouton ou un lien « Suivant » pour passer à la page suivante, tu peux configurer une boucle pour cliquer sur ce bouton tant qu'il est disponible.
Exemple de code
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
# Exemple de collecte de données sur la page actuelle
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text) # Ici, tu peux sauvegarder ou traiter les données
def click_next_button(driver):
try:
next_button = driver.find_element(By.LINK_TEXT, "Next")
next_button.click()
return True
except NoSuchElementException:
return False # Bouton non trouvé, ce qui signifie que nous sommes sur la dernière page
def main():
driver = initialize_driver()
open_page(driver, "https://example.com/page1")
try:
while True:
collect_data(driver)
if not click_next_button(driver):
break # Quitter la boucle si le bouton "Next" est absent
time.sleep(2) # Pause pour charger la page suivante
finally:
driver.quit()
main()
Explication du code
initialize_driver()
— initialisation du driver.
open_page()
— ouverture de la première page pour commencer le travail.
collect_data()
— fonction pour collecter des données de la page actuelle.
click_next_button()
— fonction qui trouve et clique sur le bouton « Next »
. Si le bouton est absent, elle renvoie
False
, ce qui signifie la fin du parcours.
Boucle dans main()
— la boucle principale pour parcourir les pages. Elle
termine le travail lorsque le bouton « Next »
ne peut plus être trouvé.
2. Pagination avec numéros de pages
Sur certains sites, il y a des liens numérotés pour les pages (par exemple, « 1 », « 2 », « 3 », etc.). Dans ces cas, tu peux recueillir une liste de liens et y accéder un par un.
Exemple de code
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text)
def go_to_page(driver, page_number):
page_link = driver.find_element(By.LINK_TEXT, str(page_number))
page_link.click()
def main():
driver = initialize_driver()
open_page(driver, "https://example.com/page1")
try:
total_pages = 5 # Indique le nombre total de pages si connu
for page in range(1, total_pages + 1):
collect_data(driver)
if page < total_pages: # Ne pas passer à la page suivante après la dernière
go_to_page(driver, page + 1)
time.sleep(2) # Pause pour charger la page suivante
finally:
driver.quit()
main()
Explication du code
go_to_page()
— fonction qui trouve le lien de la
page souhaitée par son numéro et y accède.
Boucle dans main()
— utilise la variable
total_pages
pour déterminer le nombre de pages.
La boucle passe à la page suivante tant qu'elle n'est pas la dernière.
3. Modifier l'URL pour chaque page
Certains sites ont une structure simple d'URL, où chaque
page est identifiée par un numéro dans l'URL, par exemple,
https://example.com/page/1
,
https://example.com/page/2
, etc. Dans ce cas,
tu peux simplement modifier l'URL et charger la page souhaitée,
évitant ainsi la recherche d'éléments.
Exemple de code
from selenium import webdriver
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
items = driver.find_elements_by_class_name("item_class")
for item in items:
print(item.text)
def main():
driver = initialize_driver()
try:
total_pages = 5 # Indique le nombre total de pages si connu
base_url = "https://example.com/page/"
for page_number in range(1, total_pages + 1):
url = f"{base_url}{page_number}"
open_page(driver, url)
collect_data(driver)
time.sleep(2) # Pause pour charger la page suivante
finally:
driver.quit()
main()
Explication du code
La variable base_url
contient l'URL de base de la page.
La boucle y ajoute le numéro de page et ouvre
chaque page successivement.
Boucle génère l'URL de chaque page et collecte
les données sans cliquer sur des éléments. Cela minimise les risques
d'erreurs.
4. Astuces pour l’optimisation
- Minimise les attentes et clics sur les éléments dynamiques : L'utilisation des liens et URL est plus stable que les clics sur des boutons chargés par JavaScript.
-
Utilise des temporisateurs avec un délai minimal : Lorsque tu passes à une nouvelle page, utilise un petit
délai
time.sleep(2)
pour que les éléments aient le temps de se charger, mais ne prends pas plus de temps que nécessaire. -
Récupère les données après le chargement complet de la page :
Assure-toi que les données sur la page sont complètement chargées
avant de commencer la collecte. Utilise
implicitly_wait
pour détecter les éléments de façon fiable. - Journalisation : Implémente une journalisation pour noter la page actuelle, les erreurs et les passages réussis. Cela simplifie le diagnostic du script lors de son exécution.
GO TO FULL VERSION