CodeGym /Corso Java /Python SELF IT /Creazione di funzioni per trovare e interagire con gli el...

Creazione di funzioni per trovare e interagire con gli elementi di una pagina web

Python SELF IT
Livello 37 , Lezione 2
Disponibile

1. Basi della ricerca degli elementi sulla pagina

Uso dei metodi di ricerca degli elementi

Quando inizi a utilizzare Selenium in progetti reali, una delle prime cose da fare sarà cercare gli elementi sulla pagina. È un po' come cercare il bottone dell'ascensore in un hotel: devi sapere dove si trova per poterlo premere e andare al piano desiderato.

Selenium fornisce diversi metodi per trovare gli elementi. A seconda delle tue preferenze, puoi usare find_element_by_id, find_element_by_name, find_element_by_xpath, find_element_by_css_selector, e così via. Ricordiamo quello che già sai e scriviamo un esempio semplice:

Python

from selenium import webdriver

# Creiamo un'istanza del browser (qui usiamo Chrome)
driver = webdriver.Chrome()

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

# Ricerca di un elemento tramite ID
element_by_id = driver.find_element_by_id('main')

# Ricerca di un elemento tramite nome
element_by_name = driver.find_element_by_name('username')

# Ricerca di un elemento tramite XPath
element_by_xpath = driver.find_element_by_xpath('//div[@class="content"]')

# Ricerca di un elemento tramite selettore CSS
element_by_css = driver.find_element_by_css_selector('div.content')

Differenze tra find_element e find_elements

Quando hai più elementi da catturare (come ad esempio tutti i pulsanti con la classe btn), ti servirà il metodo find_elements. La differenza tra find_element e find_elements sta nel fatto che il primo restituisce un solo elemento, mentre il secondo restituisce una lista di elementi.

Python

# Ricerca di un solo elemento
single_element = driver.find_element_by_class_name('btn')

# Ricerca di più elementi
multiple_elements = driver.find_elements_by_class_name('btn')

# Iterazione sugli elementi trovati
for element in multiple_elements:
    print(element.text)

Come puoi vedere, find_elements è ottimo per lavorare con collezioni di elementi che possono essere presenti più volte nella pagina. Ogni metodo find_element_xxx ha un suo find_elements_xxx, che restituisce una lista di elementi.

2. Interazione interattiva con gli elementi

Interazione con pulsanti, link e campi di input

Ora che hai ricordato come trovare gli elementi, è il momento di ricordare come interagire con loro! È come giocare con un set di LEGO: devi connettere i pezzi giusti per ottenere ciò che vuoi.

L'interazione con gli elementi può essere fatta attraverso i metodi che Selenium mette a disposizione. Diamo un'altra occhiata a come farlo:

Python

# Cliccare su un pulsante
button = driver.find_element_by_id('submit')
button.click()

# Inserire del testo in un campo di input
input_field = driver.find_element_by_name('q')
input_field.send_keys('Python selenium tutorial')

# Ottenere il testo di un elemento
header = driver.find_element_by_tag_name('h1')
print(header.text)

Gestione di eventi e azioni con elementi dinamici

Quando si lavora con elementi dinamici, come pulsanti che appaiono solo dopo una certa azione, è importante considerare ritardi e attese. Selenium fornisce modi per aspettare il caricamento di tali elementi. Uno di questi è l'uso della classe WebDriverWait combinata con expected_conditions.

Python

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

# Attesa del pulsante per un massimo di 10 secondi
button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'submit'))
)

button.click()

Nota. Per evitare di scrivere ogni volta expected_conditions, lo abbiamo abbreviato a EC durante l'import.

Usare le attese rende il tuo script più affidabile e meno soggetto a errori causati da ritardi temporanei o caricamenti lenti della pagina. Nella pratica, questo succede molto spesso - quasi sempre :)

3. Cosa potrebbe andare storto?

Tutto. Tutto potrebbe andare storto. Ti sei appena preparato a interagire con gli elementi, e poi bam, qualcosa non funziona. Parliamo di alcuni errori tipici che potresti incontrare lungo il percorso.

Prima di tutto, c'è NoSuchElementException - questo è un messaggio di errore che vedrai abbastanza spesso, soprattutto se l'elemento che stai cercando non esiste nella pagina. Si verifica quando provi a cercare un elemento che non c'è. Per prevenire queste situazioni, puoi usare il metodo try-except per gestire le eccezioni.

Python

from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element_by_id('non_existent_id')
except NoSuchElementException:
    print("Oops, sembra che l'elemento non sia stato trovato!")

Possono anche verificarsi problemi con elementi dinamici e tempi di caricamento. In questo caso, aspetta il caricamento degli elementi utilizzando WebDriverWait, come abbiamo discusso prima.

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