CodeGym /Corso Java /Python SELF IT /Approcci principali per navigare tra più pagine

Approcci principali per navigare tra più pagine

Python SELF IT
Livello 38 , Lezione 2
Disponibile

1. Utilizzo del pulsante «Avanti»

Se un sito ha un pulsante o un link «Avanti» per passare alla pagina successiva, puoi configurare un ciclo per cliccare su questo pulsante finché è disponibile.

Esempio di codice

Python

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):
    # Esempio di raccolta dati dalla pagina corrente
    items = driver.find_elements(By.CLASS_NAME, "item_class")
    for item in items:
        print(item.text)  # Qui puoi salvare o elaborare i dati
    
def click_next_button(driver):
    try:
        next_button = driver.find_element(By.LINK_TEXT, "Next")
        next_button.click()
        return True
    except NoSuchElementException:
        return False  # Pulsante non trovato, siamo probabilmente all'ultima pagina

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  # Esci dal ciclo se il pulsante "Next" non è presente
            time.sleep(2)  # Ritardo per il caricamento della pagina successiva
    finally:
        driver.quit()

main()

Spiegazione del codice

initialize_driver() — inizializza il driver.
open_page() — apre la prima pagina per iniziare.
collect_data() — funzione per raccogliere dati dalla pagina corrente.
click_next_button() — funzione che trova e clicca sul pulsante «Next». Se il pulsante non è presente, restituisce False, indicando la fine della navigazione.
Ciclo in main() — ciclo principale per navigare tra le pagine. Si arresta quando il pulsante «Next» non è più trovato.

2. Paginazione utilizzando i numeri di pagina

Alcuni siti hanno link numerati alle pagine (ad esempio, «1», «2», «3» e così via). In questi casi, puoi raccogliere l'elenco dei link e navigare su ciascuno di essi in sequenza.

Esempio di codice

Python

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  # Specificare il numero totale di pagine, se conosciuto
        for page in range(1, total_pages + 1):
            collect_data(driver)
            if page < total_pages:  # Non andare oltre l'ultima pagina
                go_to_page(driver, page + 1)
                time.sleep(2)  # Ritardo per il caricamento della pagina successiva
    finally:
        driver.quit()

main()

Spiegazione del codice

go_to_page() — funzione che trova il link della pagina desiderata per numero e vi accede.
Ciclo in main() — utilizza la variabile total_pages per determinare il numero di pagine. Il ciclo passa alla pagina successiva fino a raggiungere l'ultima.

3. Modifica dell'URL per ogni pagina

Alcuni siti hanno una struttura URL semplice in cui ogni pagina è identificata da un numero nell'URL, ad esempio, https://example.com/page/1, https://example.com/page/2, ecc. In questo caso, puoi semplicemente modificare l'URL e caricare la pagina desiderata evitando di cercare elementi.

Esempio di codice

Python

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  # Specificare il numero totale di pagine, se noto
        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)  # Ritardo per il caricamento della pagina successiva
    finally:
        driver.quit()

main()

Spiegazione del codice

Variabile base_url contiene l'URL base della pagina. Il ciclo completa l'URL con il numero della pagina e apre ciascuna pagina in sequenza.
Il ciclo genera l'URL di ciascuna pagina ed esegue la raccolta dei dati senza cliccare sugli elementi. Questo minimizza la probabilità di errori.

4. Consigli per l'ottimizzazione

  • Minimizza le attese e i clic sugli elementi dinamici: Usare link e URL è più stabile rispetto a cliccare pulsanti caricati tramite JavaScript.
  • Utilizza timer di attesa con ritardi minimi: Quando passi a una nuova pagina, usa un breve ritardo time.sleep(2) per permettere il caricamento, ma non rimanere in attesa più del necessario.
  • Raccogli i dati dopo che la pagina è completamente caricata: Assicurati che tutti i dati sulla pagina siano completamente caricati prima di iniziare la raccolta. Usa implicitly_wait per rilevare in modo affidabile gli elementi.
  • Logging: Implementa un sistema di logging per registrare la pagina corrente, errori e passaggi riusciti. Questo semplifica il debug dello script durante l'esecuzione.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION