CodeGym /Corsi /Python SELF IT /Navigare tra più pagine con il minimo utilizzo di element...

Navigare tra più pagine con il minimo utilizzo di elementi dinamici

Python SELF IT
Livello 38 , Lezione 1
Disponibile

1. Preparazione alla navigazione

Prima di iniziare le nostre grandi avventure, dobbiamo prepararci con gli strumenti giusti: Selenium e un po' di furbizia. Supponiamo che tu sappia già come configurare Selenium e il driver del browser, quindi iniziamo!

Impostazione del driver

Python

from selenium import webdriver

# Avvia il driver del browser, ad esempio Chrome
driver = webdriver.Chrome()

# Apriamo la prima pagina della nostra avventura
driver.get("http://example.com/start-page")

Fin qui tutto standard: abbiamo aperto il browser e caricato la pagina iniziale. Ma ecco dove inizia il divertimento: non vogliamo rimanere bloccati su una sola pagina. Vogliamo visitare anche le sue vicine!

2. Paginazione: passeggiare tra le pagine

Il modo più semplice e intuitivo per navigare tra le pagine è la paginazione. Avrai già visto quei numeretti carini in fondo alla pagina, giusto? Sono come segnali stradali: "Prossima fermata: pagina 2".

Estrarre dati dalle pagine

Prima di iniziare a viaggiare, vogliamo raccogliere informazioni dalla pagina attuale. Supponiamo che siano liste di prodotti o titoli di articoli.

Python

def extract_data():
    # Troviamo tutti gli elementi che ci interessano sulla pagina, ad esempio titoli
    titles = driver.find_elements_by_class_name("item-title")
    for title in titles:
        print(title.text)  # Sì, stampiamo solo il testo, ma puoi salvarlo ovunque vuoi

extract_data()

Se hai saltato le lezioni precedenti, questo pezzo di codice cerca tutti i titoli con la classe item-title e li stampa.

Navigare verso la pagina successiva

Ora che abbiamo raccolto i dati, è ora di andare avanti. La paginazione spesso si presenta sotto forma di pulsanti con link per la pagina successiva o precedente. Dobbiamo trovare questi pulsanti e cliccarci sopra.

Python

def go_to_next_page():
    try:
        # Troviamo il pulsante della pagina successiva e clicchiamo su di esso
        next_button = driver.find_element_by_link_text("Next")
        next_button.click()
    except NoSuchElementException:
        # Se il pulsante non c'è, significa che siamo arrivati alla fine
        print("Fine dell'elenco delle pagine.")

Questa funzione cerca un link con il testo «Next». Se lo trova, ci clicca sopra passando alla pagina successiva. Se non lo trova, il nostro bot capisce che è arrivato alla fine di Internet... beh, o almeno di questa sequenza di pagine.

3. Ciclo per navigare tra le pagine

Che cosa ci manca per essere completamente felici? Esatto, un ciclo! Uniamo tutto in un ciclo comodo in modo che il nostro bot possa attraversare tutte le pagine disponibili come un vero pro.

Python

while True:
    extract_data()  # Raccogliamo dati dalla pagina attuale
    go_to_next_page()  # Passiamo a quella successiva
    time.sleep(2)  # Facciamo una pausa per non spaventare il server

Ed ecco che il nostro bot naviga con coraggio attraverso tutte le pagine cliccando sul pulsante «Next». Questo codice continuerà a essere eseguito finché ci saranno pagine da visitare. Ricorda che una piccola pausa tra le richieste è il tuo modo di fare amicizia con il server. Nessuno ama gli spammer, soprattutto gli admin dei siti.

4. Interazione dinamica

Amici, non tutto è così semplice nella vita come in questi esempi con la paginazione. A volte la pagina si comporta come un ninja sfuggente, caricando contenuti dinamicamente durante lo scrolling. Non c'è problema, risolveremo anche questo.

Attesa esplicita

Le attese consentono al tuo codice di aspettare un po' finché l'elemento necessario non diventa disponibile. È particolarmente utile quando il contenuto non viene caricato immediatamente.

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("Elemento non trovato.")

Con questa funzione il tuo bot sarà in sintonia con i contenuti caricati dinamicamente, aspettando che gli elementi diventino disponibili.

Scroll della pagina

Con i contenuti dinamici, presenti in pagine magiche come lo scrolling infinito, potrebbe essere necessario scorrere verso il basso per caricare più elementi.

Python

def scroll_down():
    # Utilizziamo JavaScript per scorrere verso il basso
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

Lo script in JavaScript aiuta a fare uno scrolling morbido verso il basso, permettendo alla pagina di caricare il contenuto. Questo trucco può essere utilizzato in un ciclo per attraversare lo scrolling infinito.

5. Caratteristiche e trucchi

Uscire dagli esempi è un viaggio pieno di sorprese. Immagina il tuo bot, proprio come te, deve essere pronto per diversi scenari.

Se non c'è il pulsante «Next», ma la paginazione con numeri di pagina, utilizza un approccio dinamico, inserendo il numero direttamente nell'URL. E se il tuo sito decide improvvisamente di comportarsi come un ninja e nascondere alcune pagine, configura i tuoi script in modo che possano adattarsi, essendo pronti per le sorprese.

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