CodeGym /Corsi /Python SELF IT /Configurazione di uno script per automatizzare una sequen...

Configurazione di uno script per automatizzare una sequenza di azioni su un sito

Python SELF IT
Livello 37 , Lezione 4
Disponibile

1. Scenario delle azioni e la sua sequenza

Quando iniziamo a pianificare uno scenario di automazione, è importante capire che, come nelle favole, bisogna andare dal semplice al complesso. Immagina che il tuo script sia un eroe che intraprende un viaggio attraverso le pagine di un sito web. Ogni passo è pensato e configurato chiaramente per non perdersi lungo la strada.

Creazione di uno scenario passo-passo per l'automazione

Bisogna iniziare con una pianificazione. Cosa vuoi ottenere? Caricare una pagina, compilare un modulo, cliccare su un bottone? Come si dice: "Chi non pianifica, pianifica un fallimento." Noi non vogliamo fallire, quindi scriviamo i passi previsti.

Python

from selenium import webdriver
from selenium.webdriver.common.by import By

# Creiamo un'istanza del driver. Usa il driver adatto al tuo browser.
driver = webdriver.Chrome()

# Apriamo la pagina
driver.get('https://example.com/login')

# Compiliamo il nome utente
driver.find_element(By.NAME, 'username').send_keys('mio_nome_utente')

# Compiliamo la password
driver.find_element(By.NAME, 'password').send_keys('mia_password_sicura')

# Clicchiamo sul bottone di login
driver.find_element(By.ID, 'login-button').click()

E così diamo ritmo alla nostra danza. Ogni passo dello scenario viene eseguito in sequenza, permettendo al tuo script di muoversi facilmente attraverso il sito.

Log degli step eseguiti

Come qualsiasi eroe che si rispetti, il nostro script deve lasciare tracce per farci sapere dove è stato e cosa ha fatto. Il logging è come il diario del tuo script. Aiuta a tracciare l'esecuzione dei passi e a individuare errori se qualcosa non va.

Python

import logging

# Configuriamo il logging
logging.basicConfig(level=logging.INFO)

# Esempio di logging di un'azione
logging.info("Apriamo la pagina di login")
driver.get('https://example.com/login')

Il logging non solo aiuta nel debugging, ma offre anche tranquillità, sapendo che il tuo script esegue ogni passo come previsto. Se qualcosa dovesse andare storto, potrai tornare indietro e vedere a che punto qualcosa è andato storto.

2. Organizzazione del codice per leggibilità e modifiche

Quando lo scenario diventa più complesso, è importante mantenere il codice ordinato. Immagina una festa con un sacco di ospiti e piatti: se tutto non viene messo al suo posto, diventa caos. Nel nostro caso, caos nel codice.

Configurazione della struttura del codice

Per apportare modifiche al codice con il minimo sforzo, deve essere ben organizzato. Come un organizzatore di calzini, bisogna ordinare tutto. Usa le funzioni per isolare le azioni ripetitive in blocchi separati.

Python

def login_to_site(driver, username, password):
    logging.info("Inseriamo il nome utente")
    driver.find_element(By.NAME, 'username').send_keys(username)
    
    logging.info("Inseriamo la password")
    driver.find_element(By.NAME, 'password').send_keys(password)
    
    logging.info("Clicchiamo sul bottone di login")
    driver.find_element(By.ID, 'login-button').click()

# Usiamo la funzione per il login
login_to_site(driver, 'mio_nome_utente', 'mia_password_sicura')

Usare funzioni rende il codice più organizzato e permette di apportare facilmente modifiche, ad esempio se cambia ID del bottone di login, dovrai solo cambiarlo nella funzione, non in tutto il codice.

3. Esempio: Automazione del processo di acquisto su un sito

Immaginiamo di dover configurare l'automazione del processo di acquisto su un sito, includendo i seguenti passi:

  1. Apertura del sito e accesso all'account.
  2. Passaggio al catalogo prodotti e aggiunta di un prodotto al carrello.
  3. Passaggio al carrello e completamento dell'acquisto.
Python

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Inizializzazione del driver con configurazioni
def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)  # Attesa implicita
    return driver

# Funzione per accedere all'account
def login(driver, username, password):
    driver.get("https://example.com")
    driver.find_element_by_id("username").send_keys(username)
    driver.find_element_by_id("password").send_keys(password)
    driver.find_element_by_id("login_button").click()

# Funzione per passare al catalogo prodotti e aggiungere un prodotto al carrello
def add_product_to_cart(driver):
    driver.get("https://example.com/catalog")
    product = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "product_item"))
    )
    product.click()

    add_to_cart_button = driver.find_element_by_id("add_to_cart")
    add_to_cart_button.click()

# Funzione per passare al carrello e completare l'acquisto
def checkout(driver):
    driver.get("https://example.com/cart")
    checkout_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "checkout"))
    )
    checkout_button.click()

# Funzione per terminare l'uso del driver
def close_driver(driver):
    driver.quit()

# Script principale per eseguire la sequenza di azioni
def main():
    # Configurazione dati
    username = "mio_nome_utente"
    password = "mia_password"
    
    # Inizializzazione del driver
    driver = initialize_driver()
    
    try:
        # Accesso al sito
        login(driver, username, password)
        
        # Passaggio al catalogo e aggiunta del prodotto al carrello
        add_product_to_cart(driver)
        
        # Passaggio al carrello e completamento dell'acquisto
        checkout(driver)
    
    finally:
        # Chiusura del driver
        close_driver(driver)

# Esecuzione dello script principale
main()

Spiegazione delle funzioni

  1. initialize_driver() — funzione per inizializzare il web-driver. Imposta un'attesa implicita per tutti gli elementi e restituisce l'oggetto driver.
  2. login() — funzione per fare il login sul sito. Accetta parametri username e password, usati per compilare il modulo di login e cliccare sul bottone.
  3. add_product_to_cart() — funzione per passare al catalogo, selezionare un prodotto e aggiungerlo al carrello.
  4. checkout() — funzione per passare al carrello e completare l'acquisto.
  5. close_driver() — funzione per terminare l'uso del driver.
  6. main() — funzione principale che gestisce la sequenza delle azioni. Qui avviene la chiamata di tutte le fasi e l'impostazione dei dati di login.

Vantaggi di un approccio simile

  1. Leggibilità — ogni fase è organizzata in una funzione separata, rendendo il codice più comprensibile.
  2. Riutilizzo — le singole funzioni possono essere usate indipendentemente dallo script principale, ad esempio per eseguire azioni specifiche sul sito.
  3. Semplicità di test — ogni fase può essere testata separatamente per assicurarsi che tutto funzioni correttamente.
  4. Flessibilità — se necessario, è possibile aggiungere altre funzioni o cambiare l'ordine delle azioni in main().
1
Sondaggio/quiz
Ottimizzazione di script Selenium, livello 37, lezione 4
Non disponibile
Ottimizzazione di script Selenium
Ottimizzazione di script Selenium
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION