Introduzione al selenio in Python 3

Introduction Selenium Python 3



Selenium è un framework utilizzato per testare le applicazioni web. Selenium automatizza un browser, come Chrome o Firefox, per eseguire test sul sito Web desiderato. Il selenio è anche uno strumento di scraping web molto potente. Selenium supporta JavaScript e tutte le moderne funzionalità del browser. Questo strumento è molto efficace per estrarre informazioni dai siti web.

Questo articolo ti mostrerà come configurare Selenium sulla tua distribuzione Linux (ovvero Ubuntu), nonché come eseguire l'automazione web di base e lo scraping web con la libreria Selenium Python 3.







Prerequisiti

Per provare i comandi e gli esempi utilizzati in questo articolo, è necessario disporre di quanto segue:



1) Una distribuzione Linux (preferibilmente Ubuntu) installata sul tuo computer.
2) Python 3 installato sul tuo computer.
3) PIP 3 installato sul tuo computer.
4) Il browser web Google Chrome o Firefox installato sul tuo computer.



Puoi trovare molti articoli su questi argomenti su LinuxHint.com . Assicurati di controllare questi articoli se hai bisogno di ulteriore assistenza.





Preparazione dell'ambiente virtuale Python 3 per il progetto

L'ambiente virtuale Python viene utilizzato per creare una directory di progetto Python isolata. I moduli Python che installi utilizzando PIP verranno installati solo nella directory del progetto, anziché globalmente.

il pitone virtualenv modulo viene utilizzato per gestire ambienti virtuali Python.



Puoi installare Python virtualenv modulo globalmente utilizzando PIP 3, come segue:

$ sudo pip3 install virtualenv

PIP3 scaricherà e installerà globalmente tutti i moduli richiesti.

A questo punto, il Python virtualenv il modulo dovrebbe essere installato globalmente.

Crea la directory del progetto pitone-selenio-basico/ nella directory di lavoro corrente, come segue:

$ mkdir -pv python-selenium-basic/drivers

Passa alla directory del tuo progetto appena creato pitone-selenio-basico/ , come segue:

$cdpitone-selenio-basico/

Crea un ambiente virtuale Python nella directory del tuo progetto con il seguente comando:

$ virtualenv.env

L'ambiente virtuale Python dovrebbe ora essere creato nella directory del tuo progetto.'

Attiva l'ambiente virtuale Python nella directory del tuo progetto tramite il seguente comando:

$ fonte .env/bin/attiva

Come puoi vedere, l'ambiente virtuale Python è attivato per questa directory di progetto.

Installazione della libreria Selenium Python

La libreria Selenium Python è disponibile nel repository ufficiale Python PyPI.

È possibile installare questa libreria utilizzando PIP 3, come segue:

$ pip3 installa selenio

La libreria Selenium Python dovrebbe ora essere installata.

Ora che la libreria Selenium Python è installata, la prossima cosa che devi fare è installare un driver web per il tuo browser web preferito. In questo articolo, ti mostrerò come installare i driver web Firefox e Chrome per Selenium.

Installazione del driver Firefox Gecko

Il driver Firefox Gecko consente di controllare o automatizzare il browser Web Firefox utilizzando Selenium.

Per scaricare il driver Firefox Gecko, visitare il GitHub rilascia la pagina di mozilla/geckodriver da un browser web.

Come puoi vedere, v0.26.0 è l'ultima versione di Firefox Gecko Driver al momento della stesura di questo articolo.

Per scaricare il driver Firefox Gecko, scorrere un po' verso il basso e fare clic sull'archivio tar.gz di Linux geckodriver, a seconda dell'architettura del sistema operativo.

Se stai utilizzando un sistema operativo a 32 bit, fai clic su geckodriver-v0.26.0-linux32.tar.gz collegamento.

Se stai utilizzando un sistema operativo a 64 bit, fai clic su geckodriver-v0.26.0-linuxx64.tar.gz collegamento.

Nel mio caso, scaricherò la versione a 64 bit del driver Firefox Gecko.

Il tuo browser dovrebbe chiederti di salvare l'archivio. Selezionare Salvare il file e quindi fare clic su ok .

L'archivio di Firefox Gecko Driver dovrebbe essere scaricato in ~/Download directory.

Estrarre il geckodriver-v0.26.0-linux64.tar.gz archivio dal ~/Download directory per il autisti/ directory del tuo progetto inserendo il seguente comando:

$catrame -xzf~/Download/geckodriver-v0.26.0-linux64.tar.gz-Cautisti/

Una volta estratto l'archivio di Firefox Gecko Driver, un nuovo autista di geco file binario dovrebbe essere creato nel autisti/ directory del tuo progetto, come puoi vedere nello screenshot qui sotto.

Test del driver Gecko per Firefox di selenio

In questa sezione, ti mostrerò come configurare il tuo primissimo script Selenium Python per verificare se il driver Firefox Gecko funziona.

Per prima cosa, apri la directory del progetto pitone-selenio-basico/ con il tuo IDE o editor preferito. In questo articolo, userò Visual Studio Code.

Crea il nuovo script Python ex01.py e digitare le seguenti righe nello script.

a partire dalselenioimportarewebdriver
a partire dalselenio.webdriver.Comune.chiavi importarechiavi
a partire dal tempo importaredormire
browser=web driver.Firefox(percorso_eseguibile='./driver/gecodriver')
browser.ottenere('http://www.google.com')
dormire(5)
browser.uscire()

Una volta che hai finito, salva il ex01.py Script Python.

Spiegherò il codice in una sezione successiva di questo articolo.

La seguente riga configura Selenium per utilizzare il driver Firefox Gecko dal autisti/ directory del tuo progetto.

Per verificare se Firefox Gecko Driver funziona con Selenium, eseguire quanto segue ex01.py Script Python:

$ python3 ex01.pi

Il browser web Firefox dovrebbe visitare automaticamente Google.com e chiudersi dopo 5 secondi. Se ciò si verifica, il driver Selenium Firefox Gecko funziona correttamente.

Installazione del driver Web Chrome

Il Chrome Web Driver ti consente di controllare o automatizzare il browser web Google Chrome utilizzando Selenium.

Devi scaricare la stessa versione di Chrome Web Driver di quella del tuo browser web Google Chrome.

Per trovare il numero di versione del tuo browser web Google Chrome, visita chrome://settings/help in Google Chrome. Il numero di versione dovrebbe essere nel Informazioni su Chrome sezione, come puoi vedere nello screenshot qui sotto.

Nel mio caso, il numero di versione è 83.0.4103.116 . Le prime tre parti del numero di versione ( 83.0.4103 , nel mio caso) deve corrispondere alle prime tre parti del numero di versione di Chrome Web Driver.

Per scaricare Chrome Web Driver, visitare il pagina di download ufficiale del driver Chrome .

Nel Uscite attuali , sarà disponibile il Chrome Web Driver per le versioni più recenti del browser Web Google Chrome, come puoi vedere nello screenshot qui sotto.

Se la versione di Google Chrome che stai utilizzando non è nel Uscite attuali sezione, scorri un po' verso il basso e dovresti trovare la versione desiderata.

Dopo aver fatto clic sulla versione corretta di Chrome Web Driver, dovrebbe essere visualizzata la pagina seguente. Clicca sul chromedriver_linux64.zip collegamento, come indicato nello screenshot qui sotto.

L'archivio di Chrome Web Driver dovrebbe ora essere scaricato.

L'archivio di Chrome Web Driver dovrebbe ora essere scaricato in ~/Download directory.

Puoi estrarre il chromedriver-linux64.zip archivio dal ~/Download directory per il autisti/ directory del tuo progetto con il seguente comando:

$ unzip~/Download/chromedriver_linux64.cerniera lampo-d driver/

Una volta estratto l'archivio di Chrome Web Driver, un nuovo chromedriver file binario dovrebbe essere creato nel autisti/ directory del tuo progetto, come puoi vedere nello screenshot qui sotto.

Test del driver web Selenium Chrome

In questa sezione, ti mostrerò come configurare il tuo primo script Selenium Python per verificare se Chrome Web Driver funziona.

Per prima cosa, crea il nuovo script Python ex02.py e digitare le seguenti righe di codici nello script.

a partire dalselenioimportarewebdriver
a partire dalselenio.webdriver.Comune.chiavi importarechiavi
a partire dal tempo importaredormire
browser=web driver.Cromo(percorso_eseguibile='./driver/chromedriver')
browser.ottenere('http://www.google.com')
dormire(5)
browser.uscire()

Una volta che hai finito, salva il ex02.py Script Python.

Spiegherò il codice in una sezione successiva di questo articolo.

La riga seguente configura Selenium per utilizzare il driver Web Chrome dal autisti/ directory del tuo progetto.

Per verificare se Chrome Web Driver funziona con Selenium, esegui il ex02.py Script Python, come segue:

$ python3 ex01.pi

Il browser web Google Chrome dovrebbe visitare automaticamente Google.com e chiudersi dopo 5 secondi. Se ciò si verifica, il driver Selenium Firefox Gecko funziona correttamente.

Nozioni di base sul web scraping con selenio

Userò il browser web Firefox d'ora in poi. Puoi anche utilizzare Chrome, se lo desideri.

Uno script Selenium Python di base dovrebbe assomigliare allo script mostrato nello screenshot qui sotto.

Per prima cosa, importa il selenio webdriver dal selenio modulo.

Quindi, importa il chiavi a partire dal selenium.webdriver.common.keys . Questo ti aiuterà a inviare le pressioni dei tasti della tastiera al browser che stai automatizzando da Selenium.

La riga seguente crea a browser oggetto per il browser Web Firefox utilizzando il driver Firefox Gecko (Webdriver). Puoi controllare le azioni del browser Firefox utilizzando questo oggetto.

Per caricare un sito Web o un URL (caricherò il sito Web https://www.duckduckgo.com ), chiama il ottenere() metodo del browser oggetto sul tuo browser Firefox.

Usando Selenium, puoi scrivere i tuoi test, eseguire il web scrapping e, infine, chiudere il browser usando il uscire() metodo del browser oggetto.

Sopra è il layout di base di uno script Selenium Python. Scriverai queste righe in tutti i tuoi script Selenium Python.

Esempio 1: stampa del titolo di una pagina Web

Questo sarà l'esempio più semplice discusso usando il selenio. In questo esempio, stamperemo il titolo della pagina web che visiteremo.

Crea il nuovo file ex04.py e digita le seguenti righe di codici al suo interno.

a partire dalselenioimportarewebdriver
a partire dalselenio.webdriver.Comune.chiavi importarechiavi

browser=web driver.Firefox(percorso_eseguibile='./driver/gecodriver')

browser.ottenere('https://www.duckduckgo.com')
Stampa('Titolo: %s'% browser.titolo)
browser.uscire()

Al termine, salva il file.

qui, il browser.titolo viene utilizzato per accedere al titolo della pagina web visitata e al Stampa() verrà utilizzata la funzione per stampare il titolo nella console.

Dopo aver eseguito il ex04.py script, dovrebbe:

1) Apri Firefox
2) Carica la tua pagina web desiderata
3) Recupera il titolo della pagina
4) Stampa il titolo sulla console
5) E infine, chiudi il browser

Come puoi vedere, il ex04.py script ha stampato bene il titolo della pagina web nella console.

$ python3 ex04.pi

Esempio 2: stampa dei titoli di più pagine web

Come nell'esempio precedente, puoi utilizzare lo stesso metodo per stampare il titolo di più pagine Web utilizzando il ciclo Python.

Per capire come funziona, crea il nuovo script Python ex05.py e digita le seguenti righe di codice nello script:

a partire dalselenioimportarewebdriver
a partire dalselenio.webdriver.Comune.chiavi importarechiavi

browser=web driver.Firefox(percorso_eseguibile='./driver/gecodriver')


URL= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
perURLinURL:
browser.ottenere(URL)
Stampa('Titolo: %s'% browser.titolo)
browser.uscire()

Una volta terminato, salva lo script Python ex05.py .

qui, il URL list mantiene l'URL di ogni pagina web.

A per loop viene utilizzato per scorrere il URL Elementi della lista.

Ad ogni iterazione, Selenium dice al browser di visitare il URL e ottenere il titolo della pagina web. Una volta che Selenium ha estratto il titolo della pagina web, questa viene stampata nella console.

Esegui lo script Python ex05.py , e dovresti vedere il titolo di ogni pagina web nel URL elenco.

$ python3 ex05.pi

Questo è un esempio di come Selenium può eseguire la stessa attività con più pagine Web o siti Web.

Esempio 3: estrazione di dati da una pagina Web

In questo esempio, ti mostrerò le basi dell'estrazione di dati da pagine Web utilizzando Selenium. Questo è anche noto come web scraping.

Per prima cosa, visita il Random.org collegamento da Firefox. La pagina dovrebbe generare una stringa casuale, come puoi vedere nello screenshot qui sotto.

Per estrarre i dati della stringa casuale utilizzando Selenium, è necessario conoscere anche la rappresentazione HTML dei dati.

Per vedere come sono rappresentati i dati della stringa casuale in HTML, selezionare i dati della stringa casuale e premere il tasto destro del mouse (RMB) e fare clic su Ispeziona elemento (Q) , come indicato nello screenshot qui sotto.

La rappresentazione HTML dei dati dovrebbe essere visualizzata nel Ispettore scheda, come puoi vedere nello screenshot qui sotto.

Puoi anche fare clic su Icona di ispezione ( ) per ispezionare i dati dalla pagina.

Fare clic sull'icona di ispezione ( ) e passare con il mouse sui dati della stringa casuale che si desidera estrarre. La rappresentazione HTML dei dati dovrebbe essere visualizzata come prima.

Come puoi vedere, i dati della stringa casuale sono racchiusi in un HTML per tag e contiene la classe dati .

Ora che conosciamo la rappresentazione HTML dei dati che vogliamo estrarre, creeremo uno script Python per estrarre i dati utilizzando Selenium.

Crea il nuovo script Python ex06.py e digita le seguenti righe di codici nello script

a partire dalselenioimportarewebdriver
a partire dalselenio.webdriver.Comune.chiavi importarechiavi

browser=web driver.Firefox(percorso_eseguibile='./driver/gecodriver')

browser.ottenere('https://www.random.org/strings/?num=1&len=20&digits
=on&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=nuovo'
)

dataElement=browser.find_element_by_css_selector('pre.dati')
Stampa(dataElement.testo)
browser.uscire()

Una volta che hai finito, salva il ex06.py Script Python.

qui, il browser.get() Il metodo carica la pagina Web nel browser Firefox.

Il browser.find_element_by_css_selector() Il metodo cerca nel codice HTML della pagina un elemento specifico e lo restituisce.

In questo caso, l'elemento sarebbe pre.dati , il per tag che ha il nome della classe dati .

Di seguito, il pre.dati elemento è stato memorizzato nel dataElement variabile.

Lo script quindi stampa il contenuto del testo del selezionato pre.dati elemento.

Se esegui il ex06.py Script Python, dovrebbe estrarre i dati della stringa casuale dalla pagina Web, come puoi vedere nello screenshot qui sotto.

$ python3 ex06.pi

Come puoi vedere, ogni volta che corro il ex06.py Script Python, estrae dati di una stringa casuale diversa dalla pagina web.

Esempio 4: estrazione di un elenco di dati dalla pagina Web

L'esempio precedente ha mostrato come estrarre un singolo elemento di dati da una pagina Web utilizzando Selenium. In questo esempio, ti mostrerò come utilizzare Selenium per estrarre un elenco di dati da una pagina web.

Per prima cosa, visita il generatore-nome-casuale.info dal tuo browser Firefox. Questo sito genererà dieci nomi casuali ogni volta che ricarichi la pagina, come puoi vedere nello screenshot qui sotto. Il nostro obiettivo è estrarre questi nomi casuali usando il selenio.

Se esamini più da vicino l'elenco dei nomi, puoi vedere che è un elenco ordinato ( morire etichetta). Il morire il tag include anche il nome della classe Lista di nomi . Ciascuno dei nomi casuali è rappresentato come un elemento dell'elenco ( al tag) all'interno del morire etichetta.

Per estrarre questi nomi casuali, crea il nuovo script Python ex07.py e digita le seguenti righe di codici nello script.

a partire dalselenioimportarewebdriver
a partire dalselenio.webdriver.Comune.chiavi importarechiavi

browser=web driver.Firefox(percorso_eseguibile='./driver/gecodriver')

browser.ottenere('http://generatore-nome-casuale.info/')

Lista di nomi=browser.find_elements_by_css_selector('ol.nameList li')

pernomeinLista di nomi:
Stampa(nome.testo)

browser.uscire()

Una volta che hai finito, salva il ex07.py Script Python.

qui, il browser.get() Il metodo carica la pagina Web del generatore di nomi casuali nel browser Firefox.

Il browser.find_elements_by_css_selector() usa il selettore CSS ol.nameList li per trovare tutto al elementi all'interno del morire tag con il nome della classe Lista di nomi . Ho memorizzato tutti i selezionati al elementi in Lista di nomi variabile.

A per loop viene utilizzato per scorrere il Lista di nomi lista di al elementi. In ogni iterazione, il contenuto del al l'elemento è stampato sulla console.

Se esegui il ex07.py Script Python, recupererà tutti i nomi casuali dalla pagina Web e li stamperà sullo schermo, come puoi vedere nello screenshot qui sotto.

$ python3 ex07.pi

Se esegui lo script una seconda volta, dovrebbe restituire un nuovo elenco di nomi utente casuali, come puoi vedere nello screenshot qui sotto.

Esempio 5: Invio del modulo – Ricerca su DuckDuckGo

Questo esempio è semplice come il primo esempio. In questo esempio, visiterò il motore di ricerca DuckDuckGo e cercherò il termine selenio hq usando il selenio.

Prima visita Motore di ricerca DuckDuckGo dal browser web Firefox.

Se controlli il campo di input della ricerca, dovrebbe avere l'id search_form_input_homepage , come puoi vedere nello screenshot qui sotto.

Ora crea il nuovo script Python ex08.py e digita le seguenti righe di codici nello script.

a partire dalselenioimportarewebdriver
a partire dalselenio.webdriver.Comune.chiavi importarechiavi
browser=web driver.Firefox(percorso_eseguibile='./driver/gecodriver')
browser.ottenere('https://duckduckgo.com/')
cercaInput=browser.find_element_by_id('search_form_input_homepage')
cercaInput.send_keys('selenio q'+ Chiavi.ACCEDERE)

Una volta che hai finito, salva il ex08.py Script Python.

qui, il browser.get() Il metodo carica la homepage del motore di ricerca DuckDuckGo nel browser web Firefox.

Il browser.find_element_by_id() Il metodo seleziona l'elemento di input con l'id search_form_input_homepage e lo memorizza nel cercaInput variabile.

Il searchInput.send_keys() viene utilizzato per inviare i dati della pressione dei tasti al campo di input. In questo esempio, invia la stringa selenio hq , e il tasto Invio viene premuto utilizzando il tasto Tasti.ENTER costante.

Non appena il motore di ricerca DuckDuckGo riceve il tasto Invio, premere ( Tasti.ENTER ), cerca e visualizza il risultato.

Corri il ex08.py Script Python, come segue:

$ python3 ex08.pi

Come puoi vedere, il browser web Firefox ha visitato il motore di ricerca DuckDuckGo.

Ha digitato automaticamente selenio hq nella casella di testo di ricerca.

Non appena il browser ha ricevuto il tasto Invio, premere ( Tasti.ENTER ), ha mostrato il risultato della ricerca.

Esempio 6: invio di un modulo su W3Schools.com

Nell'esempio 5, l'invio del modulo del motore di ricerca DuckDuckGo è stato facile. Tutto quello che dovevi fare era premere il tasto Invio. Ma questo non sarà il caso per tutti gli invii di moduli. In questo esempio, ti mostrerò una gestione dei moduli più complessa.

Per prima cosa, visita il Pagina Moduli HTML di W3Schools.com dal browser web Firefox. Una volta caricata la pagina, dovresti vedere un modulo di esempio. Questo è il modulo che invieremo in questo esempio.

Se controlli il modulo, il nome di battesimo il campo di input dovrebbe avere l'id fname , il Cognome il campo di input dovrebbe avere l'id nome , e il Pulsante Invia dovrebbe avere il genere Sottoscrivi , come puoi vedere nello screenshot qui sotto.

Per inviare questo modulo utilizzando Selenium, crea il nuovo script Python ex09.py e digita le seguenti righe di codici nello script.

a partire dalselenioimportarewebdriver
a partire dalselenio.webdriver.Comune.chiavi importarechiavi
browser=web driver.Firefox(percorso_eseguibile='./driver/gecodriver')
browser.ottenere('https://www.w3schools.com/html/html_forms.asp')
fname=browser.find_element_by_id('nome')
fnome.chiaro()
fnome.send_keys('Shahria')
nome=browser.find_element_by_id('nome')
nome.chiaro()
nome.send_keys('Shovon')
pulsante di invio=browser.find_element_by_css_selector('input[type='submit']')
pulsante di invio.send_keys(chiavi.ACCEDERE)

Una volta che hai finito, salva il ex09.py Script Python.

qui, il browser.get() Il metodo apre la pagina dei moduli HTML di W3schools nel browser web Firefox.

Il browser.find_element_by_id() Il metodo trova i campi di input in base all'id fname e nome e li memorizza nel fname e nome variabili, rispettivamente.

Il fname.clear() e nome.clear() i metodi cancellano il nome predefinito (John) fname valore e cognome (Doe) nome valore dai campi di input.

Il fname.send_keys() e lname.send_keys() tipo di metodi Shahriar e Shovon nel nome di battesimo e Cognome campi di input, rispettivamente.

Il browser.find_element_by_css_selector() il metodo seleziona il Pulsante Invia del modulo e lo memorizza nel pulsante di invio variabile.

Il submitButton.send_keys() invia la pressione del tasto Invio ( Tasti.ENTER ) al Pulsante Invia del modulo. Questa azione invia il modulo.

Corri il ex09.py Script Python, come segue:

$ python3 ex09.pi

Come puoi vedere, il modulo è stato inviato automaticamente con gli input corretti.

Conclusione

Questo articolo dovrebbe aiutarti a iniziare con i test del browser Selenium, l'automazione web e le librerie di demolizione web in Python 3. Per ulteriori informazioni, consulta il documentazione ufficiale di Selenium Python .