Selen

Kører Selen Headless med Chrome

Kører Selen Headless med Chrome
Hvis du vil gøre Selenium-webautomatisering eller web-skrotning med Chrome-webbrowseren, kører den den grafiske version af Chrome-webbrowseren som standard. Det er ikke et problem, når du kører dit Selenium-script fra et grafisk Linux-miljø (i.e., GNOME 3, KDE, XFCE4). Men hvis du vil køre dit Selenium-script i et hovedløst miljø (i.e., Ubuntu Server, CentOS / RHEL Server) hvor du ikke har noget grafisk skrivebordsmiljø installeret, så fungerer dette ikke.

Heldigvis kan du konfigurere Selen til at køre Chrome-browseren i hovedløs tilstand. I denne tilstand kører Chrome-webbrowseren uden nogen grafisk brugergrænseflade. Så Selen kan udføre webautomatisering, skrotning af web, browsertest osv. ved hjælp af Chrome-webbrowseren på Linux-servere, hvor du ikke har noget grafisk skrivebordsmiljø installeret.

I denne artikel vil jeg vise dig, hvordan du kører Selenium med Chrome-browseren i hovedløs tilstand. Jeg bruger Selenium Python-biblioteket og skriver Selenium-scripts ved hjælp af Python 3 programmeringssprog. Så lad os komme i gang.

Forudsætninger:

For at prøve kommandoerne og eksemplerne fra denne artikel skal du have,

1) En Linux-distribution (helst Ubuntu) installeret på din computer.
2) Python 3 installeret på din computer.
3) PIP 3 installeret på din computer.
4) Google Chrome installeret på din computer.

Du kan finde mange artikler om disse emner på LinuxHint.com. Sørg for at tjekke dem ud, hvis du har brug for hjælp.

Forberedelse af Python 3 Virtual Environment til projektet:

Python Virtual Environment bruges til at oprette en isoleret Python-projektmappe. De Python-moduler, du installerer ved hjælp af PIP, installeres kun i projektmappen, ikke globalt.

Python virtualenv modul bruges til at styre virtuelle Python-miljøer.

Du kan installere Python virtualenv modul globalt ved hjælp af PIP 3 som følger:

$ sudo pip3 installer virtualenv

Python virtualenv skal installeres.

Opret en projektmappe krom-hovedløs / i din nuværende arbejdsmappe som følger:

$ mkdir -pv chrome-headless / drivers

Naviger til din nyoprettede projektmappe krom-hovedløs / som følger:

$ cd krom-hovedløs /

Opret et virtuelt Python-miljø i din projektmappe med følgende kommando:

$ virtualenv .venv

Python virtuelt miljø skal oprettes i .venv / katalog i dit projektmappe.

Aktiver det virtuelle Python-miljø i dit projektkatalog med følgende kommando:

$ kilde .venv / bin / aktiver

Installation af Selenium Python Library:

Selenium-biblioteket er tilgængeligt i det officielle Python PyPI-arkiv.

Du kan installere Selenium Python-biblioteket ved hjælp af PIP 3 som følger:

$ pip3 installer selen

Selenium Python-bibliotek skal installeres.

Installation af Chrome Web Driver:

Chrome Web Driver giver dig mulighed for at kontrollere eller automatisere Google Chrome-webbrowseren fra Selenium.

I dette afsnit vil jeg vise dig, hvordan du installerer Chrome Web Driver.

Åbn først Google Chrome og besøg chrome: // settings / help.

Når siden er indlæst, skal du finde Google Chrome-versionsnummeret i Om Chrome afsnit. Bemærk de første 3 sektioner af versionsnummeret som markeret i nedenstående skærmbillede.

For at downloade Chrome Web Driver skal du besøge den officielle Chrome Driver download-side.

I Aktuelle udgivelser sektion, Chrome Web Driver til de nyeste udgivelser af Google Chrome-webbrowseren skal være tilgængelig, som du kan se på skærmbilledet nedenfor. En af de nuværende udgivelser af Chrome Web Driver skal have et matchende versionsnummer med din Google Chrome-webbrowser. De første 3 sektioner i versionen af ​​Chrome Web Driver og Google Chrome webbrowser skal matche.

Hvis den version, du leder efter, ikke findes i Nuværende udgivelser sektion, rul lidt ned, og du skal kunne finde den.

Når du klikker på versionsnummeret på Chrome Web Driver, skal det gå til dens download-side. Klik på chromedriver_linux64.lynlås fil herfra.

Chrome Web Driver-arkivet skal downloades.

Den downloadede chromedriver_linux64.lynlås filen skal være i din ~ / Downloads vejviser.

$ ls -lh ~ / Downloads

Uddrag chromedriver_linux64.lynlås arkiv fra ~ / Downloads bibliotek til drivere / katalog over dit projekt som følger:

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

En ny fil chromedriver skal oprettes i drivere / katalog over dit projekt, når Chrome Web Driver-arkivet er udpakket, som du kan se i skærmbilledet nedenfor.

Test af Chrome Web Driver i hovedløs tilstand:

I dette afsnit vil jeg vise dig, hvordan du kører Selen ved hjælp af Chrome Driver i hovedløs tilstand.

Opret først et nyt Python-script ex01.py i dit projektmappe, og indtast følgende linjer med koder i det.

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
fra selen.webdriver.krom.indstillinger til importindstillinger
chromeOptions = Indstillinger ()
chromeValg.headless = Sandt
browser = webdriver.Chrome (eksekverbar_sti = "./ drivers / chromedriver ", optioner = chromeOptions)
browser.get ("http: // linuxhint.com ")
udskriv ("Titel:% s"% browser.titel)
browser.Afslut()

Når du er færdig, skal du gemme ex01.py Python-script.

Disse linjer importerer alle de nødvendige ting fra selen bibliotek.

Som jeg har sagt tidligere, forsøger Chrome-driveren som standard at køre Google Chrome i grafisk tilstand. For at køre Google Chrome i hovedløs tilstand skal vi bede Chrome-driveren om at give nogle ekstra muligheder. Denne linje skaber en Muligheder objekt, som vi senere kan videregive til Chrome-webdriveren.

Du kan køre Google Chrome i hovedløs tilstand ved blot at indstille hovedløs ejendommen til chromeValg protesterer mod Rigtigt.

Eller du kan bruge tilføjelsesargument () metode til chromeValg objekt til at tilføje -hovedløs kommandolinjeargument til at køre Google Chrome i hovedløs tilstand ved hjælp af Selenium Chrome-webdriveren.

Du kan bruge en webdriver.Chrome () metode til at initialisere / køre en Google Chrome-webbrowser fra Selenium. Det eksekverbar_sti argument bruges til at fortælle selen at bruge chromedriver binær fra drivere / projektmappe. Det muligheder argument fortæller Selenium at bruge vores brugerdefinerede muligheder chromeValg.

Når Selenium kører en Google Chrome-webbrowser ved hjælp af Selenium Chrome Web Driver, returnerer den en browser objekt. Vi kan bruge det til at kontrollere Google Chrome-forekomsten senere.

Det browser.få() metoden indlæser linuxhint.com websted i Google Chrome-webbrowseren i baggrunden (i hovedløs tilstand).

Når siden indlæses, browser.titel ejendom har titlen på webstedet. Python Print() metode udskriver titlen på webstedet på konsollen.

Derefter browser.Afslut() metode lukker Google Chrome-webbrowseren.

For at teste, om Selen kan arbejde i hovedløs tilstand, skal du køre Python-scriptet ex01.py som følger:

$ python3 ex01.py

Det skal udskrive titlen på webstedet på konsollen uden at åbne Google Chrome-webbrowseren i grafisk tilstand.

Bare for at vise dig, at det fungerer fra Linux-hovedløse servere (hvor der ikke er installeret en grafisk brugergrænseflade), har jeg kørt Python-scriptet ex01.py på Ubuntu Server 20.04 LTS. Som du kan se, fungerer scriptet fint.

Webskrabning med selen i hovedløs tilstand ved hjælp af Chrome Web Driver:

I dette afsnit vil jeg vise dig et eksempel på webskrotning i Selen ved hjælp af Chrome-webdriveren i hovedløs tilstand.

Besøg først tilfældiggeneratoren.info fra Google Chrome eller enhver anden webbrowser. Dette websted genererer 10 tilfældige navne hver gang du genindlæser siden, som du kan se på skærmbilledet nedenfor. Vores mål er at udtrække disse tilfældige navne ved hjælp af Selen i hovedløs tilstand.

For at finde ud af listens HTML-struktur skal du åbne Chrome Developer Tool. For at gøre det skal du trykke på højre museknap (RMB) på siden og klikke på Inspicere eller tryk på + + jeg.

Chrome Developer Tool skal åbnes. Klik på Undersøg ikonet () som markeret i skærmbilledet nedenfor.

Hold derefter markøren over listen over Tilfældige navne. Listen skal fremhæves som markeret i skærmbilledet nedenfor. Tryk derefter på venstre museknap (LMB) for at vælge listen.

HTML-koden på listen skal fremhæves i Elementer fanen i Chrome Developer Tool. Her er listen over tilfældige navne inde i en div element. Det div elementet har klasse navn resultater. Inde i det har vi en ol element med klasse navn navneliste. Inde i ol element, hvert af navnene er i en li element.

Fra dette kan vi sige det for at komme til li tags, vi skal følge div.resultater> ol.navneliste> li

Så vores CSS-vælger vil være div.resultater ol.navneliste li (udskift bare > tegn med mellemrum)

For at udtrække disse tilfældige navne skal du oprette et nyt Python-script ex02.py og indtast følgende linjer med koder i den.

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
fra selen.webdriver.krom.valgmuligheder importmuligheder
chromeOptions = Indstillinger ()
chromeValg.headless = Sandt
browser = webdriver.Chrome (eksekverbar_sti = "./ drivers / chromedriver ", optioner = chromeOptions)
browser.get ("http: // random-name-generator.info / ")
nameList = browser.find_elements_by_css_selector ('div.resultater ol.nameList li ')
for navn i navnListe:
Print navn.tekst)
browser.Afslut()

Når du er færdig, skal du gemme ex02.py Python-script.

Jeg har forklaret linjerne 1-8 i det tidligere afsnit af denne artikel. Disse er de samme som i ex01.py.

Linje 10 indlæser webstedet for tilfældig navnegenerator ved hjælp af browser.få() metode.

Linje 11 vælger navnelisten ved hjælp af browser.find_elements_by_css_selector () metode. Denne metode bruger CSS-vælgeren div.resultater ol.navneliste li for at finde navnelisten. Derefter gemmes navnelisten i navneliste variabel.

I linje 13 og 14, a til loop bruges til at gentage gennem navneliste liste af li elementer. I hver iteration, indholdet af li elementet er trykt på konsollen.

Kør nu Python-scriptet ex02.py som følger:

$ python3 ex02.py

Som du kan se, Python-scriptet ex02.py hentede alle tilfældige navne fra websiden.

Hvis du kører scriptet en anden gang, skal det returnere en ny liste over tilfældige navne, som du kan se på skærmbilledet nedenfor.

Problemer, du måske står over for ved at køre selen i hovedløs tilstand:

Du har tidligere set, at kørsel af Selen i hovedløs tilstand ved hjælp af Chrome-driveren er lige så let som at indstille chromeValg.hovedløs flag til Rigtigt.

Denne løsning fungerer muligvis ikke for dig på nogle Linux-distributioner. I dette afsnit vil jeg tale om nogle af de problemer, du kan blive udsat for, når du kører Selen i hovedløs tilstand ved hjælp af Chrome-webdriveren.

Som standard udfører Google Chrome-webbrowseren meget sandboxing (kører mange ting i et isoleret miljø). Dette kan forårsage problemer, når du kører Selen i hovedløs tilstand ved hjælp af Chrome-webdriveren. Du kan deaktivere sandboxing til Google Chrome ved hjælp af -ingen sandkasse flag.

For at tilføje -ingen sandkasse flag, tilføj følgende linje inden initialisering af Selenium Chrome-driveren ved hjælp af webdriver.Chrome () metode (linje 8 i ex01.py Python-script).

chromeValg.add_argument ("- no-sandbox")

Du kan have problemer med at udføre bestemte ting i Google Chrome-webbrowseren fra Selenium som at tage skærmbilleder af hjemmesiden og så videre. Dette kan ske, fordi Google Chrome i hovedløs tilstand kan indstille forkert virtuel skærmopløsning. Så dit websted ser muligvis ikke rigtigt ud. Du kan indstille din ønskede virtuelle skærmopløsning til Google Chrome-webbrowser i hovedløs tilstand ved hjælp af -vinduesstørrelse kommandolinjemulighed.

For eksempel at indstille den virtuelle skærmbredde til 1280 px og højde til 720 px, tilføj -vinduesstørrelse kommandolinjemulighed inden initialisering af Selenium Chrome-driveren ved hjælp af webdriver.Chrome () metode (linje 8 i ex01.py Python-script) som følger:

chromeValg.add_argument ("- vinduesstørrelse = 1280,720")

Din server har muligvis ikke en GPU installeret, eller den har muligvis en GPU, som Google Chrome-webbrowseren ikke ved, hvordan den skal bruges. Som standard skal Google Chrome automatisk deaktivere GPU-acceleration, hvis en GPU ikke er tilgængelig, eller hvis en ikke-understøttet GPU er tilgængelig. I nogle tilfælde mislykkes det muligvis ikke. I så fald kan Selen muligvis ikke køre Google Chrome-webbrowseren i hovedløs tilstand. For at løse dette problem skal du deaktivere GPU-acceleration ved hjælp af -deaktiver-gpu flag.

For at tilføje -deaktiver-gpu flag, tilføj følgende linje inden initialisering af Selenium Chrome-driveren ved hjælp af webdriver.Chrome () metode (linje 8 i ex01.py Python-script).

chromeValg.add_argument (“- deaktiver-gpu”)

Konklusion:

I denne artikel har jeg vist dig, hvordan du konfigurerer Selen i hovedløs tilstand ved hjælp af Chrome-webdriveren. Jeg har dækket det grundlæggende, hvilket vil hjælpe dig med at komme i gang med hovedløs Selenium-browser-automatisering, webtest og webskrabning.

Jeg har også dækket nogle af Google Chrome-kommandolinjeargumenterne / flagene, som du kan bruge til at løse nogle af de problemer, du måtte have, mens du kører Selenium i hovedløs tilstand ved hjælp af Chrome-webdriveren.

Der er mange flere Google Chrome kommandolinjemuligheder til rådighed, som jeg ikke dækkede i denne artikel. Disse kommandolinjemuligheder kan være nyttige til dit projekt. Du kan finde alle de understøttede Google Chrome-kommandolinjemuligheder på listen over Chromium Command Line Switches af Peter Beverloo-siden.

Mus Museklik på venstre museknap fungerer ikke på Windows 10
Museklik på venstre museknap fungerer ikke på Windows 10
Hvis du bruger en dedikeret mus med din bærbare computer eller stationære computer, men musens venstre-klik-knap fungerer ikke på Windows 10/8/7 af en...
Mus Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Hvis du finder ud af, at din musemarkør hopper eller bevæger sig alene, automatisk tilfældigt, mens du skriver Windows-bærbar computer eller computer,...
Mus Sådan vender du musens og touchpadsens rulle retning i Windows 10
Sådan vender du musens og touchpadsens rulle retning i Windows 10
Mus og Touchpads gør ikke kun computing let, men mere effektiv og mindre tidskrævende. Vi kan ikke forestille os et liv uden disse enheder, men det er...