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
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.
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.
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.
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.
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.
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.
GO TO FULL VERSION