CodeGym /Corsi /Python SELF IT /Automazione del lavoro con form e bottoni su una pagina w...

Automazione del lavoro con form e bottoni su una pagina web per la raccolta di dati

Python SELF IT
Livello 37 , Lezione 3
Disponibile

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:

Python

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.

Python

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().

Python

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().

Python

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.

Python

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.

Python

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.

Python

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.

Python

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).

Python

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:

Python

># 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 logging semplifica molto la gestione dei log.
  • Modularizzazione del codice: Suddividi azioni complesse in funzioni e moduli per facilitare le modifiche e il testing.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION