Esegui selenio senza testa con Chrome

Esegui selenio senza testa con Chrome
Se si desidera eseguire Selenium Web Automation o Decking Web con Chrome Web Browser, esegue la versione grafica del browser Web Chrome per impostazione predefinita. Non è un problema quando si esegue il tuo script di selenio da un ambiente desktop grafico Linux (i.e., Gnome 3, KDE, XFCE4). Ma se vuoi eseguire la tua sceneggiatura di selenio in un ambiente senza testa (io.e., Server Ubuntu, server CentOS/RHEL) in cui non si dispone di alcun ambiente desktop grafico, quindi non funzionerà.

Fortunatamente, puoi configurare Selenio per eseguire il browser Web Chrome in modalità Headless. In questa modalità, il browser Web Chrome verrà eseguito senza alcuna interfaccia utente grafica. Quindi, il selenio può eseguire l'automazione Web, la demolizione Web, i test del browser, ecc. Utilizzo del browser Web Chrome nei server Linux in cui non si dispone di alcun ambiente desktop grafico installato.

In questo articolo, ti mostrerò come eseguire il selenio con il browser Web Chrome in modalità Headless. Userò la libreria di Selenio Python e scriverò gli script di Selenio usando il linguaggio di programmazione Python 3. Quindi iniziamo.

Prerequisiti:

Per provare i comandi e gli esempi di questo articolo, devi avere,

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) Google Chrome installato sul tuo computer.

Puoi trovare molti articoli su questi argomenti su Linuxhint.com. Assicurati di verificarli se hai bisogno di assistenza.

Preparare l'ambiente virtuale di Python 3 per il progetto:

Python Virtual Environment viene utilizzato per creare una directory di progetto Python isolato. I moduli Python installati utilizzando PIP saranno installati solo nella directory del progetto, non a livello globale.

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

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

$ sudo pip3 installa virtualivv

Pitone Virtualenv dovrebbe essere installato.

Crea una directory di progetto cromata senza testa/ Nella tua attuale directory di lavoro come segue:

$ mkdir -pv cromo -headless/driver

Passa alla directory del progetto appena creato cromata senza testa/ come segue:

$ CD CD Chrome-headless /

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

$ virtualenv .Venv

L'ambiente virtuale di Python dovrebbe essere creato in .venv/ Directory nella directory del progetto.

Attiva l'ambiente virtuale Python della directory del progetto con il seguente comando:

$ fonte .venv/bin/attiva

Installazione della libreria di selenio Python:

La biblioteca Selenio è disponibile nel repository ufficiale Python PyPI.

È possibile installare la libreria di Selenio Python utilizzando PIP 3 come segue:

$ PIP3 Installa selenio

La libreria di Selenio Python dovrebbe essere installata.

Installazione del driver Web Chrome:

Chrome Web Driver ti consentirà di controllare o automatizzare il browser Web di Google Chrome da Selenio.

In questa sezione, ti mostrerò come installare il driver Web Chrome.

Innanzitutto, apri Google Chrome e visita Chrome: // Impostazioni/Guida.

Una volta caricata la pagina, dovresti trovare il numero di versione di Google Chrome in Su Chrome sezione. Nota le prime 3 sezioni del numero di versione come contrassegnato nello screenshot seguente.

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

Nel Rilasci attuali Sezione, il driver Web Chrome per le versioni più attuali del browser Web di Google Chrome dovrebbe essere disponibile, come puoi vedere nello screenshot seguente. Una delle attuali versioni di Chrome Web Driver dovrebbe avere un numero di versione corrispondente con il tuo browser Web di Google Chrome. Le prime 3 sezioni del numero di versione di Chrome Web Driver e Google Chrome Web Browser devono corrispondere.

Se la versione che stai cercando non è in Rilasci attuali sezione, scorri un po 'verso il basso e dovresti essere in grado di trovarlo.

Una volta fatto clic sul numero di versione del driver Web Chrome, dovrebbe prendere la pagina di download. Clicca sul chromedriver_linux64.cerniera lampo file da qui.

L'archivio del driver web Chrome dovrebbe essere scaricato.

Il scaricato chromedriver_linux64.cerniera lampo Il file dovrebbe essere nel tuo ~/Download directory.

$ ls -lh ~/downloads

Estrarre il chromedriver_linux64.cerniera lampo Archivio dal ~/Download directory al autisti/ Directory del tuo progetto come segue:

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

Un nuovo file Chromedriver dovrebbe essere creato in autisti/ Directory del tuo progetto una volta estratto l'archivio del driver Web Chrome, come puoi vedere nello screenshot seguente.

Test del driver Web Chrome in modalità Headless:

In questa sezione, ti mostrerò come eseguire il selenio usando il driver Chrome in modalità senza testa.

Innanzitutto, crea un nuovo script Python ex01.Py nella directory del tuo progetto e digita le seguenti righe di codici in esso.

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
da selenio.Webdriver.cromo.opzioni di importazione delle opzioni
Chromeoptions = Options ()
Cromeopzioni.senza testa = vero
browser = webdriver.Chrome (Executable_Path = "./driver/Chromedriver ", options = Chromeoptions)
browser.get ("http: // linuxhint.com ")
Stampa ("Titolo: % S" % browser.titolo)
browser.esentato()

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

Queste linee importano tutte le cose richieste da selenio biblioteca.

Come ho detto prima, per impostazione predefinita, il driver Chrome cerca di eseguire Google Chrome in modalità grafica. Per eseguire Google Chrome in modalità Headless, dobbiamo dire al driver di Chrome di passare alcune opzioni extra. Questa linea crea un Opzioni oggetto che possiamo trasmettere al driver web Chrome in seguito.

È possibile eseguire Google Chrome in modalità Headless semplicemente impostando il senza testa proprietà del Cromeopzioni oggetto a VERO.

Oppure puoi usare il add_argument () metodo del Cromeopzioni oggetto per aggiungere il file -senza testa Argomento della linea di comando per eseguire Google Chrome in modalità Headless utilizzando il driver Web Selenium Chrome.

Puoi usare un Webdriver.Cromo() Metodo per inizializzare/eseguire un browser Web di Google Chrome da Selenio. IL Executable_Path L'argomento è usato per dire a selenio di usare il Chromedriver binario dal autisti/ directory del progetto. IL opzioni L'argomento dice a Selenio di utilizzare le nostre opzioni personalizzate Cromeopzioni.

Una volta che Selenium esegue un browser Web di Google Chrome utilizzando il driver web Selenium Chrome, restituisce un browser oggetto. Possiamo usarlo per controllare l'istanza di Google Chrome in seguito.

IL browser.Ottenere() Il metodo carica il Linuxhint.com Sito Web nel browser Web di Google Chrome in background (in modalità Headless).

Una volta carica la pagina, browser.titolo La proprietà avrà il titolo del sito Web. Il Python stampa() Metodo stampato il titolo del sito Web sulla console.

Poi il browser.esentato() Il metodo chiude il browser Web di Google Chrome.

Per verificare se il selenio può funzionare in modalità Headless, eseguire lo script Python ex01.Py come segue:

$ Python3 Ex01.Py

Dovrebbe stampare il titolo del sito Web sulla console senza aprire il browser Web di Google Chrome in modalità grafica.

Solo per mostrarti che funziona con server Linux Headless (in cui non è installata alcuna interfaccia utente grafica), ho eseguito lo script Python ex01.Py sul server Ubuntu 20.04 LTS. Come puoi vedere, lo script funziona bene.

Raschiatura Web con selenio in modalità Headless utilizzando il driver Web Chrome:

In questa sezione, ti mostrerò un esempio di demolizione Web in selenio utilizzando il driver Web Chrome in modalità Headless.

Innanzitutto, visitare il generatore di nome casuale.Informazioni da Google Chrome o da qualsiasi altro browser Web. Questo sito Web genererà 10 nomi casuali ogni volta che si ricarichi la pagina, come puoi vedere nello screenshot seguente. Il nostro obiettivo è estrarre questi nomi casuali usando il selenio in modalità senza testa.

Per scoprire la struttura HTML dell'elenco, devi aprire il Strumento per sviluppatori Chrome. Per fare questo premere il pulsante del mouse destro (RMB) sulla pagina e fare clic su Ispezionare o premere + + IO.

Strumento per sviluppatori Chrome dovrebbe essere aperto. Clicca sul Ispezionare l'icona () come contrassegnato nello screenshot seguente.

Quindi, librami nell'elenco di Nomi casuali. L'elenco dovrebbe essere evidenziato come contrassegnato nello screenshot di seguito. Quindi, premere il pulsante del mouse sinistro (LMB) per selezionare l'elenco.

Il codice HTML dell'elenco dovrebbe essere evidenziato nel Elementi Tab di Strumento per sviluppatori Chrome. Qui, l'elenco dei nomi casuali è all'interno di a div elemento. IL div L'elemento ha il classe nome Risultati. All'interno, abbiamo un ol elemento con il classe nome Lista di nomi. Dentro il ol elemento, ciascuno dei nomi è in a li elemento.

Da questo possiamo dire che per arrivare al li Tag, dobbiamo seguire div.Risultati> ol.Namelist> li

Quindi, il nostro selettore CSS sarà div.Risultati ol.Namelist Li (Basta sostituire il > segni con spazio bianco)

Per estrarre questi nomi casuali, crea un nuovo script Python ex02.Py e digitare le seguenti righe di codici in esso.

dal webdriver di import selenio
da selenio.Webdriver.comune.tasti di importazione delle chiavi
da selenio.Webdriver.cromo.opzioni di importazione delle opzioni
Chromeoptions = Options ()
Cromeopzioni.senza testa = vero
browser = webdriver.Chrome (Executable_Path = "./driver/Chromedriver ", options = Chromeoptions)
browser.get ("http: // casual-name-generator.informazioni/")
Namelist = browser.find_elements_by_css_selector ('div.Risultati ol.Namelist Li ')
Per il nome in Namelist:
Stampa (nome.testo)
browser.esentato()

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

Ho spiegato le righe 1-8 nella sezione precedente di questo articolo. Questi sono gli stessi di in ex01.Py.

La riga 10 carica il sito Web del generatore di nomi casuali utilizzando il browser.Ottenere() metodo.

La riga 11 seleziona l'elenco dei nomi utilizzando il browser.find_elements_by_css_selector () metodo. Questo metodo utilizza il selettore CSS div.Risultati ol.Namelist Li Per trovare l'elenco dei nomi. Quindi, l'elenco dei nomi è archiviato in Lista di nomi variabile.

Nelle righe 13 e 14, a 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.

Ora, esegui lo script Python ex02.Py come segue:

$ Python3 Ex02.Py

Come puoi vedere, lo script Python ex02.Py Prese tutti i nomi casuali dalla pagina web.

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

Problemi che potresti affrontare eseguendo il selenio in modalità senza testa:

Hai visto in precedenza che eseguire selenio in modalità senza testa usando il driver Chrome è facile come impostare il Cromeopzioni.senza testa bandiera a VERO.

Questa soluzione potrebbe non funzionare per te su alcune distribuzioni Linux. In questa sezione, parlerò di alcuni dei problemi che potresti affrontare mentre esegui il selenio in modalità Headless utilizzando il driver Web Chrome.

Per impostazione predefinita, il browser Web di Google Chrome fa un sacco di sandboxing (gestisce molte cose in un ambiente isolato). Ciò può causare problemi quando si esegue il selenio in modalità senza testa utilizzando il driver Web Chrome. È possibile disabilitare il sandboxing per Google Chrome utilizzando il -no-sandbox bandiera.

Per aggiungere il -no-sandbox flag, aggiungi la riga seguente prima di inizializzare il driver di cromo selenio utilizzando Webdriver.Cromo() metodo (riga 8 In ex01.Py Python Script).

Cromeopzioni.add_argument ("-no-sandbox")

Potresti avere problemi a fare determinate cose nel browser Web di Google Chrome da Selenio come fare screenshot del sito Web e così via. Ciò può accadere perché, in modalità Headless, Google Chrome può impostare una risoluzione errata dello schermo virtuale. Quindi, il tuo sito web potrebbe non sembrare giusto. È possibile impostare la risoluzione dello schermo virtuale desiderata per il browser Web di Google Chrome in modalità Headless utilizzando il -dimensione della finestra Opzione della riga di comando.

Ad esempio, per impostare la larghezza dello schermo virtuale su 1280 px e altezza a 720 px, Aggiungi il -dimensione della finestra Opzione riga di comando prima di inizializzare il driver di cromo selenio utilizzando Webdriver.Cromo() metodo (riga 8 In ex01.Py Python Script) come segue:

Cromeopzioni.add_argument ("-finestra size = 1280.720")

Il tuo server potrebbe non avere una GPU installata o potrebbe avere una GPU che il browser Web di Google Chrome non saprà usare come utilizzare. Per impostazione predefinita, Google Chrome dovrebbe disabilitare automaticamente l'accelerazione della GPU se una GPU non è disponibile o se è disponibile una GPU non supportata. In alcuni casi, potrebbe non farlo. In tal caso, Selenio potrebbe non essere in grado di eseguire il browser Web di Google Chrome in modalità Headless. Per risolvere questo problema, è necessario disabilitare l'accelerazione della GPU usando il -Disabilita GPU bandiera.

Per aggiungere il -Disabilita GPU flag, aggiungi la riga seguente prima di inizializzare il driver di cromo selenio utilizzando Webdriver.Cromo() metodo (riga 8 In ex01.Py Python Script).

Cromeopzioni.add_argument ("-disabilita gpu")

Conclusione:

In questo articolo, ti ho mostrato come impostare il selenio in modalità Headless utilizzando il driver Web Chrome. Ho coperto le basi, che ti aiuteranno a iniziare con l'automazione del browser di selenio senza testa, i test web e il raschiatura del web.

Ho anche coperto alcuni degli argomenti/flag della riga di comando di Google Chrome che puoi utilizzare per risolvere alcuni dei problemi che potresti avere durante l'esecuzione di Selenio in modalità Headless utilizzando il driver Web Chrome.

Ci sono molte altre opzioni di linea di comando di Google Chrome disponibili, che non ho coperto in questo articolo. Queste opzioni della riga di comando possono essere utili per il tuo progetto. Puoi trovare tutte le opzioni di riga di comando Google Chrome supportate nell'elenco degli switch della riga di comando Chromium di Peter Beverloo Page.