Selenium

Esecuzione di Selenium Headless con Chrome

Esecuzione di Selenium Headless con Chrome
Se desideri eseguire l'automazione web di Selenium o lo scraping web con il browser web Chrome, esegue la versione grafica del browser web Chrome per impostazione predefinita. Non è un problema quando esegui lo script Selenium da un ambiente desktop grafico Linux (i.e., GNOME 3, KDE, XFCE4). Ma se vuoi eseguire il tuo script Selenium in un ambiente headless (i.e., Ubuntu Server, CentOS/RHEL Server) in cui non è installato alcun ambiente desktop grafico, quindi non funzionerà.

Fortunatamente, puoi configurare Selenium per eseguire il browser web Chrome in modalità headless. In questa modalità, il browser web Chrome verrà eseguito senza alcuna interfaccia utente grafica. Quindi, Selenium può eseguire l'automazione del Web, la demolizione del Web, i test del browser, ecc. utilizzando il browser web Chrome nei server Linux in cui non è installato alcun ambiente desktop grafico.

In questo articolo, ti mostrerò come eseguire Selenium con il browser web Chrome in modalità headless. Userò la libreria Selenium Python e scriverò gli script Selenium 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.come. Assicurati di controllarli se hai bisogno di assistenza.

Preparazione dell'ambiente virtuale Python 3 per il progetto:

Python Virtual Environment viene utilizzato per creare una directory di progetto Python isolata. I moduli Python che installi usando PIP verranno installati solo nella directory del progetto, non globalmente.

Pitone virtualenv viene utilizzato per gestire ambienti virtuali Python.

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

$ sudo pip3 install virtualenv

Pitone virtualenv dovrebbe essere installato.

Crea una directory di progetto cromata senza testa/ nella directory di lavoro corrente come segue:

$ mkdir -pv chrome-headless/driver

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

$ cd cromato senza testa /

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

$ virtualenv .venv

L'ambiente virtuale Python dovrebbe essere creato nel .venv/ directory nella directory del progetto.

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

$ fonte .venv/bin/activate

Installazione della libreria Selenium Python:

La libreria Selenium è disponibile nel repository ufficiale Python PyPI.

Puoi installare la libreria Selenium Python usando PIP 3 come segue:

$ pip3 installa selenio

La libreria Selenium Python dovrebbe essere installata.

Installazione del driver Web Chrome:

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

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

Innanzitutto, apri Google Chrome e visita chrome://settings/help.

Una volta caricata la pagina, dovresti trovare il numero di versione di Google Chrome nel Informazioni su Chrome sezione. Nota le prime 3 sezioni del numero di versione come indicato nello screenshot qui sotto.

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

Nel Uscite attuali sezione, Chrome Web Driver per le versioni più recenti del browser web Google Chrome dovrebbe essere disponibile, come puoi vedere nello screenshot qui sotto. Una delle versioni correnti di Chrome Web Driver dovrebbe avere un numero di versione corrispondente al tuo browser web Google Chrome. Le prime 3 sezioni del numero di versione di Chrome Web Driver e del browser Web Google Chrome devono corrispondere.

Se la versione che stai cercando non è nella Rilasci attuali sezione, scorri un po' verso il basso e dovresti riuscire a trovarlo.

Dopo aver fatto clic sul numero di versione di Chrome Web Driver, dovrebbe essere visualizzata la sua pagina di download. Clicca sul chromedriver_linux64.cerniera lampo file da qui.

L'archivio di Chrome Web Driver dovrebbe essere scaricato.

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

$ ls -lh ~/Download

Estrarre il chromedriver_linux64.cerniera lampo archivio dal ~/Download directory per il autisti/ directory del tuo progetto come segue:

$ unzip ~/Download/chromeddriver_linux64.zip -d driver/

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

Test di Chrome Web Driver in modalità Headless:

In questa sezione, ti mostrerò come eseguire Selenium utilizzando Chrome Driver in modalità headless.

Per prima cosa, crea un nuovo script Python ex01.pi nella directory del tuo progetto e digita le seguenti righe di codici al suo interno.

dal webdriver di importazione del selenio
dal selenio.webdriver.Comune.chiavi di importazione chiavi
dal selenio.webdriver.cromo.opzioni di importazione Opzioni
chromeOptions = Opzioni()
chromeOpzioni.senza testa = Vero
browser = driver web.Chrome(executable_path="./drivers/chromedriver", options=chromeOptions)
browser.get("http://linuxhint.com")
print("Titolo: %s" % browser.titolo)
browser.smettere()

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

Queste linee importano tutte le cose richieste dal selenio biblioteca.

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

Puoi eseguire Google Chrome in modalità headless semplicemente impostando il senza testa proprietà del chromeOpzioni obiettare a Vero.

Oppure puoi usare il add_argument() metodo del chromeOpzioni oggetto per aggiungere il -senza testa argomento della riga di comando per eseguire Google Chrome in modalità headless utilizzando il driver web Selenium Chrome.

Puoi usare a webdriver.Cromo() metodo per inizializzare/eseguire un browser web Google Chrome da Selenium. Il percorso_eseguibile argomento è usato per dire a Selenium di usare il use chromedriver binario da autisti/ directory del progetto. Il opzioni argomento dice a Selenium di usare le nostre opzioni personalizzate chromeOpzioni.

Una volta che Selenium esegue un browser Web Google Chrome utilizzando Selenium Chrome Web Driver, restituisce un browser oggetto. Possiamo usarlo per controllare l'istanza di Google Chrome in un secondo momento.

Il browser.ottenere() il metodo carica il linuxhint.come sito web nel browser web Google Chrome in background (in modalità headless).

Una volta caricata la pagina, browser.titolo la proprietà avrà il titolo del sito web. il pitone Stampa() il metodo stampa il titolo del sito web sulla console.

Poi il browser.smettere() il metodo chiude il browser web Google Chrome.

Per verificare se Selenium può funzionare in modalità headless, esegui lo script Python ex01.pi come segue:

$ python3 ex01.pi

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

Solo per mostrarti che funziona da server headless Linux (dove non è installata alcuna interfaccia utente grafica), ho eseguito lo script Python ex01.pi su Ubuntu Server 20.04 LTS. Come puoi vedere, lo script funziona bene.

Web Scraping con Selenium in modalità Headless utilizzando il driver Web Chrome:

In questa sezione, ti mostrerò un esempio di web scrapping in Selenium utilizzando il driver web Chrome in modalità headless.

Per prima cosa, visita il generatore di nomi casuali.informazioni da Google Chrome o da qualsiasi altro browser web. Questo sito Web genererà 10 nomi casuali ogni volta che ricarichi la pagina, come puoi vedere nello screenshot qui sotto. Il nostro obiettivo è estrarre questi nomi casuali usando Selenium in modalità headless.

Per scoprire la struttura HTML dell'elenco, devi aprire il Strumento per sviluppatori Chrome. Per farlo premi il tasto destro del mouse (RMB) sulla pagina e clicca su Ispezionare o premere + + io.

Strumento per sviluppatori Chrome dovrebbe essere aperto. Clicca sul Icona di ispezione () come indicato nello screenshot qui sotto.

Quindi, passa il mouse sopra l'elenco di Nomi casuali. L'elenco dovrebbe essere evidenziato come indicato nello screenshot qui sotto. Quindi, premere il tasto sinistro del mouse (LMB) per selezionare l'elenco.

Il codice HTML della lista dovrebbe essere evidenziato nel Elementi scheda del 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. Al suo interno, abbiamo un vecchio elemento con il classe nome Lista di nomi. Dentro il vecchio 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 vecchi.nameList li (basta sostituire il > segni con spazi)

Per estrarre questi nomi casuali, crea un nuovo script Python ex02.pi e digita le seguenti righe di codici al suo interno.

dal webdriver di importazione del selenio
dal selenio.webdriver.Comune.chiavi di importazione chiavi
dal selenio.webdriver.cromo.opzioni di importazione Opzioni
chromeOptions = Opzioni()
chromeOpzioni.senza testa = Vero
browser = driver web.Chrome(executable_path="./drivers/chromedriver", options=chromeOptions)
browser.get("http://generatore-nome-casuale.Informazioni/")
nameList = browser.find_elements_by_css_selector('div.risultati vecchi.nameList li')
per nome in lista nomi:
print(nome.testo)
browser.smettere()

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

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

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 vecchi.nameList li per trovare l'elenco dei nomi. Quindi, l'elenco dei nomi viene memorizzato nel Lista di nomi variabile.

Nelle righe 13 e 14, a per loop viene utilizzato per scorrere 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.pi come segue:

$ python3 ex02.pi

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

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

Problemi che potresti incontrare durante l'esecuzione di selenio in modalità senza testa:

Hai visto in precedenza che eseguire Selenium in modalità headless utilizzando il driver Chrome è facile come impostare il chromeOpzioni.senza testa bandiera a Vero.

Questa soluzione potrebbe non funzionare su alcune distribuzioni Linux. In questa sezione parlerò di alcuni dei problemi che potresti incontrare durante l'esecuzione di Selenium in modalità headless utilizzando il driver web di Chrome.

Per impostazione predefinita, il browser Web Google Chrome esegue molto sandboxing (esegue molte cose in un ambiente isolato). Ciò potrebbe causare problemi durante l'esecuzione di Selenium in modalità headless utilizzando il driver web di Chrome. Puoi disabilitare la sandbox per Google Chrome utilizzando il -senza sandbox bandiera.

Per aggiungere il -senza sandbox flag, aggiungi la seguente riga prima di inizializzare il driver Selenium Chrome utilizzando webdriver.Cromo() metodo (linea 8 nel ex01.pi script Python).

chromeOpzioni.add_argument("--no-sandbox")

Potresti avere problemi a fare determinate cose nel browser web Google Chrome da Selenium come fare screenshot del sito web e così via. Ciò può accadere perché, in modalità headless, Google Chrome potrebbe impostare una risoluzione dello schermo virtuale errata. Quindi, il tuo sito web potrebbe non sembrare corretto. Puoi impostare la risoluzione dello schermo virtuale desiderata per il browser web 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 della riga di comando prima di inizializzare il driver Selenium Chrome utilizzando webdriver.Cromo() metodo (linea 8 nel ex01.pi script Python) come segue:

chromeOpzioni.add_argument("--window-size=1280.720")

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

Per aggiungere il -disabilita-gpu flag, aggiungi la seguente riga prima di inizializzare il driver Selenium Chrome utilizzando webdriver.Cromo() metodo (linea 8 nel ex01.pi script Python).

chromeOpzioni.add_argument(“-disable-gpu”)

Conclusione:

In questo articolo, ti ho mostrato come configurare Selenium in modalità headless utilizzando il driver web di Chrome. Ho coperto le nozioni di base, che ti aiuteranno a iniziare con l'automazione del browser Selenium senza testa, i test web e il web scraping.

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 Selenium in modalità headless utilizzando il driver web di Chrome.

Sono disponibili molte altre opzioni della riga di comando di Google Chrome, che non ho trattato in questo articolo. Queste opzioni della riga di comando possono essere utili per il tuo progetto. Puoi trovare tutte le opzioni della riga di comando di Google Chrome supportate nella pagina Elenco delle opzioni della riga di comando di Chromium di Peter Beverloo.

SuperTuxKart per Linux
SuperTuxKart è un fantastico titolo progettato per offrirti l'esperienza di Mario Kart gratuitamente sul tuo sistema Linux. È piuttosto impegnativo e ...
Tutorial Battaglia per Wesnoth
The Battle for Wesnoth è uno dei giochi di strategia open source più popolari a cui puoi giocare in questo momento. Non solo questo gioco è in svilupp...
0 A.D. Tutorial
Tra i tanti giochi di strategia in circolazione, 0 A.D. riesce a distinguersi come un titolo completo e un gioco molto profondo e tattico nonostante s...