Selen

Kör Selen Headless med Chrome

Kör Selen Headless med Chrome
Om du vill göra Selen-webbautomation eller skrotning med Chrome-webbläsaren körs den grafiska versionen av Chrome-webbläsaren som standard. Det är inte ett problem när du kör ditt Selenium-skript från en grafisk Linux-miljö (i.e., GNOME 3, KDE, XFCE4). Men om du vill köra ditt Selenium-skript i en huvudlös miljö (i.e., Ubuntu Server, CentOS / RHEL Server) där du inte har någon grafisk skrivbordsmiljö installerad, då fungerar det inte.

Lyckligtvis kan du konfigurera Selen för att köra webbläsaren Chrome i huvudlöst läge. I det här läget körs Chrome-webbläsaren utan något grafiskt användargränssnitt. Så, Selen kan göra webbautomation, skrotning av webbläsare, webbläsartester osv. använder Chrome-webbläsaren i Linux-servrar där du inte har någon grafisk skrivbordsmiljö installerad.

I den här artikeln ska jag visa dig hur du kör Selenium med Chrome-webbläsaren i huvudlöst läge. Jag kommer att använda Selenium Python-biblioteket och skriva Selenium-skript med Python 3-programmeringsspråket. Så, låt oss komma igång.

Förutsättningar:

För att prova kommandona och exemplen från den här artikeln måste du ha,

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

Du kan hitta många artiklar om dessa ämnen på LinuxHint.com. Var noga med att kolla in dem om du behöver hjälp.

Förbereder Python 3 Virtual Environment för projektet:

Python Virtual Environment används för att skapa en isolerad Python-projektkatalog. Python-modulerna som du installerar med PIP installeras endast i projektkatalogen, inte globalt.

Pytonorm virtualenv modulen används för att hantera virtuella Python-miljöer.

Du kan installera Python virtualenv modul globalt med PIP 3 enligt följande:

$ sudo pip3 installera virtualenv

Pytonorm virtualenv bör installeras.

Skapa en projektkatalog krom-huvudlös / i din nuvarande arbetskatalog enligt följande:

$ mkdir -pv chrome-headless / drivers

Navigera till din nyskapade projektkatalog krom-huvudlös / som följer:

$ cd krom-huvudlös /

Skapa en virtuell Python-miljö i din projektkatalog med följande kommando:

$ virtualenv .venv

Python virtuell miljö bör skapas i .venv / katalog i din projektkatalog.

Aktivera den virtuella Python-miljön i din projektkatalog med följande kommando:

$ källa .venv / bin / aktivera

Installera Selenium Python Library:

Selenbibliotek finns tillgängligt i det officiella Python PyPI-förvaret.

Du kan installera Selenium Python-biblioteket med PIP 3 enligt följande:

$ pip3 installera selen

Selenium Python-biblioteket ska installeras.

Installera Chrome Web Driver:

Med Chrome Web Driver kan du styra eller automatisera webbläsaren Google Chrome från Selenium.

I det här avsnittet ska jag visa dig hur du installerar Chrome Web Driver.

Öppna först Google Chrome och besök chrome: // settings / help.

När sidan har laddats bör du hitta Google Chrome-versionsnumret i Om Chrome sektion. Observera de tre första avsnitten i versionsnumret som markeras i skärmdumpen nedan.

För att ladda ner Chrome Web Driver, besök den officiella nedladdningssidan för Chrome.

I Aktuella släpp avsnittet, Chrome Web Driver för de senaste versionerna av Google Chrome-webbläsaren bör vara tillgänglig, som du kan se på skärmdumpen nedan. En av de nuvarande versionerna av Chrome Web Driver ska ha ett matchande version med din Google Chrome-webbläsare. De tre första avsnitten i versionsnumret för Chrome Web Driver och Google Chrome webbläsare måste matcha.

Om versionen du letar efter inte finns i Aktuella utgåvor , bläddra ner lite, och du borde kunna hitta den.

När du klickar på versionsnumret för Chrome Web Driver, bör det gå till nedladdningssidan. Klicka på chromedriver_linux64.blixtlås fil härifrån.

Chrome Web Driver-arkivet ska laddas ner.

Den nedladdade chromedriver_linux64.blixtlås filen ska finnas i din ~ / Nedladdningar katalog.

$ ls -lh ~ / Nedladdningar

Extrahera chromedriver_linux64.blixtlås arkiv från ~ / Nedladdningar katalog till förare / katalog över ditt projekt enligt följande:

$ unzip ~ / Nedladdningar / chromedriver_linux64.zip -d drivrutiner /

En ny fil kromförare bör skapas i förare / katalog över ditt projekt när Chrome Web Driver-arkivet har extraherats, vilket du kan se på skärmdumpen nedan.

Testa Chrome Web Driver i huvudlöst läge:

I det här avsnittet ska jag visa dig hur du kör Selen med Chrome Driver i headless-läge.

Skapa först ett nytt Python-skript ex01.py i din projektkatalog och skriv in följande rader med koder i den.

från selenimportwebdriver
från selen.webbdrivare.allmänning.nycklar importerar nycklar
från selen.webbdrivare.krom.alternativ importalternativ
chromeOptions = Alternativ ()
chromealternativ.headless = Sant
webbläsare = webdriver.Chrome (executable_path = "./ drivers / chromedriver ", optioner = chromeOptions)
webbläsare.få ("http: // linuxhint.com ")
skriv ut ("Titel:% s"% webbläsare.titel)
webbläsare.sluta()

När du är klar sparar du ex01.py Python-skript.

Dessa rader importerar alla nödvändiga saker från selen bibliotek.

Som jag har sagt tidigare, försöker Chrome-drivrutinen som standard att köra Google Chrome i grafiskt läge. För att köra Google Chrome i huvudlöst läge måste vi be Chrome-drivrutinen att skicka några extra alternativ. Denna linje skapar en alternativ objekt som vi kan vidarebefordra till Chrome-webbdrivrutinen senare.

Du kan köra Google Chrome i headless-läge helt enkelt genom att ställa in huvudlös egendom för chromealternativ protestera mot Sann.

Eller så kan du använda add_argument () metod för chromealternativ objekt att lägga till -huvudlös kommandoradsargument för att köra Google Chrome i headless-läge med Selenium Chrome-webbdrivrutinen.

Du kan använda en webbdrivare.Krom() metod för att initiera / köra en Google Chrome-webbläsare från Selenium. De körbar väg argument används för att berätta för Selen att använda kromförare binär från förare / projektkatalogen. De alternativ argument berättar för Selenium att använda våra anpassade alternativ chromealternativ.

När Selenium kör en webbläsare Google Chrome med Selenium Chrome Web Driver, returnerar den en webbläsare objekt. Vi kan använda den för att styra Google Chrome-instansen senare.

De webbläsare.skaffa sig() metoden laddar linuxhint.com webbplats i webbläsaren Google Chrome i bakgrunden (i huvudlöst läge).

När sidan laddas, webbläsare.titel fastigheten kommer att ha titeln på webbplatsen. Python skriva ut() metoden skriver ut titeln på webbplatsen på konsolen.

Sedan webbläsare.sluta() metoden stänger webbläsaren Google Chrome.

För att testa om Selenium kan fungera i huvudlöst läge, kör Python-skriptet ex01.py som följer:

$ python3 ex01.py

Den ska skriva ut titeln på webbplatsen på konsolen utan att öppna webbläsaren Google Chrome i grafiskt läge.

Bara för att visa att det fungerar från Linux-huvudlösa servrar (där inget grafiskt användargränssnitt är installerat), jag har kört Python-skriptet ex01.py på Ubuntu Server 20.04 LTS. Som du kan se fungerar skriptet bra.

Webbskrapning med selen i huvudlöst läge med Chrome Web Driver:

I det här avsnittet ska jag visa dig ett exempel på webbskrotning i Selen med Chrome-webbdrivrutinen i huvudlöst läge.

Besök först random-name-generator.information från Google Chrome eller någon annan webbläsare. Denna webbplats genererar tio slumpmässiga namn varje gång du laddar om sidan, som du kan se på skärmdumpen nedan. Vårt mål är att extrahera dessa slumpmässiga namn med Selen i headless-läge.

För att ta reda på listans HTML-struktur måste du öppna Chrome Developer Tool. För att göra det, tryck på höger musknapp (RMB) på sidan och klicka på Inspektera eller tryck på + + Jag.

Chrome Developer Tool bör öppnas. Klicka på Inspektera ikonen () som markerat i skärmdumpen nedan.

Håll sedan muspekaren över listan över Slumpmässiga namn. Listan ska markeras som markerad i skärmdumpen nedan. Tryck sedan på vänster musknapp (LMB) för att välja listan.

HTML-koden i listan bör markeras i Element fliken i Chrome Developer Tool. Här finns listan över slumpmässiga namn i en div element. De div elementet har klass namn resultat. Inuti den har vi en ol element med klass namn namnlista. Inuti ol element, är vart och ett av namnen i en li element.

Från detta kan vi säga att för att komma till li taggar, måste vi följa div.resultat> ol.namnlista> li

Så kommer vår CSS-väljare att vara div.resultat ol.namnLista li (ersätt bara > tecken med blanksteg)

Skapa ett nytt Python-skript för att extrahera dessa slumpmässiga namn ex02.py och skriv in följande rader med koder i den.

från selenimportwebdriver
från selen.webbdrivare.allmänning.nycklar importerar nycklar
från selen.webbdrivare.krom.alternativ importalternativ
chromeOptions = Alternativ ()
chromealternativ.headless = Sant
webbläsare = webdriver.Chrome (executable_path = "./ drivers / chromedriver ", optioner = chromeOptions)
webbläsare.get ("http: // random-name-generator.info/")
nameList = webbläsare.find_elements_by_css_selector ('div.resultat ol.nameList li ')
för namn i namnLista:
Skriv namn.text)
webbläsare.sluta()

När du är klar sparar du ex02.py Python-skript.

Jag har förklarat raderna 1-8 i det tidigare avsnittet av denna artikel. Dessa är samma som i ex01.py.

Rad 10 laddar webbplatsen för slumpmässiga namngeneratorer med hjälp av webbläsare.skaffa sig() metod.

Rad 11 väljer namnlistan med webbläsare.find_elements_by_css_selector () metod. Denna metod använder CSS-väljaren div.resultat ol.namnLista li för att hitta namnlistan. Sedan sparas namnlistan i namnlista variabel.

I rad 13 och 14, a för loop används för att iterera genom namnlista lista av li element. I varje iteration, innehållet i li elementet skrivs ut på konsolen.

Kör nu Python-skriptet ex02.py som följer:

$ python3 ex02.py

Som du kan se, Python-skriptet ex02.py hämtade alla slumpmässiga namn från webbsidan.

Om du kör skriptet en andra gång ska det returnera en ny lista med slumpmässiga namn, som du kan se på skärmdumpen nedan.

Problem du kan möta med att köra selen i huvudlöst läge:

Du har tidigare sett att det är lika enkelt att köra Selen i headless-läge med Chrome-drivrutinen som att ställa in chromealternativ.huvudlös flagga till Sann.

Den här lösningen kanske inte fungerar för dig på vissa Linux-distributioner. I det här avsnittet ska jag prata om några av de problem du kan stöta på när du kör Selen i huvudlöst läge med Chrome-webbdrivrutinen.

Som standard gör Google Chrome-webbläsaren mycket sandboxning (kör många saker i en isolerad miljö). Detta kan orsaka problem när du kör Selen i headless-läge med Chrome-webbdrivrutinen. Du kan inaktivera sandboxning för Google Chrome genom att använda -ingen sandlåda flagga.

För att lägga till -ingen sandlåda flagga, lägg till följande rad innan du initierar Selenium Chrome-drivrutinen med webbdrivare.Krom() metod (rad 8 i ex01.py Python-skript).

chromealternativ.add_argument ("- no-sandbox")

Du kan ha problem med att göra vissa saker i Google Chrome-webbläsaren från Selenium som att ta skärmdumpar av webbplatsen och så vidare. Detta kan hända eftersom Google Chrome i headless-läge kan ställa in fel virtuell skärmupplösning. Så din webbplats kanske inte ser bra ut. Du kan ställa in önskad virtuell skärmupplösning för webbläsaren Google Chrome i huvudlöst läge med -fönsterstorlek kommandoradsalternativ.

Till exempel för att ställa in den virtuella skärmbredden till 1280 px och höjd till 720 px, Lägg till -fönsterstorlek kommandoradsalternativ innan du initierar Selenium Chrome-drivrutinen med webbdrivare.Krom() metod (rad 8 i ex01.py Python-skript) enligt följande:

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

Din server kanske inte har en GPU installerad eller den kan ha en GPU som webbläsaren Google Chrome inte vet hur den ska använda. Som standard ska Google Chrome automatiskt inaktivera GPU-acceleration om en GPU inte är tillgänglig eller om en GPU som inte stöds är tillgänglig. I vissa fall kan det misslyckas med att göra det. I så fall kanske Selen inte kan köra webbläsaren Google Chrome i huvudlöst läge. För att lösa detta problem måste du inaktivera GPU-acceleration med -inaktivera-gpu flagga.

För att lägga till -inaktivera-gpu flagga, lägg till följande rad innan du initialiserar Selenium Chrome-drivrutinen med webbdrivare.Krom() metod (rad 8 i ex01.py Python-skript).

chromealternativ.add_argument (“- inaktivera-gpu”)

Slutsats:

I den här artikeln har jag visat dig hur du ställer in Selen i headless-läge med Chrome-webbdrivrutinen. Jag har täckt grunderna, vilket hjälper dig att komma igång med huvudlös Selen-webbläsare automatisering, webbtestning och webbskrapning.

Jag har också täckt några av Google Chrome-kommandoradsargumenten / flaggorna som du kan använda för att lösa några av de problem du kan ha när du kör Selen i headless-läge med Chrome-webbdrivrutinen.

Det finns många fler Google Chrome-kommandoradsalternativ tillgängliga, som jag inte behandlade i den här artikeln. Dessa kommandoradsalternativ kan vara användbara för ditt projekt. Du hittar alla de stödda kommandoradsalternativen för Google Chrome i sidan Lista över kommandoradsväxlar av Chrom av Peter Beverloo.

Mus WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
Om du vill förbättra standardfunktionerna för din muspekare, använd freeware WinMouse. Det lägger till fler funktioner som hjälper dig att få ut det m...
Mus Mus vänsterklicka på knappen fungerar inte på Windows 10
Mus vänsterklicka på knappen fungerar inte på Windows 10
Om du använder en dedikerad mus med din bärbara dator eller stationära dator men musens vänsterklick-knapp fungerar inte på Windows 10/8/7 av någon an...
Mus Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Om du upptäcker att muspekaren hoppar eller rör sig på egen hand, automatiskt, slumpmässigt när du skriver in Windows-bärbar dator eller dator, kan nå...