Introduktion till selen i Python 3

Introduction Selenium Python 3



Selen är ett ramverk som används för att testa webbapplikationer. Selenium automatiserar en webbläsare, till exempel Chrome eller Firefox, för att köra tester på önskad webbplats. Selen är också ett mycket kraftfullt webbskrapningsverktyg. Selenium stöder JavaScript och alla moderna webbläsarfunktioner. Detta verktyg är mycket effektivt för att extrahera information från webbplatser.

Den här artikeln visar dig hur du konfigurerar Selenium på din Linux -distribution (dvs. Ubuntu), samt hur du utför grundläggande webbautomatisering och webbskrotning med Selenium Python 3 -biblioteket.







Förkunskaper

För att testa kommandon och exempel som används i den här artikeln måste du ha följande:



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



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





Förbereda Python 3 virtuell miljö för projektet

Pythons virtuella miljö används för att skapa en isolerad Python -projektkatalog. Python -modulerna som du installerar med PIP installeras endast i projektkatalogen, snarare än globalt.

Python virtualenv modul används för att hantera virtuella miljöer i Python.



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

$ sudo pip3 installera virtualenv

PIP3 laddar ner och installerar globalt alla nödvändiga moduler.

Vid denna tidpunkt, Python virtualenv modulen bör installeras globalt.

Skapa projektkatalogen python-selen-basic/ i din nuvarande arbetskatalog, enligt följande:

$ mkdir -pv python-selen-basic/drivers

Navigera till din nyskapade projektkatalog python-selen-basic/ , som följer:

$CDpython-selen-basic/

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

$ virtualenv.env

Den virtuella Python -miljön ska nu skapas i din projektkatalog. '

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

$ källa.env/bin/aktivera

Som du kan se aktiveras den virtuella Python -miljön för den här projektkatalogen.

Installera Selenium Python Library

Selenium Python -biblioteket är tillgängligt i det officiella Python PyPI -förvaret.

Du kan installera detta bibliotek med PIP 3 enligt följande:

$ pip3 installera selen

Selenium Python -biblioteket ska nu installeras.

Nu när Selenium Python -biblioteket är installerat är nästa sak du måste göra att installera en webbdrivrutin för din favoritwebbläsare. I den här artikeln kommer jag att visa dig hur du installerar Firefox och Chrome webbdrivrutiner för Selenium.

Installera Firefox Gecko Driver

Med Firefox Gecko Driver kan du styra eller automatisera webbläsaren Firefox med Selenium.

För att ladda ner Firefox Gecko Driver, besök GitHub släpper sidan för mozilla/geckodriver från en webbläsare.

Som du kan se är v0.26.0 den senaste versionen av Firefox Gecko Driver vid den tidpunkt då denna artikel skrevs.

För att ladda ner Firefox Gecko Driver, rulla ner lite och klicka på Linux geckodriver tar.gz -arkivet, beroende på operativsystemets arkitektur.

Om du använder ett 32-bitars operativsystem klickar du på geckodriver-v0.26.0-linux32.tar.gz länk.

Om du använder ett 64-bitars operativsystem klickar du på geckodriver-v0.26.0-linuxx64.tar.gz länk.

I mitt fall kommer jag att ladda ner 64-bitarsversionen av Firefox Gecko Driver.

Din webbläsare bör uppmana dig att spara arkivet. Välj Spara fil och klicka sedan på OK .

Firefox Gecko Driver -arkivet bör laddas ner i ~/Nedladdningar katalog.

Extrahera geckodriver-v0.26.0-linux64.tar.gz arkiv från ~/Nedladdningar katalogen till förare/ katalog över ditt projekt genom att ange följande kommando:

$tar -xzf~/Nedladdningar/geckodriver-v0.26.0-linux64.tar.gz-Cförare/

När Firefox Gecko Driver -arkivet har extraherats, kommer ett nytt geckodriver binär fil ska skapas i förare/ katalog över ditt projekt, som du kan se på skärmdumpen nedan.

Testar Selenium Firefox Gecko Driver

I det här avsnittet kommer jag att visa dig hur du konfigurerar ditt allra första Selenium Python -skript för att testa om Firefox Gecko Driver fungerar.

Öppna först projektkatalogen python-selen-basic/ med din favorit IDE eller redaktör. I den här artikeln kommer jag att använda Visual Studio Code.

Skapa det nya Python -skriptet ex01.py och skriv följande rader i skriptet.

frånselenimporterawebbdriver
frånselen.webbdriver.allmänning.nycklar importeraNycklar
från tid importerasömn
webbläsare=webbdriver.Firefox(körbar_väg='./drivers/geckodriver')
webbläsare.skaffa sig('http://www.google.com')
sömn(5)
webbläsare.sluta med()

När du är klar, spara ex01.py Python -skript.

Jag kommer att förklara koden i ett senare avsnitt i denna artikel.

Följande rad konfigurerar Selenium för att använda Firefox Gecko -drivrutinen från förare/ katalog över ditt projekt.

För att testa om Firefox Gecko Driver fungerar med Selenium, kör följande ex01.py Python -skript:

$ python3 ex01.py

Firefox webbläsare bör automatiskt besöka Google.com och stänga sig själv efter 5 sekunder. Om detta inträffar fungerar Selenium Firefox Gecko -drivrutinen korrekt.

Installera Chrome Web Driver

Med Chrome Web Driver kan du styra eller automatisera webbläsaren Google Chrome med Selenium.

Du måste ladda ner samma version av Chrome Web Driver som för din Google Chrome webbläsare.

Besök för att hitta versionsnumret på din Google Chrome -webbläsare chrome: // inställningar/hjälp i Google Chrome. Versionsnumret ska finnas i Om Chrome som du kan se på skärmdumpen nedan.

I mitt fall är versionsnumret 83.0.4103.116 . De tre första delarna av versionsnumret ( 83.0.4103 , i mitt fall) måste matcha de tre första delarna av Chrome Web Driver -versionsnumret.

Besök the. För att ladda ner Chrome Web Driver officiell Chrome -nedladdningssida .

I Aktuella utgåvor avsnittet kommer Chrome Web Driver för de senaste versionerna av webbläsaren Google Chrome att vara tillgänglig, som du kan se på skärmdumpen nedan.

Om den version av Google Chrome du använder inte finns i Aktuella utgåvor avsnitt, bläddra ner lite och du bör hitta din önskade version.

När du klickar på rätt Chrome Web Driver -version bör det ta dig till följande sida. Klicka på chromedriver_linux64.zip länk, som anges i skärmdumpen nedan.

Chrome Web Driver -arkivet bör nu laddas ner.

Chrome Web Driver -arkivet bör nu laddas ner i ~/Nedladdningar katalog.

Du kan extrahera chromedriver-linux64.zip arkiv från ~/Nedladdningar katalogen till förare/ katalog över ditt projekt med följande kommando:

$ packa upp~/Nedladdningar/chromedriver_linux64.blixtlås-d drivrutiner/

När Chrome Web Driver -arkivet har extraherats, kommer en ny kromförare binär fil ska skapas i förare/ katalog över ditt projekt, som du kan se på skärmdumpen nedan.

Testar Selenium Chrome Web Driver

I det här avsnittet kommer jag att visa dig hur du konfigurerar ditt allra första Selenium Python -skript för att testa om Chrome Web Driver fungerar.

Skapa först det nya Python -skriptet ex02.py och skriv följande koderader i skriptet.

frånselenimporterawebbdriver
frånselen.webbdriver.allmänning.nycklar importeraNycklar
från tid importerasömn
webbläsare=webbdriver.Krom(körbar_väg='./drivers/chromedriver')
webbläsare.skaffa sig('http://www.google.com')
sömn(5)
webbläsare.sluta med()

När du är klar, spara ex02.py Python -skript.

Jag kommer att förklara koden i ett senare avsnitt i denna artikel.

Följande rad konfigurerar Selenium för att använda Chrome Web Driver från förare/ katalog över ditt projekt.

För att testa om Chrome Web Driver fungerar med Selenium, kör ex02.py Python -skript, enligt följande:

$ python3 ex01.py

Webbläsaren Google Chrome bör automatiskt besöka Google.com och stänga sig själv efter 5 sekunder. Om detta inträffar fungerar Selenium Firefox Gecko -drivrutinen korrekt.

Grunderna i webbskrapning med selen

Jag kommer att använda Firefox webbläsare från och med nu. Du kan också använda Chrome om du vill.

Ett grundläggande Selenium Python -skript ska se ut som skriptet som visas på skärmdumpen nedan.

Importera först selenet webbdriver från selen modul.

Importera sedan Nycklar från selenium.webdriver.common.keys . Detta hjälper dig att skicka tangentbordstangenter till webbläsaren du automatiserar från Selenium.

Följande rad skapar en webbläsare objekt för Firefox webbläsare med Firefox Gecko Driver (Webdriver). Du kan styra Firefox webbläsaråtgärder med det här objektet.

För att ladda en webbplats eller URL (jag laddar webbplatsen https://www.duckduckgo.com ), ring skaffa sig() metod för webbläsare objekt i din Firefox -webbläsare.

Med Selen kan du skriva dina tester, utföra webbskrot och slutligen stänga webbläsaren med sluta med() metod för webbläsare objekt.

Ovan är den grundläggande layouten för ett Selenium Python -skript. Du kommer att skriva dessa rader i alla dina Selenium Python -skript.

Exempel 1: Skriva ut titeln på en webbsida

Detta blir det enklaste exemplet som diskuteras med Selen. I det här exemplet kommer vi att skriva ut titeln på den webbsida vi kommer att besöka.

Skapa den nya filen ex04.py och skriv följande koderader i den.

frånselenimporterawebbdriver
frånselen.webbdriver.allmänning.nycklar importeraNycklar

webbläsare=webbdriver.Firefox(körbar_väg='./drivers/geckodriver')

webbläsare.skaffa sig('https://www.duckduckgo.com')
skriva ut('Titel: %s'% webbläsare.titel)
webbläsare.sluta med()

När du är klar, spara filen.

Här, browser.title används för att komma åt titeln på den besökta webbsidan och skriva ut() funktionen kommer att användas för att skriva ut titeln i konsolen.

Efter att ha kört ex04.py manus, det ska:

1) Öppna Firefox
2) Ladda in önskad webbsida
3) Hämta sidans titel
4) Skriv ut titeln på konsolen
5) Och slutligen, stäng webbläsaren

Som du kan se, ex04.py script har skrivit ut titeln på webbsidan snyggt i konsolen.

$ python3 ex04.py

Exempel 2: Skriva ut titlarna på flera webbsidor

Som i föregående exempel kan du använda samma metod för att skriva ut titeln på flera webbsidor med Python -slingan.

För att förstå hur detta fungerar, skapa det nya Python -skriptet ex05.py och skriv följande kodrader i skriptet:

frånselenimporterawebbdriver
frånselen.webbdriver.allmänning.nycklar importeraNycklar

webbläsare=webbdriver.Firefox(körbar_väg='./drivers/geckodriver')


webbadresser= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
förurliwebbadresser:
webbläsare.skaffa sig(url)
skriva ut('Titel: %s'% webbläsare.titel)
webbläsare.sluta med()

Spara Python -skriptet när du är klar ex05.py .

Här, webbadresser listan behåller webbadressen till varje webbsida.

TILL för loop används för att iterera genom webbadresser lista objekt.

På varje iteration säger Selenium till webbläsaren att besöka url och få titeln på webbsidan. När Selenium har extraherat webbsidans titel skrivs den ut i konsolen.

Kör Python -skriptet ex05.py , och du bör se titeln på varje webbsida i webbadresser lista.

$ python3 ex05.py

Detta är ett exempel på hur Selenium kan utföra samma uppgift med flera webbsidor eller webbplatser.

Exempel 3: Extrahera data från en webbsida

I det här exemplet kommer jag att visa dig grunderna för att extrahera data från webbsidor med Selenium. Detta är också känt som webbskrapning.

Besök först Random.org länk från Firefox. Sidan ska generera en slumpmässig sträng, som du kan se på skärmdumpen nedan.

För att extrahera slumpmässiga strängdata med Selenium måste du också känna till HTML -representationen för data.

För att se hur slumpmässiga strängdata representeras i HTML, välj slumpmässiga strängdata och tryck på höger musknapp (RMB) och klicka på Inspektera element (Q) , som anges i skärmdumpen nedan.

HTML -representationen för data ska visas i Inspektör fliken, som du kan se på skärmdumpen nedan.

Du kan också klicka på Kontrollera ikonen ( ) för att inspektera data från sidan.

Klicka på ikonen för inspektion () och håll muspekaren över slumpmässiga strängdata som du vill extrahera. HTML -representationen av data ska visas som tidigare.

Som du kan se är slumpmässiga strängdata inslagna i en HTML för tag och innehåller klassen data .

Nu när vi känner till HTML -representationen för data vi vill extrahera, kommer vi att skapa ett Python -skript för att extrahera data med hjälp av Selenium.

Skapa det nya Python -skriptet ex06.py och skriv följande koderader i skriptet

frånselenimporterawebbdriver
frånselen.webbdriver.allmänning.nycklar importeraNycklar

webbläsare=webbdriver.Firefox(körbar_väg='./drivers/geckodriver')

webbläsare.skaffa sig('https://www.random.org/strings/?num=1&len=20&digits
= on & upperalpha = on & loweralpha = on & unique = on & format = html & rnd = new '
)

dataElement=webbläsare.find_element_by_css_selector('pre.data')
skriva ut(dataElement.text)
webbläsare.sluta med()

När du är klar, spara ex06.py Python -skript.

Här, browser.get () metod läser in webbsidan i webbläsaren Firefox.

De browser.find_element_by_css_selector () method söker HTML -koden på sidan efter ett specifikt element och returnerar det.

I det här fallet skulle elementet vara pre.data , för tag som har klassnamnet data .

Under pre.data element har lagrats i dataElement variabel.

Skriptet skriver sedan ut textinnehållet för det valda pre.data element.

Om du kör ex06.py Python -skript, det bör extrahera slumpmässiga strängdata från webbsidan, som du kan se på skärmdumpen nedan.

$ python3 ex06.py

Som du kan se, varje gång jag kör ex06.py Python -skript, det extraherar en annan slumpmässig strängdata från webbsidan.

Exempel 4: Extrahera lista över data från webbsida

Det föregående exemplet visade dig hur du extraherar ett enda dataelement från en webbsida med Selenium. I det här exemplet kommer jag att visa dig hur du använder Selenium för att extrahera en lista med data från en webbsida.

Besök först random-name-generator.info från din webbläsare i Firefox. Denna webbplats kommer att generera 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 hjälp av selen.

Om du inspekterar namnlistan närmare kan du se att det är en ordnad lista ( märka). De taggen innehåller också klassnamnet namnlista . Var och en av de slumpmässiga namnen representeras som ett listobjekt ( vid tag) inuti märka.

För att extrahera dessa slumpmässiga namn, skapa det nya Python -skriptet ex07.py och skriv följande koderader i skriptet.

frånselenimporterawebbdriver
frånselen.webbdriver.allmänning.nycklar importeraNycklar

webbläsare=webbdriver.Firefox(körbar_väg='./drivers/geckodriver')

webbläsare.skaffa sig('http://random-name-generator.info/')

namnlista=webbläsare.find_elements_by_css_selector('ol.nameList li')

förnamninamnlista:
skriva ut(namn.text)

webbläsare.sluta med()

När du är klar, spara ex07.py Python -skript.

Här, browser.get () metoden laddar webbsidan för slumpmässiga namn i Firefox -webbläsaren.

De browser.find_elements_by_css_selector () metoden använder CSS -väljaren ol.nameList li att hitta allt vid element inuti tag med klassnamnet namnlista . Jag har lagrat alla valda vid element i namnlista variabel.

TILL för loop används för att iterera genom namnlista lista av vid element. I varje iteration, innehållet i vid elementet är tryckt på konsolen.

Om du kör ex07.py Python -skript, det kommer att hämta alla slumpmässiga namn från webbsidan och skriva ut det på skärmen, som du kan se på skärmdumpen nedan.

$ python3 ex07.py

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

Exempel 5: Skicka formulär - Sök på DuckDuckGo

Detta exempel är lika enkelt som det första exemplet. I det här exemplet kommer jag att besöka sökmotorn DuckDuckGo och söka på termen selen hq använder selen.

Första besök DuckDuckGo sökmotor från webbläsaren Firefox.

Om du inspekterar sökinmatningsfältet bör det ha id: t search_form_input_homepage , som du kan se på skärmdumpen nedan.

Skapa nu det nya Python -skriptet ex08.py och skriv följande koderader i skriptet.

frånselenimporterawebbdriver
frånselen.webbdriver.allmänning.nycklar importeraNycklar
webbläsare=webbdriver.Firefox(körbar_väg='./drivers/geckodriver')
webbläsare.skaffa sig('https://duckduckgo.com/')
searchInput=webbläsare.hitta_element_by_id('search_form_input_homepage')
searchInput.send_keys('selen hq'+ Nycklar.STIGA PÅ)

När du är klar, spara ex08.py Python -skript.

Här, browser.get () metoden laddar hemsidan för DuckDuckGo -sökmotorn i webbläsaren Firefox.

De browser.find_element_by_id () metod väljer ingångselementet med id search_form_input_homepage och lagrar den i searchInput variabel.

De searchInput.send_keys () metod används för att skicka knapptrycksdata till inmatningsfältet. I det här exemplet skickar den strängen selen hq och Enter -tangenten trycks ned med Keys.ENTER konstant.

Så snart DuckDuckGo -sökmotorn tar emot Enter -tangenten ( Keys.ENTER ), det söker och visar resultatet.

Springa det ex08.py Python -skript, enligt följande:

$ python3 ex08.py

Som du ser besökte Firefox webbläsare sökmotorn DuckDuckGo.

Det skrevs automatiskt selen hq i sökrutan.

Så snart webbläsaren fick Enter tryck på ( Keys.ENTER ), visade det sökresultatet.

Exempel 6: Skicka in ett formulär på W3Schools.com

I exempel 5 var det enkelt att skicka in sökmotorn från DuckDuckGo. Allt du behövde göra var att trycka på Enter. Men detta kommer inte att vara fallet för alla blanketter. I det här exemplet kommer jag att visa dig mer komplex formulärhantering.

Besök först HTML -formulärsida på W3Schools.com från Firefox webbläsare. När sidan laddats bör du se ett exempelformulär. Detta är formuläret som vi kommer att skicka in i detta exempel.

Om du inspekterar formuläret visas Förnamn inmatningsfältet ska ha id fname , Efternamn inmatningsfältet ska ha id lnamn , och den Skickaknapp borde ha typ Skicka in , som du kan se på skärmdumpen nedan.

Skapa det nya Python -skriptet för att skicka detta formulär med Selenium ex09.py och skriv följande koderader i skriptet.

frånselenimporterawebbdriver
frånselen.webbdriver.allmänning.nycklar importeraNycklar
webbläsare=webbdriver.Firefox(körbar_väg='./drivers/geckodriver')
webbläsare.skaffa sig('https://www.w3schools.com/html/html_forms.asp')
fname=webbläsare.hitta_element_by_id('fname')
fname.klar()
fname.send_keys('Shahriar')
lnamn=webbläsare.hitta_element_by_id('lname')
lnamn.klar()
lnamn.send_keys('Shovon')
skickaknapp=webbläsare.find_element_by_css_selector('input [type =' submit ']')
skickaknapp.send_keys(Nycklar.STIGA PÅ)

När du är klar, spara ex09.py Python -skript.

Här, browser.get () metoden öppnar sidan W3schools HTML -formulär i webbläsaren Firefox.

De browser.find_element_by_id () metoden hittar inmatningsfälten med id fname och lnamn och det lagrar dem i fname och lnamn variabler, respektive.

De fname.clear () och lname.clear () metoder rensar standardförnamnet (John) fname värde och efternamn (Doe) lnamn värde från inmatningsfälten.

De fname.send_keys () och lname.send_keys () metodtyp Shahriar och Shovon i Förnamn och Efternamn inmatningsfält, respektive.

De browser.find_element_by_css_selector () metoden väljer Skickaknapp formuläret och lagrar det i skickaknapp variabel.

De submitButton.send_keys () metoden skickar Enter -tangenten ( Keys.ENTER ) till Skickaknapp av formuläret. Denna åtgärd skickar in formuläret.

Springa det ex09.py Python -skript, enligt följande:

$ python3 ex09.py

Som du kan se har formuläret automatiskt skickats in med rätt inmatning.

Slutsats

Den här artikeln ska hjälpa dig att komma igång med Selenium -webbläsartestning, webbautomatik och webbskrotbibliotek i Python 3. Mer information finns i officiell Selenium Python -dokumentation .