1. Fondamenti Tecnici
Compilazione e invio dei form
Lavorare con i form è spesso necessario per automatizzare la registrazione utenti, la compilazione di questionari, la raccolta di dati e molto altro. Quando devi compilare centinaia di form, farlo a mano è come provare a mangiare un'anguria con una cannuccia. Ma con i nostri superpoteri di Selenium lo faremo in pochi secondi.
Iniziamo col capire come possiamo compilare i campi di testo ed inviare i form. Usando l'esempio di un tipico form di accesso a un sito, studieremo i passi principali:
from selenium import webdriver
# Configurazione del driver (esempio ChromeDriver)
driver = webdriver.Chrome()
try:
# Apertura della pagina web
driver.get("https://example.com/login")
# Ricerca del campo di input per il nome utente e inserimento del testo
username_input = driver.find_element_by_name("username")
username_input.send_keys("il_mio_login")
# Ricerca del campo di input per la password e inserimento del testo
password_input = driver.find_element_by_name("password")
password_input.send_keys("la_mia_password")
# Ricerca del bottone per inviare il form e cliccarci sopra
submit_button = driver.find_element_by_name("submit")
submit_button.click()
finally:
# Chiusura del driver
driver.quit()
Validazione e gestione degli errori
Non c'è nulla che rovini la giornata di un programmatore più degli errori che spuntano nel momento sbagliato. Perciò li gestiamo in anticipo. Usiamo try/except per intercettare gli errori e logghiamo tutto per capire cosa è andato storto.
try:
username_input = driver.find_element_by_name("username")
username_input.send_keys("il_mio_login")
except Exception as e:
print(f"Errore durante il riempimento del nome utente: {e}")
logging.error("Errore durante il riempimento del nome utente", exc_info=True)
2. Checkboxes
Ora che abbiamo imparato a cliccare sui bottoni, proviamo a selezionare più opzioni da una lista. Per selezionare o deselezionare una checkbox, possiamo usare il metodo click(). Per controllare se una checkbox è selezionata, si utilizza l'attributo is_selected().
checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
checkbox.click()
3. Radio Buttons
I Radio Buttons permettono di scegliere solo un'opzione tra diverse. Si lavora con loro come si fa con le checkboxes: si seleziona un'opzione con il metodo click() e si controlla lo stato con is_selected().
radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
radio_button.click()
4. Dropdowns
I menu a tendina (dropdowns) contengono diverse opzioni tra cui scegliere. In Selenium c'è la classe Select, che offre metodi per lavorare con questi menu.
from selenium.webdriver.support.ui import Select
dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("Option 1")
Si possono anche selezionare opzioni usando select_by_index() o select_by_value().
5. Text Areas
Le Text Areas sono simili ai campi di testo, ma solitamente usate per un grande volume di testo. Il lavoro con loro è identico al lavoro con i campi di testo.
text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("Questo è un testo di esempio per il text area.")
6. Date Picker
I campi calendario permettono agli utenti di selezionare date. Se si tratta di un normale campo di testo che supporta il formato data, puoi usare send_keys() per inserire un valore nel formato richiesto.
date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25") # Il formato della data può variare a seconda del sito
Tuttavia, alcuni campi calendario richiedono azioni aggiuntive, come aprire un calendario a comparsa e selezionare una data.
7. File Upload
Questi campi consentono di caricare file sul server. Si interagisce con loro anche tramite il metodo send_keys(), specificando il percorso del file sul computer locale.
file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
8. Hidden Fields
I campi nascosti non vengono visualizzati sulla pagina, ma possono essere utilizzati per conservare informazioni necessarie alla compilazione del form. Si può interagire con essi solo se si ha accesso al loro valore (ad esempio, per verificare o modificare il valore).
hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Valore del campo nascosto:", value)
9. Verifica del successo delle azioni
Ottenere dati sull'esecuzione delle azioni è il tuo barometro di successo. Dopo aver inviato il form, sicuramente vuoi assicurarti che la richiesta sia stata accettata con successo, giusto? Ecco come farlo:
># Controllo del successo nell'autenticazione sul sito
if "Benvenuto" in driver.page_source:
print("Autenticazione riuscita!")
else:
print("Si è verificato un errore durante l'autenticazione.")
10. Problemi e Soluzioni
Problemi
- Instabilità: Le pagine web cambiano spesso. Cambiare la struttura della pagina può causare malfunzionamenti negli script, quindi è necessaria una verifica regolare del codice per mantenerlo aggiornato.
- Dipendenza dalla velocità di rete: I tempi di caricamento delle pagine e degli elementi possono variare. Usa i timeout espliciti (explicit wait) per gestire i ritardi.
Soluzioni
- Logging: Ti conviene loggare ogni azione per capire meglio i problemi. Usare la libreria
loggingsemplifica molto la gestione dei log. - Modularizzazione del codice: Suddividi azioni complesse in funzioni e moduli per facilitare le modifiche e il testing.
GO TO FULL VERSION