Se vuoi capire come funziona il metodo element by xpath con Selenium sei nel posto giusto! È quello che scoprirai leggendo questo articolo!
Selenium torna molto comodo per il web scraping, specialmente se realizzato in Python di cui ho parlato in diversi articoli, ma fra le tante cose che puoi avere la necessità di realizzare può esserci il metodo “element by xpath”.
Prima di parlarne, permettimi di presentarmi: mi chiamo Lorenzo Neri e sono un informatico: mi occupo di realizzare contenuti che aiutino persone come te a padroneggiare l’arte del nuovo millennio, l’informatica!
Devi sapere che questo articolo così come tanti altri è nato dalla mia volontà di condividere con te e tanti altri le soluzioni che ho trovato a diversi problemi nelle mie attività lavorative.
Come? Documentando.
E quindi scrivendo i vari articoli che possano aiutare persone come te che mi stai leggendo a risolvere gli stessi problemi che ho incontrato io che trovi sul mio blog.
Ciò detto, vediamo grazie al potere di Selenium come funziona il metodo “element by xpath”.
Come funziona element by xpath
Il metodo di per se funziona in modo abbastanza lineare: dato un parametro specificato dall’utente, in questo caso tu stesso, il metodo restituisce le entità HTML che “fittano” con il parametro specificato.
Che cosa intendo dire con “fittano”? Permettimi di spiegartelo con un esempio.
Dato il seguente HTML:
<html>
<body>
<form id="formLogin">
<input name="nomeUtente" type="text" />
<input name="password" type="password" />
<input name="bottone" type="submit" value="Accedi" />
<input name="bottone" type="button" value="Ripristina" />
</form>
</body>
</html>
Immagina di voler prendere l’entità HTML input del nome utente.
Come fare?
Pressappoco così:
nome_utente = driver.find_element_by_xpath("//input[@name='nomeUtente']")
Sostanzialmente, come dicevo prima il metodo prevede un parametro. Questo parametro può contenere diverse “linee guida” utili a specificare QUALI elementi HTML stiamo cercando.
Queste “linee guida” nient’altro sono che i TAG HTML stessi: nel nostro caso il tag “input”.
Non solo: anche gli attributi: nel nostro caso l’attributo “name”.
Ma ancora una volta non solo. Possiamo specificare anche il VALORE degli attributi: nel nostro caso, di nuovo, “nomeUtente” è ciò che ci interessa.
Per completezza è giusto dirti che no, non sei limitato a questo: puoi sfruttare anche altre variazioni e dettagli di quanto abbiamo visto.
E come? Seguendo ciò che sono le direttive “Xpath”: a tal proposito puoi approfondire qui.
E se invece, volessimo prendere più di un solo elemento HTML?
Aggiungiamo una “s”: come Selenium ci permette di prendere più di un’entità HTML
Riprendendo l’esempio di prima, avrai notato che ci sono due tag HTML di tipo “input” che hanno come “name” il valore “bottone”.
Ci sarai mai modo di prenderli entrambi? Ma ovvio!
Basta aggiungere una “s” al metodo che abbiamo visto prima:
bottoni = driver.find_elements_by_xpath("//input[@name='bottone']")
Il metodo “elements_by_xpath” funziona come il precedente in termini di sintassi, ma restituisce un array: un array che sarà popolato oppure sarà vuoto a seconda di quante entità HTML corrispondono all’espressione xpath impostata.