Kjører selen med krom med krom

Kjører selen med krom med krom
Hvis du vil gjøre Selenium Web Automation eller Web Scrapping med Chrome Web Browser, kjører den som standard den grafiske versjonen av Chrome -nettleseren som standard. Det er ikke noe problem når du kjører selenskriptet ditt fra et Linux grafisk skrivebordsmiljø (i.e., Gnome 3, KDE, XFCE4). Men hvis du vil kjøre selenskriptet i et hodeløst miljø (jeg.e., Ubuntu Server, CentOS/RHEL Server) der du ikke har noe grafisk skrivebordsmiljø installert, så vil dette ikke fungere.

Heldigvis kan du konfigurere Selenium til å kjøre Chrome -nettleseren i hodeløs modus. I denne modusen kjøres Chrome -nettleseren uten noe grafisk brukergrensesnitt. Så, selen kan gjøre nettautomatisering, skraping av nettet, nettleserprøver osv. Bruke Chrome -nettleseren i 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 -skriptene ved å bruke Python 3 -programmeringsspråket. Så la oss komme i gang.

Forutsetninger:

For å prøve ut 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. Sørg for å sjekke dem ut hvis du trenger hjelp.

Forbereder Python 3 Virtual Environment for prosjektet:

Python Virtual Environment brukes til å lage en isolert Python -prosjektkatalog. Python -modulene du installerer ved hjelp av PIP vil bare bli 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 kromhodefri/ I din nåværende arbeidskatalog som følger:

$ mkdir -pv kromhodefri/drivere

Naviger til den nyopprettede prosjektkatalogen kromhodefri/ følgende:

$ CD kromhodefri /

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

$ virtualenv .Venv

Python virtuelt miljø skal opprettes i .Venv/ Katalog i prosjektkatalogen din.

Aktiver Python Virtual Environment of Your Project Directory med følgende kommando:

$ kilde .Venv/bin/aktiverer

Installere Selenium Python Library:

Selenium Library 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.

Først åpner du Google Chrome og besøk Chrome: // Innstillinger/hjelp.

Når siden har lastet inn, bør du finne Google Chrome -versjonsnummeret i Om krom seksjon. Legg merke til de tre første delene av versjonsnummeret som merket i skjermdumpen nedenfor.

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

I Gjeldende utgivelser Seksjon, Chrome Web Driver for de nyeste utgivelsene av Google Chrome -nettleseren skal være tilgjengelig, som du kan se på skjermdumpen nedenfor. En av de nåværende Chrome Web Driver -utgivelsene skal ha et samsvarende versjonsnummer med Google Chrome -nettleseren. De tre første delene av versjonsnummeret til Chrome Web Driver og Google Chrome nettleser må samsvare.

Hvis versjonen du leter etter ikke er i Gjeldende utgivelser seksjon, bla litt ned, og du skal kunne finne den.

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

Chrome Web Driver Archive skal lastes ned.

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

$ ls -lh ~/nedlastinger

Trekke ut Chromedriver_linux64.glidelås arkiv fra ~/Nedlastinger katalog til drivere/ Katalog for prosjektet ditt som følger:

$ Unzip ~/nedlastinger/Chromedriver_Linux64.Zip -D -drivere/

En ny fil Chromedriver skal opprettes i drivere/ Katalog for prosjektet ditt når Chrome Web Driver Archive er trukket ut, som du kan se på skjermbildet nedenfor.

Testing Chrome Web Driver i hodeløs modus:

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

Lag først et nytt Python -skript EX01.py I prosjektkatalogen din og skriv inn følgende koder i den.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
fra Selenium.Webdriver.krom.alternativer importalternativer
ChromeOptions = Alternativer ()
kromoptions.Hodeløs = sant
nettleser = webdriver.Krom (kjørbar_path = "./Drivere/Chromedriver ", Options = ChromeOptions)
nettleser.få ("http: // linuxhint.com ")
Print ("Tittel: % s" % nettleser.tittel)
nettleser.slutte()

Når du er ferdig, kan du lagre EX01.py Python -manus.

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 fortelle Chrome -sjåføren om å passere noen ekstra alternativer. Denne linjen skaper en Alternativer objekt som vi kan gi videre til Chrome Web Driver senere.

Du kan kjøre Google Chrome i hodeløs modus bare ved å stille inn Hodeløs eiendom til kromoptions ha innvendinger ekte.

Eller du kan bruke add_argument () metode for kromoptions objekt å legge til -Hodeløs Kommandolinje argument for å kjøre Google Chrome i hodeløs modus ved hjelp av Selenium Chrome Web Driver.

Du kan bruke en Webdriver.Krom () Metode for å initialisere/kjøre en Google Chrome nettleser fra Selenium. De kjørbar_path Argument brukes til å fortelle Selenium å bruke Chromedriver binær fra drivere/ Katalogen til prosjektet. De alternativer Argument ber Selenium om å bruke våre tilpassede alternativer kromoptions.

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 nettleser i bakgrunnen (i hodeløs modus).

Når siden har lastet inn, nettleser.tittel Eiendom vil ha tittelen på nettstedet. Python skrive ut() Metode skriver ut tittelen på nettstedet på konsollen.

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

For å teste om selen kan fungere i hodeløs modus, kjør Python -skriptet EX01.py følgende:

$ 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 Linux Headless -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 -driveren:

I denne delen skal jeg vise deg et eksempel på skraping av nettet i Selenium ved hjelp av Chrome Web Driver i hodeløs modus.

Først, besøk den tilfeldige navnegeneratoren.Info fra Google Chrome eller annen nettleser. Dette nettstedet vil generere 10 tilfeldige navn hver gang du laster inn siden, som du kan se på skjermbildet nedenfor. Målet vårt er å hente ut disse tilfeldige navnene ved hjelp av selen i hodeløs modus.

For å finne ut listenes 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 merket på skjermbildet nedenfor.

Sopp deretter over listen over Tilfeldige navn. Listen skal fremheves som merket på skjermdumpen nedenfor. Trykk deretter på venstre museknapp (LMB) for å velge listen.

HTML -koden på listen skal fremheves i Elementer Tab of the Chrome Developer Tool. Her er listen over tilfeldige navn inni en 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, hvert av navnene er i en li element.

Fra dette kan vi si det for å komme til li Tagger, vi må følge div.Resultater> ol.Namelist> Li

Så vår CSS -velger vil være div.Resultater ol.Namelist Li (Bare bytt ut > tegn med hvitrommet)

For å trekke ut disse tilfeldige navnene, oppretter du et nytt Python -skript EX02.py og skriv inn følgende koder i den.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
fra Selenium.Webdriver.krom.alternativer importalternativer
ChromeOptions = Alternativer ()
kromoptions.Hodeløs = sant
nettleser = webdriver.Krom (kjørbar_path = "./Drivere/Chromedriver ", Options = ChromeOptions)
nettleser.få ("http: // tilfeldig-navn-generator.info/")
Namelist = nettleser.find_elements_by_css_selector ('div.Resultater ol.namelist li ')
For navn i Namelist:
trykk (navn.tekst)
nettleser.slutte()

Når du er ferdig, kan du lagre EX02.py Python -manus.

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 Random Name Generator 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.Namelist Li For å finne navnelisten. Deretter lagres navnelisten i navneliste variabel.

I linje 13 og 14, a til sløyfe er vant til å iterere gjennom navneliste liste over li elementer. I hver iterasjon er innholdet i li elementet skrives ut på konsollen.

Kjør nå Python -skriptet EX02.py følgende:

$ Python3 EX02.py

Som du ser, Python -skriptet EX02.py hentet alle tilfeldige navnene fra websiden.

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

Problemer du kan møte Selenium 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 å sette inn kromoptions.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 mens du kjører Selenium i hodeløs modus ved hjelp av Chrome Web Driver.

Som standard gjør Google Chrome -nettleseren mye sandboksing (kjører mange ting i et isolert miljø). Dette kan forårsake problemer når du kjører selen i hodeløs modus ved hjelp av Chrome Web Driver. Du kan deaktivere sandboksing for Google Chrome ved å bruke -No-Sandbox flagg.

Å legge til -No-Sandbox flagg, legg til følgende linje før du initialiserer selenkromdriveren ved hjelp av Webdriver.Krom () metode (linje 8 i EX01.py Python manus).

kromoptions.add_argument ("-no-shandbox")

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

For eksempel å stille den virtuelle skjermbredden til 1280 px og høyde til 720 px, Legg til -vindusstørrelse Alternativ for kommandolinje før initialisering av selen kromdriver ved bruk av Webdriver.Krom () metode (linje 8 i EX01.py Python Script) som følger:

kromoptions.add_argument ("-vindusstørrelse = 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 skal 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 ikke gjøre det. I så fall kan det hende at Selenium ikke kan 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.

Å legge til -deaktiver-gpu flagg, legg til følgende linje før du initialiserer selenkromdriveren ved hjelp av Webdriver.Krom () metode (linje 8 i EX01.py Python manus).

kromoptions.add_argument (“-deaktiver-gpu”)

Konklusjon:

I denne artikkelen har jeg vist deg hvordan du setter opp Selenium i hodeløs modus ved hjelp av Chrome Web Driver. Jeg har dekket det grunnleggende, som vil hjelpe deg å komme i gang med headless selen nettleserautomatisering, nettprøving og skraping av nettet.

Jeg har også dekket noen av Google Chrome -kommandolinjens argumenter/flagg som du kan bruke til å løse noen av problemene du måtte ha mens du kjører Selenium i hodeløs modus ved hjelp av Chrome Web Driver.

Det er mange flere Google Chrome-kommandolinjealternativer tilgjengelig, som jeg ikke dekket i denne artikkelen. Disse kommandolinjealternativene kan være nyttige for prosjektet ditt. Du kan finne alle de støttede Google Chrome-kommandolinjealternativene i listen over Chromium-kommandolinjebrytere med Peter Beverloo-side.