Selen

Kjører Selenium Headless med Chrome

Kjører Selenium Headless med Chrome
Hvis du vil gjøre Selenium-automatisering eller utrangering med Chrome-nettleseren, kjører den den grafiske versjonen av Chrome-nettleseren som standard. Det er ikke et problem når du kjører Selenium-skriptet fra et grafisk Linux-skrivebordsmiljø (i.e., GNOME 3, KDE, XFCE4). Men hvis du vil kjøre Selenium-skriptet ditt i et hodeløst miljø (i.e., Ubuntu Server, CentOS / RHEL Server) der du ikke har noe grafisk skrivebordsmiljø installert, vil dette ikke fungere.

Heldigvis kan du konfigurere Selen til å kjøre Chrome-nettleseren i hodeløs modus. I denne modusen vil Chrome-nettleseren kjøre uten noe grafisk brukergrensesnitt. Så Selen kan utføre nettautomatisering, utrangering av nett, nettlesertester osv. bruker Chrome-nettleseren på Linux-servere der du ikke har noe grafisk skrivebordsmiljø installert.

I denne artikkelen skal jeg vise deg hvordan du kjører Selenium med Chrome-nettleseren i hodeløs modus. Jeg vil bruke Selenium Python-biblioteket og skrive Selenium-manusene ved hjelp av Python 3-programmeringsspråket. Så la oss komme i gang.

Forutsetninger:

For å prøve kommandoene og eksemplene fra denne artikkelen må du ha,

1) En Linux-distribusjon (helst Ubuntu) installert på datamaskinen din.
2) Python 3 installert på datamaskinen din.
3) PIP 3 installert på datamaskinen din.
4) Google Chrome installert på datamaskinen din.

Du kan finne mange artikler om disse emnene på LinuxHint.com. Husk å sjekke dem ut hvis du trenger hjelp.

Klargjøre Python 3 Virtual Environment for prosjektet:

Python Virtual Environment brukes til å lage en isolert Python-prosjektkatalog. Python-modulene du installerer ved hjelp av PIP, blir bare installert i prosjektkatalogen, ikke globalt.

Python virtualenv modul brukes til å administrere Python virtuelle miljøer.

Du kan installere Python virtualenv modul globalt ved hjelp av PIP 3 som følger:

$ sudo pip3 installer virtualenv

Python virtualenv skal installeres.

Lag en prosjektkatalog krom-hodeløs / i din nåværende arbeidskatalog som følger:

$ mkdir -pv krom-hodeløs / drivere

Naviger til den nyopprettede prosjektkatalogen krom-hodeløs / som følger:

$ cd krom-hodeløs /

Opprett et virtuelt Python-miljø i prosjektkatalogen din med følgende kommando:

$ virtualenv .venv

Python virtuelt miljø bør opprettes i .venv / katalog i prosjektkatalogen.

Aktiver det virtuelle Python-miljøet i prosjektkatalogen din med følgende kommando:

$ kilde .venv / bin / aktiver

Installere Selenium Python Library:

Selenium-biblioteket er tilgjengelig i det offisielle Python PyPI-depotet.

Du kan installere Selenium Python-biblioteket ved hjelp av PIP 3 som følger:

$ pip3 installer selen

Selenium Python-biblioteket skal installeres.

Installere Chrome Web Driver:

Chrome Web Driver lar deg kontrollere eller automatisere Google Chrome-nettleseren fra Selenium.

I denne delen skal jeg vise deg hvordan du installerer Chrome Web Driver.

Åpne først Google Chrome og besøk chrome: // settings / help.

Når siden er lastet inn, bør du finne Google Chrome-versjonsnummeret i Om Chrome seksjon. Legg merke til de tre første seksjonene av versjonsnummeret som markert i skjermbildet nedenfor.

For å laste ned Chrome Web Driver, besøk den offisielle Chrome Driver-nedlastingssiden.

I Nåværende utgivelser seksjon, Chrome Web Driver for de nyeste versjonene av Google Chrome-nettleseren, bør være tilgjengelig, som du kan se på skjermbildet nedenfor. En av de nåværende utgivelsene av Chrome Web Driver bør ha et samsvarende versjonsnummer med Google Chrome-nettleseren din. De tre første seksjonene i versjonsnummeret til Chrome Web Driver og Google Chrome nettleser må samsvare.

Hvis versjonen du leter etter ikke er i Nåværende utgivelser delen, bla litt nedover, og du skal kunne finne den.

Når du klikker på versjonsnummeret til Chrome Web Driver, bør det ta nedlastingssiden. Klikk på chromedriver_linux64.glidelås filen herfra.

Chrome Web Driver-arkivet skal lastes ned.

Den nedlastede chromedriver_linux64.glidelås filen skal være i din ~ / Nedlastinger katalog.

$ ls -lh ~ / Nedlastinger

Pakk ut chromedriver_linux64.glidelås arkiv fra ~ / Nedlastinger katalog til drivere / katalog over prosjektet ditt som følger:

$ unzip ~ / Nedlastinger / chromedriver_linux64.zip -d drivere /

En ny fil chromedriver skal opprettes i drivere / katalog av prosjektet ditt når Chrome Web Driver-arkivet er hentet, som du kan se på skjermbildet nedenfor.

Testing av Chrome Web Driver i hodeløs modus:

I denne delen skal jeg vise deg hvordan du kjører Selen ved hjelp av Chrome Driver i hodeløs modus.

Først oppretter du et nytt Python-skript ex01.py i prosjektkatalogen din og skriv inn følgende kodelinjer i den.

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
fra selen.webdriver.krom.alternativer importere Alternativer
chromeOptions = Alternativer ()
kromalternativer.hodeløs = Sant
nettleser = webdriver.Chrome (executable_path = "./ drivers / chromedriver ", options = chromeOptions)
nettleser.få ("http: // linuxhint.com ")
skriv ut ("Tittel:% s"% nettleser.tittel)
nettleser.slutte()

Når du er ferdig, lagrer du ex01.py Python-skript.

Disse linjene importerer alle nødvendige ting fra selen bibliotek.

Som jeg har sagt tidligere, prøver Chrome-driveren som standard å kjøre Google Chrome i grafisk modus. For å kjøre Google Chrome i hodeløs modus, må vi be Chrome-driveren om å gi noen ekstra alternativer. Denne linjen skaper en Alternativer objekt som vi kan videreføre til Chrome-nettdriveren senere.

Du kan kjøre Google Chrome i hodeløs modus ved å stille inn hodeløs eiendommen til kromalternativer ha innvendinger ekte.

Eller du kan bruke add_argument () metoden for kromalternativer objekt å legge til -hodeløs kommandolinjeargument for å kjøre Google Chrome i hodeløs modus ved hjelp av Selenium Chrome-nettdriveren.

Du kan bruke en webdriver.Chrome () metode for å initialisere / kjøre en Google Chrome nettleser fra Selenium. De kjørbar sti argumentet brukes til å fortelle Selenium å bruke chromedriver binær fra drivere / katalog av prosjektet. De alternativer argument ber Selenium å bruke våre tilpassede alternativer kromalternativer.

Når Selenium kjører en Google Chrome-nettleser ved hjelp av Selenium Chrome Web Driver, returnerer den en nettleser gjenstand. Vi kan bruke den til å kontrollere Google Chrome-forekomsten senere.

De nettleser.få() metoden laster linuxhint.com nettsted i Google Chrome-nettleseren i bakgrunnen (i hodeløs modus).

Når siden lastes inn, nettleser.tittel eiendommen vil ha tittelen på nettstedet. Python skrive ut() metoden skriver ut tittelen på nettstedet på konsollen.

Og så nettleser.slutte() metoden lukker Google Chrome-nettleseren.

For å teste om Selenium kan fungere i hodeløs modus, kjør Python-skriptet ex01.py som følger:

$ python3 ex01.py

Den skal skrive ut tittelen på nettstedet på konsollen uten å åpne Google Chrome-nettleseren i grafisk modus.

Bare for å vise deg at det fungerer fra hodeløse Linux-servere (der ingen grafisk brukergrensesnitt er installert), har jeg kjørt Python-skriptet ex01.py på Ubuntu Server 20.04 LTS. Som du ser, fungerer manuset helt fint.

Nettskraping med selen i hodeløs modus ved hjelp av Chrome Web Driver:

I denne delen skal jeg vise deg et eksempel på skroting av nett i Selenium ved hjelp av Chrome-nettdriveren i hodeløs modus.

Først besøker du generatoren for tilfeldige navn.info fra Google Chrome eller andre nettlesere. Dette nettstedet genererer 10 tilfeldige navn hver gang du laster inn siden på nytt, som du kan se på skjermbildet nedenfor. Målet vårt er å trekke ut disse tilfeldige navnene ved hjelp av Selen i hodeløs modus.

For å finne ut listens HTML-struktur, må du åpne Chrome Developer Tool. For å gjøre det, trykk på høyre museknapp (RMB) på siden og klikk på Undersøke eller trykk + + Jeg.

Chrome Developer Tool skal åpnes. Klikk på Inspiser ikonet () som markert i skjermbildet nedenfor.

Hold deretter markøren over listen over Tilfeldige navn. Listen skal være uthevet som markert i skjermbildet nedenfor. Trykk deretter på venstre museknapp (LMB) for å velge listen.

HTML-koden til listen skal være uthevet i Elementer fanen i Chrome Developer Tool. Her er listen over tilfeldige navn inne i a div element. De div elementet har klasse Navn resultater. Inne i den har vi en ol element med klasse Navn navneliste. Inne i ol element, er hvert av navnene i en li element.

Fra dette kan vi si at for å komme til li koder, må vi følge div.resultater> ol.navneliste> li

Så, vår CSS-velger vil være div.resultater ol.navneliste li (bare bytt ut > tegn med hvitt mellomrom)

For å trekke ut disse tilfeldige navnene, opprett et nytt Python-skript ex02.py og skriv inn følgende kodelinjer i den.

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
fra selen.webdriver.krom.alternativer importere Alternativer
chromeOptions = Alternativer ()
kromalternativer.hodeløs = Sant
nettleser = webdriver.Chrome (executable_path = "./ drivers / chromedriver ", options = chromeOptions)
nettleser.get ("http: // random-name-generator.info / ")
nameList = nettleser.find_elements_by_css_selector ('div.resultater ol.navneliste li ')
for navn i navnListe:
skriv ut (navn.tekst)
nettleser.slutte()

Når du er ferdig, lagrer du ex02.py Python-skript.

Jeg har forklart linjene 1-8 i den tidligere delen av denne artikkelen. Disse er de samme som i ex01.py.

Linje 10 laster inn nettstedet for tilfeldige navnegeneratorer ved hjelp av nettleser.få() metode.

Linje 11 velger navnelisten ved hjelp av nettleser.find_elements_by_css_selector () metode. Denne metoden bruker CSS-velgeren div.resultater ol.navneliste li for å finne navnelisten. Deretter lagres navnelisten i navneliste variabel.

I linje 13 og 14, a til loop brukes til å gjenta gjennom navneliste liste over li elementer. I hver iterasjon, innholdet i li elementet er trykt på konsollen.

Kjør nå Python-skriptet ex02.py som følger:

$ python3 ex02.py

Som du kan se, Python-skriptet ex02.py hentet alle tilfeldige navn fra websiden.

Hvis du kjører skriptet en gang til, skal det returnere en ny liste over tilfeldige navn, som du kan se på skjermbildet nedenfor.

Problemer du kan møte med å løpe selen i hodeløs modus:

Du har sett tidligere at det er like enkelt å kjøre Selen i hodeløs modus ved hjelp av Chrome-driveren som å stille inn kromalternativer.hodeløs flagg til ekte.

Denne løsningen fungerer kanskje ikke for deg på noen Linux-distribusjoner. I denne delen skal jeg snakke om noen av problemene du kan møte når du kjører Selen i hodeløs modus ved hjelp av Chrome nettdriver.

Som standard gjør Google Chrome-nettleseren mye sandboksing (kjører mange ting i et isolert miljø). Dette kan føre til problemer når du kjører Selenium i hodeløs modus ved hjelp av Chrome-nettdriveren. Du kan deaktivere sandkasting for Google Chrome ved å bruke -ingen sandkasse flagg.

For å legge til -ingen sandkasse flagg, legg til følgende linje før du initialiserer Selenium Chrome-driveren webdriver.Chrome () metode (linje 8 i ex01.py Python-skript).

kromalternativer.add_argument ("- no-sandbox")

Du kan ha problemer med å gjøre visse ting i Google Chrome-nettleseren fra Selen, som å ta skjermbilder av nettstedet og så videre. Dette kan skje fordi Google Chrome kan angi feil virtuell skjermoppløsning i hodeløs modus. Så nettstedet ditt ser kanskje ikke riktig ut. Du kan angi ønsket virtuell skjermoppløsning for Google Chrome-nettleseren i hodeløs modus ved hjelp av -vindusstørrelse kommandolinjealternativ.

For eksempel å sette den virtuelle skjermbredden til 1280 px og høyde til 720 px, Legg til -vindusstørrelse kommandolinjealternativ før du initialiserer Selenium Chrome-driveren ved hjelp av webdriver.Chrome () metode (linje 8 i ex01.py Python-skript) som følger:

kromalternativer.add_argument ("- window-size = 1280,720")

Serveren din har kanskje ikke en GPU installert, eller den kan ha en GPU som Google Chrome-nettleseren ikke vet hvordan du bruker. Som standard bør Google Chrome automatisk deaktivere GPU-akselerasjon hvis en GPU ikke er tilgjengelig, eller hvis en ikke-støttet GPU er tilgjengelig. I noen tilfeller kan det mislykkes. I så fall kan ikke Selenium kjøre Google Chrome-nettleseren i hodeløs modus. For å løse dette problemet må du deaktivere GPU-akselerasjon ved hjelp av -deaktiver-gpu flagg.

For å legge til -deaktiver-gpu flagg, legg til følgende linje før du initialiserer Selenium Chrome-driveren webdriver.Chrome () metode (linje 8 i ex01.py Python-skript).

kromalternativer.add_argument (“- deaktiver-gpu”)

Konklusjon:

I denne artikkelen har jeg vist deg hvordan du setter opp Selen i hodeløs modus ved hjelp av Chrome-nettdriveren. Jeg har dekket det grunnleggende, som vil hjelpe deg i gang med hodeløs automatisering av Selen-nettleser, nettesting og nettskraping.

Jeg har også dekket noen av Google Chrome-kommandolinjeargumentene / flaggene som du kan bruke til å løse noen av problemene du kan ha når du kjører Selen i hodeløs modus ved hjelp av Chrome-nettdriveren.

Det er mange flere tilgjengelige kommandolinjealternativer for Google Chrome, som jeg ikke dekket i denne artikkelen. Disse kommandolinjealternativene kan være nyttige for prosjektet ditt. Du finner alle støttede Google Chrome-kommandolinjealternativer i listen over Chromium Command Line Switches av Peter Beverloo-siden.

Installer det siste OpenRA-strategispillet på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spillmotor som gjenskaper de tidlige Westwood-spillene som den klassiske Command & Conquer: Red Alert. Di...
Installer nyeste Dolphin Emulator for Gamecube & Wii på Linux
Dolphin Emulator lar deg spille de valgte Gamecube- og Wii-spillene dine på Linux Personal Computers (PC). Som en fritt tilgjengelig og åpen kildekod...
Hvordan bruke GameConqueror Cheat Engine i Linux
Artikkelen dekker en guide om bruk av GameConqueror-juksemotoren i Linux. Mange brukere som spiller spill på Windows bruker ofte "Cheat Engine" -appli...