Introduzione al selenio in Python 3

Introduzione al selenio in Python 3
Selenio è un framework utilizzato per il test delle applicazioni Web. Selenio automatizza un browser, come Chrome o Firefox, per eseguire test sul sito Web desiderato. Selenio è anche uno strumento di raschiatura web molto potente. Selenio supporta JavaScript e tutte le moderne funzionalità del browser. Questo strumento è molto efficace nell'estrazione di informazioni dai siti Web.

Questo articolo ti mostrerà come impostare il selenio sulla tua distribuzione Linux (i.e., Ubuntu), nonché come eseguire l'automazione Web di base e lo scarto Web con la libreria di Selenium Python 3.

Prerequisiti

Per provare i comandi e gli esempi utilizzati in questo articolo, devi avere 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.

Preparare l'ambiente virtuale di Python 3 per il progetto

L'ambiente virtuale Python viene utilizzato per creare una directory di progetto Python isolato. I moduli Python installati utilizzando PIP saranno installati solo nella directory del progetto, piuttosto che a livello globale.

Il Python Virtualenv Il modulo viene utilizzato per gestire gli ambienti virtuali di Python.

Puoi installare il Python Virtualenv Modulo a livello globale usando PIP 3, come segue:

$ sudo pip3 installa virtualivv

PIP3 scaricherà e installerà a livello globale tutti i moduli richiesti.

A questo punto, il Python Virtualenv Il modulo dovrebbe essere installato a livello globale.

Crea la directory del progetto Python-Selenium-Basic/ Nella tua attuale directory di lavoro, come segue:

$ MKDIR -PV Python-Selenium-Basic/Driver

Passa alla directory del progetto appena creato Python-Selenium-Basic/, come segue:

$ cd python-selenium-basic/

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

$ virtualenv .env

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

Attiva l'ambiente virtuale Python nella directory del 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 di selenio Python

La biblioteca di Selenio Python è disponibile nel repository ufficiale Python PyPI.

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

$ PIP3 Installa selenio

La libreria di Selenio Python dovrebbe ora essere installata.

Ora che la libreria di Selenio 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 il selenio.

Installazione del driver GECKO Firefox

Il driver GECKO Firefox consente di controllare o automatizzare il browser Web Firefox utilizzando il selenio.

Per scaricare il driver Firefox Gecko, visitare la pagina di Github Releases di Mozilla/Geckodriver da un browser Web.

Come puoi vedere, V0.26.0 è l'ultima versione del driver Firefox Gecko al momento in cui è stato scritto questo articolo.

Per scaricare il driver GECKO Firefox, scorrere un po 'verso il basso e fare clic sul catrame Linux Geckodriver.Archivio GZ, a seconda dell'architettura del sistema operativo.

Se si utilizza un sistema operativo a 32 bit, fai clic su Geckodriver-V0.26.0-Linux32.catrame.Gz collegamento.

Se si utilizza un sistema operativo a 64 bit, fare clic su Geckodriver-V0.26.0-Linuxx64.catrame.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 poi fare clic OK.

L'archivio del driver GECKO Firefox dovrebbe essere scaricato in ~/Download directory.

Estrarre il Geckodriver-V0.26.0-Linux64.catrame.Gz Archivio dal ~/Download directory al autisti/ Directory del tuo progetto inserendo il seguente comando:

$ tar -xzf ~/downloads/geckodriver -v0.26.0-Linux64.catrame.GZ -C Driver/

Una volta estratto l'archivio del driver GECKO Firefox, un nuovo geckodriver Il file binario dovrebbe essere creato in autisti/ Directory del tuo progetto, come puoi vedere nello screenshot qui sotto.

Test del driver di geco Firefox Selenium

In questa sezione, ti mostrerò come impostare il tuo primo script di Selenio Python per verificare se il driver di geco Firefox sta funzionando.

Innanzitutto, apri la directory del progetto Python-Selenium-Basic/ con il tuo IDE o editore preferito. In questo articolo, userò il codice Visual Studio.

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

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
Dal tempo Import Sleep
browser = webdriver.Firefox (Executable_Path = "./driver/geckodriver ")
browser.get ('http: // www.Google.com ')
sonno (5)
browser.esentato()

Una volta terminato, salva il ex01.Py Script di Python.

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

La riga seguente configura selenio per utilizzare il driver GECKO Firefox dal autisti/ Directory del tuo progetto.

Per verificare se il driver di geco Firefox sta lavorando con selenio, esegui quanto segue ex01.Py Python Script:

$ Python3 Ex01.Py

Il browser Web Firefox dovrebbe visitare automaticamente Google.com e chiudi se stesso dopo 5 secondi. Se ciò si verifica, il driver di geco Firefox Selenium funziona correttamente.

Installazione del driver Web Chrome

Il driver Web Chrome consente di controllare o automatizzare il browser Web di Google Chrome utilizzando Selenio.

È necessario scaricare la stessa versione del driver Web Chrome di quella del tuo browser Web di Google Chrome.

Per trovare il numero di versione del tuo browser Web di Google Chrome, visita Chrome: // Impostazioni/Guida in Google Chrome. Il numero di versione dovrebbe essere in 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 abbinare le prime tre parti del numero di versione con driver Web Chrome.

Per scaricare Chrome Web Driver, visitare la pagina di download ufficiale di Chrome Driver.

Nel Rilasci attuali Sezione, sarà disponibile il driver Web Chrome per le versioni più attuali del browser Web di Google Chrome, come puoi vedere nello screenshot seguente.

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

Una volta fatto clic sulla versione corretta del driver Web Chrome, dovrebbe portarti alla pagina seguente. Clicca sul chromedriver_linux64.cerniera lampo Link, come notato nello screenshot seguente.

Il Chrome Web Driver Archive dovrebbe ora essere scaricato.

L'archivio del driver web Chrome dovrebbe ora essere scaricato in ~/Download directory.

Puoi estrarre il Chromedriver-Linux64.cerniera lampo Archivio dal ~/Download directory al autisti/ Directory del tuo progetto con il seguente comando:

$ unzip ~/downloads/chromedriver_linux64.zip -d driver/

Una volta estratto l'archivio del driver web Chrome, un nuovo Chromedriver Il file binario dovrebbe essere creato in autisti/ Directory del tuo progetto, come puoi vedere nello screenshot qui sotto.

Test del driver Web Chrome Selenium

In questa sezione, ti mostrerò come impostare il tuo primo script di Selenio Python per verificare se il driver Web Chrome sta funzionando.

Innanzitutto, crea il nuovo script Python ex02.Py, e digitare le seguenti righe di codici nello script.

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
Dal tempo Import Sleep
browser = webdriver.Chrome (Executable_Path = "./driver/cromedriver ")
browser.get ('http: // www.Google.com ')
sonno (5)
browser.esentato()

Una volta terminato, salva il ex02.Py Script di Python.

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

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

Per verificare se il driver web Chrome sta lavorando con il selenio, eseguire il ex02.Py Python Script, come segue:

$ Python3 Ex01.Py

Il browser Web di Google Chrome dovrebbe visitare automaticamente Google.com e chiudi se stesso dopo 5 secondi. Se ciò si verifica, il driver di geco Firefox Selenium funziona correttamente.

Nozioni di base sul raschiatura del web con selenio

D'ora in poi userò il browser Web Firefox. Puoi anche usare Chrome, se lo desideri.

Uno script di base di selenio Python dovrebbe apparire come lo script mostrato nello screenshot seguente.

Innanzitutto, importa il selenio Webdriver dal selenio modulo.

Successivamente, importare il Tasti da selenio.Webdriver.comune.tasti. Questo ti aiuterà a inviare le pressioni del tasto tastiera al browser che si sta automatizzando da selenio.

La seguente riga crea un file browser Oggetto per il browser Web Firefox utilizzando il driver Firefox Gecko (WebDriver). È possibile controllare le azioni del browser Firefox usando questo oggetto.

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

Utilizzando il selenio, puoi scrivere i test, eseguire la demolizione Web e, infine, chiudere il browser usando il esentato() metodo del browser oggetto.

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

Esempio 1: stampare il 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 digitare le seguenti righe di codici in esso.

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
browser = webdriver.Firefox (Executable_Path = "./driver/geckodriver ")
browser.get ('https: // www.DuckDuckgo.com ')
Stampa ("Titolo: % S" % browser.titolo)
browser.esentato()

Una volta terminato, salva il file.

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

Dopo aver gestito il Ex04.Py Script, dovrebbe:

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

Come puoi vedere, il Ex04.Py Script ha stampato bene il titolo della pagina web nella console.

$ Python3 Ex04.Py

Esempio 2: stampare i titoli di più pagine Web

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

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

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
browser = webdriver.Firefox (Executable_Path = "./driver/geckodriver ")
urls = ['https: // www.DuckDuckgo.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
per URL negli URL:
browser.Ottieni (URL)
Stampa ("Titolo: % S" % browser.titolo)
browser.esentato()

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

Qui, il URL L'elenco mantiene l'URL di ogni pagina web.

UN per Loop è usato per iterare attraverso il URL Elementi della lista.

Ad ogni iterazione, Selenio dice al browser di visitare il URL e ottenere il titolo della pagina web. Una volta che il selenio ha estratto il titolo della pagina web, è stampato nella console.

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

$ Python3 Ex05.Py

Questo è un esempio di come il selenio 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 dalle pagine Web utilizzando il selenio. Questo è anche noto come rashing web.

Innanzitutto, visita il casuale.Org Link da Firefox. La pagina dovrebbe generare una stringa casuale, come puoi vedere nello screenshot seguente.

Per estrarre i dati di stringa casuali usando il selenio, è necessario anche conoscere 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 pulsante mouse destro (RMB) e fare clic su Ispeziona Elemento (Q), Come notato nello screenshot seguente.

La rappresentazione HTML dei dati deve essere visualizzata in Ispettore Tab, come puoi vedere nello screenshot qui sotto.

Puoi anche fare clic su Ispezionare l'icona ( ) Per ispezionare i dati dalla pagina.

Fai clic sull'icona ispeziona () e passa sopra i dati della stringa casuali che si desidera estrarre. La rappresentazione HTML dei dati deve essere visualizzata come prima.

Come puoi vedere, i dati di stringa casuali sono avvolti in un HTML pre tagga e contiene la classe dati.

Ora che conosciamo la rappresentazione HTML dei dati che vogliamo estrarre, creeremo uno script Python per estrarre i dati usando il selenio.

Crea il nuovo script Python Ex06.Py e digitare le seguenti righe di codici nello script

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
browser = webdriver.Firefox (Executable_Path = "./driver/geckodriver ")
browser.get ("https: // www.casuale.org/stringhe/?num = 1 & len = 20 e cifre
= On & Uppalpha = on & Loweralpha = on & unique = on & format = html & rnd = new ")
DataElement = browser.find_element_by_css_selector ('pres.dati')
Stampa (dataelement.testo)
browser.esentato()

Una volta terminato, salva il Ex06.Py Script di Python.

Qui, il browser.Ottenere() Il metodo carica la pagina web nel browser Firefox.

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

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

Sotto, il pre.dati L'elemento è stato archiviato in dataelement variabile.

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

Se esegui il Ex06.Py Script Python, dovrebbe estrarre i dati di stringa casuali dalla pagina Web, come puoi vedere nello screenshot seguente.

$ Python3 Ex06.Py

Come puoi vedere, ogni volta che eseguo il Ex06.Py Python Script, estrae dati di stringa casuali diversi dalla pagina Web.

Esempio 4: Extracing Elenco di dati dalla pagina Web

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

Innanzitutto, visitare il generatore di nome casuale.Informazioni dal tuo browser Web Firefox. Questo sito Web genererà dieci nomi casuali ogni volta che ricarichi la pagina, come puoi vedere nello screenshot di seguito. Il nostro obiettivo è estrarre questi nomi casuali usando il selenio.

Se ispezioni più da vicino l'elenco dei nomi, puoi vedere che si tratta di un elenco ordinato (ol etichetta). IL ol Il tag include anche il nome della classe Lista di nomi. Ciascuno dei nomi casuali è rappresentato come elemento elenco (li tag) all'interno del ol etichetta.

Per estrarre questi nomi casuali, crea il nuovo script Python Ex07.Py e digitare le seguenti righe di codici nello script.

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
browser = webdriver.Firefox (Executable_Path = "./driver/geckodriver ")
browser.get ("http: // casual-name-generator.informazioni/")
Namelist = browser.find_elements_by_css_selector ('ol.Namelist Li ')
Per il nome in Namelist:
Stampa (nome.testo)
browser.esentato()

Una volta terminato, salva il Ex07.Py Script di Python.

Qui, il browser.Ottenere() Il metodo carica la pagina web del generatore di nomi casuali nel browser Firefox.

IL browser.find_elements_by_css_selector () Il metodo utilizza il selettore CSS ol.Namelist Li per trovare tutto li elementi all'interno del ol Tag con il nome della classe Lista di nomi. Ho memorizzato tutto il selezionato li elementi nel Lista di nomi variabile.

UN per Loop è usato per iterare attraverso il Lista di nomi lista di li elementi. In ogni iterazione, il contenuto del li L'elemento è stampato sulla console.

Se esegui il Ex07.Py Python Script, prenderà tutti i nomi casuali dalla pagina Web e lo stamperà sullo schermo, come puoi vedere nello screenshot seguente.

$ Python3 Ex07.Py

Se si esegue lo script una seconda volta, dovrebbe restituire un nuovo elenco di nomi utente casuali, come puoi vedere nello screenshot seguente.

Esempio 5: Modulo di invio - Ricerca su DuckDuckgo

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

Innanzitutto, visita il motore di ricerca DuckDuckgo dal browser Web Firefox.

Se ispezioni il campo di input di 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 digitare le seguenti righe di codici nello script.

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
browser = webdriver.Firefox (Executable_Path = "./driver/geckodriver ")
browser.get ("https: // DuckDuckgo.com/")
SearchInput = browser.find_element_by_id ('search_form_input_homepage')
SearchInput.Send_Keys (tasti 'selenio hq' +.ACCEDERE)

Una volta terminato, salva il ex08.Py Script di Python.

Qui, il browser.Ottenere() Il metodo carica la homepage del motore di ricerca DuckDuckgo nel browser Web Firefox.

IL browser.find_element_by_id () Metodo seleziona l'elemento di input con l'ID Search_Form_input_homepage e lo memorizza nel SearchInput variabile.

IL SearchInput.Send_Keys () Il metodo viene utilizzato per inviare il tasto Premere i dati sul campo di input. In questo esempio, invia la stringa Selenium HQ, e il tasto ENTER viene premuto utilizzando il Tasti.ACCEDERE costante.

Non appena il motore di ricerca DuckDuckgo riceve la pressione del tasto Invio (Tasti.ACCEDERE), cerca e visualizza il risultato.

Corri il ex08.Py Python Script, come segue:

$ Python3 Ex08.Py

Come puoi vedere, il browser Web Firefox ha visitato il motore di ricerca DuckDuckgo.

Ha digitato automaticamente Selenium HQ Nella casella di testo di ricerca.

Non appena il browser ha ricevuto la pressione del tasto ENTER (Tasti.ACCEDERE), ha visualizzato il risultato della ricerca.

Esempio 6: inviare un modulo su W3Schools.com

Nell'esempio 5, la presentazione del modulo di ricerca DuckDuckgo è stata facile. Tutto quello che dovevi fare era premere il tasto Invio. Ma questo non sarà il caso di tutte le presentazioni. In questo esempio, ti mostrerò una gestione di forme più complessa.

Innanzitutto, visita la pagina dei moduli HTML di W3Schools.com dal browser Web Firefox. Una volta carica la pagina, dovresti vedere un modulo di esempio. Questo è il modulo che invieremo in questo esempio.

Se ispezioni 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 LNAME, e il Pulsante Invia dovrebbe avere il tipo invia, Come puoi vedere nello screenshot qui sotto.

Per inviare questo modulo usando Selenio, crea il nuovo script Python Ex09.Py e digitare le seguenti righe di codici nello script.

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
browser = webdriver.Firefox (Executable_Path = "./driver/geckodriver ")
browser.get ("https: // www.W3Schools.com/html/html_forms.asp ")
fname = browser.find_element_by_id ('fname')
fname.chiaro()
fname.send_keys ('shahriar')
lname = browser.find_element_by_id ('lname')
LNAME.chiaro()
LNAME.send_keys ('shovon')
sottomissione = browser.find_element_by_css_selector ('input [type = "invio"]')
sottomissione.Send_keys (chiavi.ACCEDERE)

Una volta terminato, salva il Ex09.Py Script di Python.

Qui, il browser.Ottenere() Il metodo apre la pagina W3Schools HTML Forms nel browser Web Firefox.

IL browser.find_element_by_id () Il metodo trova i campi di input dall'ID fname E LNAME e li memorizza nel fname E LNAME Variabili, rispettivamente.

IL fname.chiaro() E LNAME.chiaro() Metodi Cancella il nome predefinito (John) fname Valore e cognome (DOE) LNAME 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 () Metodo seleziona il Pulsante Invia della forma e la memorizza nel sottomissione variabile.

IL sottomissione.Send_Keys () Il metodo invia il tasto Invio Premere (Tasti.ACCEDERE) al Pulsante Invia della forma. Questa azione presenta il modulo.

Corri il Ex09.Py Python Script, come segue:

$ python3 ex09.Py

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, dai un'occhiata alla documentazione ufficiale di Selenio Python.