1. Basi della ricerca degli elementi
Metodi per la ricerca degli elementi
Prima di tuffarti nel codice, è importante capire come possiamo cercare elementi su una pagina Web usando Selenium. Selenium offre diversi metodi comodi per cercare gli elementi:
-
find_element_by_id()
: Cerca un elemento tramite il suo identificatore unico (id). -
find_element_by_name()
: Permette di trovare un elemento tramite il suo attributoname
. -
find_element_by_class_name()
: Cerca elementi che hanno una classe specifica (class). -
find_element_by_tag_name()
: Usa il nome del tag per trovare elementi, per esempio,div
,p
,a
.
Iniziamo con un esempio semplice: cercare un elemento tramite
id
. Immagina che abbiamo perso il pulsante con
la scritta "Pulsante magico" e dobbiamo trovarlo:
from selenium import webdriver
# Configurazione del driver e apertura del browser
driver = webdriver.Chrome()
driver.get('https://example.com')
# Ricerca di un elemento tramite il suo id
magic_button = driver.find_element_by_id('magic_button_id')
# Lavorare con l'elemento trovato (per esempio, estrarre il testo)
print(magic_button.text)
# Concludere la sessione
driver.quit()
Lavorare con gli elementi trovati
Dopo aver trovato un elemento, è il momento di decidere cosa farne.
Dai spazio alla fantasia e usa i metodi di Selenium come
text
per ottenere il contenuto testuale
dell'elemento o
get_attribute('attribute_name')
, per estrarre
il valore di qualsiasi attributo dell'elemento.
Supponiamo che il nostro elemento sia un link, e vogliamo sapere dove porta. Ecco come possiamo farlo:
# Ricerca di un elemento con un link
link_element = driver.find_element_by_class_name('link_class')
# Estrazione dell'URL dall'attributo href
link_url = link_element.get_attribute('href')
print(f'Questo link porta a: {link_url}')
2. Metodo find_element_by_id()
Il metodo find_element_by_id()
è uno dei modi
più veloci ed affidabili per cercare un elemento su una pagina Web.
Permette di trovare elementi tramite il loro attributo unico
id
. In HTML, l'attributo id
è
un identificatore unico, quindi possiamo essere sicuri
che il metodo restituirà un unico elemento specifico.
Esempio di utilizzo:
element = driver.find_element_by_id("submit-button")
In questo esempio, Selenium cerca un elemento con
id="submit-button"
e lo salva nella variabile
element
. Questo approccio è comodo per cercare pulsanti,
moduli, campi di input e altri elementi unici, che raramente
si ripetono nella pagina.
Quando usarlo?
L'utilizzo di
find_element_by_id()
è consigliato sempre,
quando un elemento ha un identificatore unico
id
, perché questo metodo garantisce un accesso veloce e
preciso all'elemento.
2. Metodo find_element_by_name()
Il metodo find_element_by_name()
cerca elementi tramite
l'attributo name
. Viene spesso utilizzato per moduli e
campi di input, soprattutto quando gli elementi possono avere la stessa
classe o id
, ma un name
diverso. A
differenza di id
, l'attributo name
non è
necessariamente unico, e a volte nella pagina possono esserci diversi
elementi con lo stesso name
.
Esempio di utilizzo:
element = driver.find_element_by_name("username")
Questo codice cerca un elemento con name="username"
.
Di solito, questo è il campo per l'inserimento del nome utente nei moduli
di login.
Quando usarlo?
Questo metodo è utile se un elemento nella pagina non ha
un id
unico, ma ha un attributo name
. È
particolarmente efficace per i moduli di input, dove gli elementi hanno
spesso l'identificazione tramite name
.
3. Metodo find_element_by_class_name()
Il metodo find_element_by_class_name()
cerca un elemento
tramite la sua classe (class
). È utile per lavorare con il
CSS e permette di trovare elementi con lo stesso stile. Bisogna
considerare che class
può essere assegnato a più elementi,
quindi, se occorre trovare un solo elemento, è importante precisare una
classe unica o utilizzare un altro metodo.
Esempio di utilizzo:
element = driver.find_element_by_class_name("main-header")
In questo esempio, Selenium cerca il primo elemento con la classe
main-header
.
Quando usarlo?
find_element_by_class_name()
viene spesso utilizzato
per cercare intestazioni, pulsanti e altri elementi stilizzati. Questo
metodo è particolarmente utile se gli elementi non hanno un id
o name
unico, e anche nei casi in cui è necessario cercare
elementi in base alle caratteristiche stilistiche.
4. Metodo find_element_by_tag_name()
Il metodo find_element_by_tag_name()
cerca elementi
tramite il nome del tag, per esempio, div
,
p
, a
, input
. È
utile per ottenere tutti gli elementi di un tipo specifico, soprattutto
se la struttura della pagina permette di orientarsi facilmente tramite
i tag.
Esempio di utilizzo:
element = driver.find_element_by_tag_name("h1")
Qui Selenium cerca il primo elemento con il tag h1
, che
di solito viene utilizzato per le intestazioni nella pagina.
Quando usarlo?
Il metodo find_element_by_tag_name()
è adatto per cercare
intestazioni, immagini, paragrafi e altri elementi che nella pagina sono
rappresentati da un tipo specifico di tag. Tuttavia, dato che nella
pagina possono esserci molti tag dello stesso tipo, questo metodo non
sempre individua esattamente un elemento specifico.
5. Caratteristiche e errori
Prima di proseguire, facciamo una pausa e rendiamo omaggio alla
varietà dell'HTML. A volte elementi come pulsanti o immagini potrebbero
non avere id
o classi uniche. In questi casi vengono in
aiuto metodi di ricerca più avanzati come XPath e i selettori CSS, di cui
parleremo nella prossima lezione. Ma se ti ritrovi già ora con elementi
di questo tipo, niente panico. È solo una parte del divertimento nel mondo
dell'automazione Web.
Fragilità dei selettori
Quando lavori con attributi come id
e
class
, tieni presente che possono cambiare. La scelta
di un elemento tramite il suo id
, che improvvisamente è
cambiato, può portare a un errore. Questo è particolarmente vero per le
pagine generate dinamicamente, dove gli identificatori possono essere
casuali. Soluzione? Utilizza attributi più stabili o approcci combinati.
6. Applicazione pratica
Ora sappiamo come cercare elementi tramite id
,
classi e nomi. L'utilità di questa conoscenza è enorme, soprattutto
quando si tratta di automatizzare l'interazione con le pagine Web.
Gli elementi trovati con successo possono essere utilizzati per
compilare moduli, premere pulsanti o estrarre informazioni: azioni
che possono accelerare notevolmente il tuo lavoro e liberarti da
compiti monotoni.
Immagina una compagnia dove ogni dipendente spreca 10 minuti al giorno compilando lo stesso modulo su un sito. Ed è qui che entra in scena Selenium: in pochi minuti gestirà tutta la routine, mentre tu ti godi il tuo caffè mattutino.
Per chi è già interessato a casi reali, l'automazione con Selenium viene utilizzata per testare applicazioni Web, monitorare cambiamenti sui siti e persino per recuperare la password dimenticata del tuo social preferito, se gli algoritmi decidono che non sei tu in quelle foto con il panda.
GO TO FULL VERSION