Introduktion til selen i Python 3

Introduction Selenium Python 3



Selen er en ramme, der bruges til test af webapplikationer. Selenium automatiserer en browser, f.eks. Chrome eller Firefox, til at køre tests på dit ønskede websted. Selen er også et meget kraftfuldt værktøj til webskrabning. Selenium understøtter JavaScript og alle de moderne browserfunktioner. Dette værktøj er meget effektivt til at udtrække information fra websteder.

Denne artikel viser dig, hvordan du konfigurerer Selenium på din Linux -distribution (dvs. Ubuntu), samt hvordan du udfører grundlæggende webautomatisering og web -scrapping med Selenium Python 3 -biblioteket.







Forudsætninger

For at prøve kommandoer og eksempler, der bruges i denne artikel, skal du have følgende:



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 eller Firefox webbrowser installeret på din computer.



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





Forbereder Python 3 virtuelt miljø til projektet

Det virtuelle miljø i Python bruges til at oprette et isoleret Python -projektmappe. Python -modulerne, som du installerer ved hjælp af PIP, installeres kun i projektmappen frem for 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

PIP3 vil downloade og installere alle de nødvendige moduler globalt.

På dette tidspunkt, Python virtualenv modul skal installeres globalt.

Opret projektmappen python-selen-basic/ i din nuværende arbejdskatalog, som følger:

$ mkdir -pv python-selen-basic/drivers

Naviger til dit nyoprettede projektmappe python-selen-basic/ , som følger:

$CDpython-selen-basic/

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

$ virtualenv.env

Det virtuelle Python -miljø skal nu oprettes i din projektmappe. '

Aktiver det virtuelle Python -miljø i dit projektmappe via følgende kommando:

$ kilde.env/bin/activ

Som du kan se, er det virtuelle Python -miljø aktiveret for dette projektmappe.

Installation af Selenium Python Library

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

Du kan installere dette bibliotek ved hjælp af PIP 3 som følger:

$ pip3 installer selen

Selenium Python -biblioteket skal nu installeres.

Nu hvor Selenium Python -biblioteket er installeret, er det næste, du skal gøre, at installere en webdriver til din yndlingswebbrowser. I denne artikel vil jeg vise dig, hvordan du installerer Firefox og Chrome webdrivere til Selenium.

Installation af Firefox Gecko Driver

Firefox Gecko -driveren giver dig mulighed for at styre eller automatisere Firefox -webbrowseren ved hjælp af Selenium.

For at downloade Firefox Gecko Driver, besøg GitHub frigiver side med mozilla/geckodriver fra en webbrowser.

Som du kan se, er v0.26.0 den nyeste version af Firefox Gecko Driver på det tidspunkt, hvor denne artikel blev skrevet.

For at downloade Firefox Gecko -driveren skal du rulle lidt ned og klikke på Linux geckodriver tar.gz -arkivet afhængigt af dit operativsystems arkitektur.

Hvis du bruger et 32-bit operativsystem, skal du klikke på geckodriver-v0.26.0-linux32.tar.gz link.

Hvis du bruger et 64-bit operativsystem, skal du klikke på geckodriver-v0.26.0-linuxx64.tar.gz link.

I mit tilfælde vil jeg downloade 64-bit versionen af ​​Firefox Gecko Driver.

Din browser skal bede dig om at gemme arkivet. Vælg Gem filen og klik derefter på Okay .

Firefox Gecko Driver -arkivet skal downloades i ~/Downloads vejviser.

Udtræk geckodriver-v0.26.0-linux64.tar.gz arkiv fra ~/Downloads bibliotek til chauffører/ bibliotek over dit projekt ved at indtaste følgende kommando:

$tjære -xzf~/Downloads/geckodriver-v0.26.0-linux64.tar.gz-Cchauffører/

Når Firefox Gecko Driver -arkivet er ekstraheret, en ny gecko driver binær fil skal oprettes i chauffører/ bibliotek over dit projekt, som du kan se på skærmbilledet herunder.

Test af Selenium Firefox Gecko Driver

I dette afsnit vil jeg vise dig, hvordan du konfigurerer dit allerførste Selenium Python -script for at teste, om Firefox Gecko Driver fungerer.

Åbn først projektmappen python-selen-basic/ med din yndlings IDE eller editor. I denne artikel vil jeg bruge Visual Studio Code.

Opret det nye Python -script ex01.py , og skriv følgende linjer i scriptet.

fraselenimporterewebdriver
fraselen.webdriver.almindelige.nøgler importereNøgler
fra tid importeresøvn
browser=webdriver.Firefox(eksekverbar_sti='./drivers/geckodriver')
browser.('http://www.google.com')
søvn(5)
browser.Afslut()

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

Jeg vil forklare koden i et senere afsnit af denne artikel.

Følgende linje konfigurerer Selenium til at bruge Firefox Gecko Driver fra chauffører/ bibliotek over dit projekt.

For at teste, om Firefox Gecko Driver fungerer med Selenium, skal du køre følgende ex01.py Python script:

$ python3 ex01.py

Firefox -webbrowseren skulle automatisk besøge Google.com og lukke sig selv efter 5 sekunder. Hvis dette sker, fungerer Selenium Firefox Gecko Driver korrekt.

Installation af Chrome Web Driver

Chrome Web Driver giver dig mulighed for at styre eller automatisere Google Chrome webbrowseren ved hjælp af Selenium.

Du skal downloade den samme version af Chrome -webdriveren som din Google Chrome -webbrowser.

Besøg for at finde versionsnummeret på din Google Chrome -webbrowser chrome: // indstillinger/hjælp i Google Chrome. Versionsnummeret skal være i Om Chrome sektion, som du kan se på skærmbilledet herunder.

I mit tilfælde er versionsnummeret 83.0.4103.116 . De tre første dele af versionsnummeret ( 83.0.4103 , i mit tilfælde) skal matche de tre første dele af Chrome Web Driver -versionsnummeret.

For at downloade Chrome Web Driver skal du besøge officiel Chrome -downloadside .

I Aktuelle udgivelser afsnit, Chrome Web Driver til de nyeste udgivelser af Google Chrome webbrowseren vil være tilgængelig, som du kan se på skærmbilledet herunder.

Hvis den version af Google Chrome, du bruger, ikke findes i Aktuelle udgivelser sektion, rul lidt ned, og du skal finde din ønskede version.

Når du har klikket på den korrekte Chrome Web Driver -version, skal det tage dig til den følgende side. Klik på chromedriver_linux64.zip link, som angivet i skærmbilledet herunder.

Arkivet til Chrome Web Driver skal nu downloades.

Chrome Web Driver -arkivet skal nu downloades i ~/Downloads vejviser.

Du kan udtrække chromedriver-linux64.zip arkiv fra ~/Downloads bibliotek til chauffører/ bibliotek over dit projekt med følgende kommando:

$ udpakning~/Downloads/chromedriver_linux64.lynlås-d drivere/

Når Chrome Web Driver -arkivet er blevet ekstraheret, en ny chromedriver binær fil skal oprettes i chauffører/ bibliotek over dit projekt, som du kan se på skærmbilledet herunder.

Test af Selenium Chrome Web Driver

I dette afsnit vil jeg vise dig, hvordan du konfigurerer dit allerførste Selenium Python -script for at teste, om Chrome Web Driver fungerer.

Opret først det nye Python -script ex02.py , og indtast følgende kodelinjer i scriptet.

fraselenimporterewebdriver
fraselen.webdriver.almindelige.nøgler importereNøgler
fra tid importeresøvn
browser=webdriver.Chrome(eksekverbar_sti='./drivers/chromedriver')
browser.('http://www.google.com')
søvn(5)
browser.Afslut()

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

Jeg vil forklare koden i et senere afsnit af denne artikel.

Følgende linje konfigurerer Selenium til at bruge Chrome Web Driver fra chauffører/ bibliotek over dit projekt.

For at teste, om Chrome Web Driver fungerer med Selenium, skal du køre ex02.py Python script, som følger:

$ python3 ex01.py

Google Chrome -webbrowseren skulle automatisk besøge Google.com og lukke sig selv efter 5 sekunder. Hvis dette sker, fungerer Selenium Firefox Gecko Driver korrekt.

Grundlæggende om webskrabning med selen

Jeg vil bruge Firefox webbrowser fra nu af. Du kan også bruge Chrome, hvis du vil.

Et grundlæggende Selenium Python -script skal ligne scriptet vist på skærmbilledet herunder.

Importér først selenet webdriver fra selen modul.

Importér derefter Nøgler fra selen.webdriver.common.keys . Dette hjælper dig med at sende tastaturet tryk til den browser, du automatiserer fra Selenium.

Følgende linje opretter en browser objekt til Firefox -webbrowseren ved hjælp af Firefox Gecko Driver (Webdriver). Du kan kontrollere Firefox -browserhandlinger ved hjælp af dette objekt.

For at indlæse et websted eller en URL (jeg indlæser webstedet https://www.duckduckgo.com ), ring til få() metode til browser objekt i din Firefox -browser.

Ved hjælp af Selen kan du skrive dine tests, udføre webskrotning og til sidst lukke browseren ved hjælp af Afslut() metode til browser objekt.

Ovenfor er det grundlæggende layout af et Selenium Python -script. Du skriver disse linjer i alle dine Selenium Python -scripts.

Eksempel 1: Udskrivning af titlen på en webside

Dette vil være det letteste eksempel, der diskuteres ved hjælp af selen. I dette eksempel udskriver vi titlen på den webside, vi besøger.

Opret den nye fil ex04.py og skriv følgende kodelinjer i den.

fraselenimporterewebdriver
fraselen.webdriver.almindelige.nøgler importereNøgler

browser=webdriver.Firefox(eksekverbar_sti='./drivers/geckodriver')

browser.('https://www.duckduckgo.com')
Print('Titel: %s'% browser.titel)
browser.Afslut()

Når du er færdig, skal du gemme filen.

Her er browser.title bruges til at få adgang til titlen på den besøgte webside og Print() funktionen bruges til at udskrive titlen i konsollen.

Efter at have kørt ex04.py script, skal det:

1) Åbn Firefox
2) Indlæs den ønskede webside
3) Hent sidens titel
4) Udskriv titlen på konsollen
5) Og til sidst skal du lukke browseren

Som du kan se, er ex04.py script har trykt titlen på websiden pænt i konsollen.

$ python3 ex04.py

Eksempel 2: Udskrivning af titlerne på flere websider

Som i det foregående eksempel kan du bruge den samme metode til at udskrive titlen på flere websider ved hjælp af Python -loop.

For at forstå, hvordan dette fungerer, skal du oprette det nye Python -script ex05.py og skriv følgende kodelinjer i scriptet:

fraselenimporterewebdriver
fraselen.webdriver.almindelige.nøgler importereNøgler

browser=webdriver.Firefox(eksekverbar_sti='./drivers/geckodriver')


urls= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
tilurliwebadresser:
browser.(url)
Print('Titel: %s'% browser.titel)
browser.Afslut()

Når du er færdig, skal du gemme Python -scriptet ex05.py .

Her er urls listen bevarer URL'en til hver webside.

TIL til loop bruges til at iterere gennem urls listeelementer.

På hver iteration fortæller Selenium browseren at besøge url og få titlen på websiden. Når Selenium har hentet titlen på websiden, udskrives den i konsollen.

Kør Python -scriptet ex05.py , og du skulle se titlen på hver webside i urls liste.

$ python3 ex05.py

Dette er et eksempel på, hvordan Selenium kan udføre den samme opgave med flere websider eller websteder.

Eksempel 3: Udtrækning af data fra en webside

I dette eksempel vil jeg vise dig det grundlæggende ved at udtrække data fra websider ved hjælp af Selenium. Dette er også kendt som webskrabning.

Besøg først Random.org link fra Firefox. Siden skal generere en tilfældig streng, som du kan se på skærmbilledet herunder.

For at udtrække de tilfældige strengdata ved hjælp af Selenium skal du også kende HTML -repræsentationen af ​​dataene.

For at se, hvordan de tilfældige strengdata er repræsenteret i HTML, skal du vælge de tilfældige strengdata og trykke på højre museknap (RMB) og klikke på Undersøg element (Q) , som angivet på skærmbilledet herunder.

HTML -repræsentationen af ​​dataene skal vises i Inspektør fane, som du kan se på skærmbilledet herunder.

Du kan også klikke på Undersøg ikon ( ) for at inspicere dataene fra siden.

Klik på ikonet for inspektion (), og hold markøren over de tilfældige strengdata, du vil udtrække. HTML -repræsentationen af ​​dataene skal vises som før.

Som du kan se, er tilfældige strengdata pakket ind i en HTML til tag og indeholder klassen data .

Nu hvor vi kender HTML -repræsentationen af ​​de data, vi ønsker at udtrække, opretter vi et Python -script til at udtrække dataene ved hjælp af Selenium.

Opret det nye Python -script ex06.py og indtast følgende kodelinjer i scriptet

fraselenimporterewebdriver
fraselen.webdriver.almindelige.nøgler importereNøgler

browser=webdriver.Firefox(eksekverbar_sti='./drivers/geckodriver')

browser.('https://www.random.org/strings/?num=1&len=20&cifre
= on & upperalpha = on & loweralpha = on & unique = on & format = html & rnd = new '
)

dataElement=browser.find_element_by_css_selector('pre.data')
Print(dataElement.tekst)
browser.Afslut()

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

Her er browser.get () metode indlæser websiden i Firefox -browseren.

Det browser.find_element_by_css_selector () metode søger i HTML -koden på siden efter et specifikt element og returnerer det.

I dette tilfælde ville elementet være præ.data , det til tag, der har klassens navn data .

Nedenfor er præ.data element er blevet gemt i dataElement variabel.

Scriptet udskriver derefter tekstindholdet i det valgte præ.data element.

Hvis du kører ex06.py Python -script, det skal udtrække de tilfældige strengdata fra websiden, som du kan se på skærmbilledet herunder.

$ python3 ex06.py

Som du kan se, hver gang jeg kører ex06.py Python script, det udtrækker en anden tilfældig streng data fra websiden.

Eksempel 4: Udtrækning af liste over data fra webside

Det foregående eksempel viste dig, hvordan du udtrækker et enkelt dataelement fra en webside ved hjælp af Selenium. I dette eksempel vil jeg vise dig, hvordan du bruger Selenium til at udtrække en liste med data fra en webside.

Besøg først random-name-generator.info fra din Firefox webbrowser. Dette websted genererer ti tilfældige navne, hver gang du genindlæser siden, som du kan se på skærmbilledet herunder. Vores mål er at udtrække disse tilfældige navne ved hjælp af selen.

Hvis du inspicerer navnelisten nærmere, kan du se, at det er en ordnet liste ( mærke). Det tag indeholder også klassens navn navneliste . Hvert af de tilfældige navne er repræsenteret som et listeelement ( ved tag) inde i tag.

For at udtrække disse tilfældige navne skal du oprette det nye Python -script ex07.py og indtast følgende kodelinjer i scriptet.

fraselenimporterewebdriver
fraselen.webdriver.almindelige.nøgler importereNøgler

browser=webdriver.Firefox(eksekverbar_sti='./drivers/geckodriver')

browser.('http://random-name-generator.info/')

navneliste=browser.find_elements_by_css_selector('ol.nameList li')

tilnavninavneliste:
Print(navn.tekst)

browser.Afslut()

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

Her er browser.get () metode indlæser webstedet for tilfældig navngenerator i Firefox -browseren.

Det browser.find_elements_by_css_selector () metode bruger CSS -vælgeren ol.nameList li at finde alt ved elementer inde i tag med klassens navn navneliste . Jeg har gemt alle de valgte ved elementer i navneliste variabel.

TIL til loop bruges til at iterere gennem navneliste liste af ved elementer. I hver iteration, indholdet af ved element er trykt på konsollen.

Hvis du kører ex07.py Python -script, det vil hente alle tilfældige navne fra websiden og udskrive det på skærmen, som du kan se på skærmbilledet herunder.

$ python3 ex07.py

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

Eksempel 5: Indsendelse af formular - Søgning på DuckDuckGo

Dette eksempel er lige så simpelt som det første eksempel. I dette eksempel vil jeg besøge søgemaskinen DuckDuckGo og søge efter udtrykket selen hq ved hjælp af selen.

Besøg først DuckDuckGo søgemaskine fra Firefox -webbrowseren.

Hvis du inspicerer søgefeltet, skal det have id'et search_form_input_homepage , som du kan se på skærmbilledet herunder.

Opret nu det nye Python -script ex08.py og indtast følgende kodelinjer i scriptet.

fraselenimporterewebdriver
fraselen.webdriver.almindelige.nøgler importereNøgler
browser=webdriver.Firefox(eksekverbar_sti='./drivers/geckodriver')
browser.('https://duckduckgo.com/')
searchInput=browser.find_element_by_id('search_form_input_homepage')
searchInput.send_nøgler('selen hq'+ Nøgler.GÅ IND)

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

Her er browser.get () metode indlæser hjemmesiden for DuckDuckGo -søgemaskinen i Firefox -webbrowseren.

Det browser.find_element_by_id () metode vælger inputelementet med id'et search_form_input_homepage og gemmer det i searchInput variabel.

Det searchInput.send_keys () metode bruges til at sende tastetryksdata til inputfeltet. I dette eksempel sender den strengen selen hq , og der trykkes på Enter -tasten med Nøgler.ENTER konstant.

Så snart DuckDuckGo -søgemaskinen modtager Enter -tastetrykket ( Nøgler.ENTER ), det søger og viser resultatet.

Kør ex08.py Python script, som følger:

$ python3 ex08.py

Som du kan se, besøgte Firefox -webbrowseren DuckDuckGo -søgemaskinen.

Den skrev automatisk selen hq i søgefeltet.

Så snart browseren modtog Enter -tasten, tryk på ( Nøgler.ENTER ), viste det søgeresultatet.

Eksempel 6: Indsendelse af en formular på W3Schools.com

I eksempel 5 var indsendelse af DuckDuckGo søgemaskine let. Alt du skulle gøre var at trykke på Enter -tasten. Men dette vil ikke være tilfældet for alle formularer. I dette eksempel vil jeg vise dig mere kompleks formhåndtering.

Besøg først HTML -formularer side på W3Schools.com fra Firefox webbrowser. Når siden er indlæst, skal du se et eksempelformular. Dette er den formular, vi vil indsende i dette eksempel.

Hvis du inspicerer formularen, vil Fornavn inputfeltet skal have id'et fnavn , det Efternavn inputfeltet skal have id'et lnavn , og Send knap skulle have type Indsend , som du kan se på skærmbilledet herunder.

For at indsende denne formular ved hjælp af Selenium skal du oprette det nye Python -script ex09.py og indtast følgende kodelinjer i scriptet.

fraselenimporterewebdriver
fraselen.webdriver.almindelige.nøgler importereNøgler
browser=webdriver.Firefox(eksekverbar_sti='./drivers/geckodriver')
browser.('https://www.w3schools.com/html/html_forms.asp')
fnavn=browser.find_element_by_id('fname')
fnavn.klar()
fnavn.send_nøgler('Shahriar')
lnavn=browser.find_element_by_id('lname')
lnavn.klar()
lnavn.send_nøgler('Shovon')
send knappen=browser.find_element_by_css_selector('input [type =' indsend ']')
send knappen.send_nøgler(Nøgler.GÅ IND)

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

Her er browser.get () metode åbner siden W3schools HTML -formularer i Firefox -webbrowseren.

Det browser.find_element_by_id () metode finder inputfelterne ved id fnavn og lnavn og det gemmer dem i fnavn og lnavn henholdsvis variabler.

Det fname.clear () og lname.clear () metoder rydder standardfornavnet (John) fnavn værdi og efternavn (Doe) lnavn værdi fra inputfelterne.

Det fname.send_keys () og lname.send_keys () metoder type Shahriar og Shovon i Fornavn og Efternavn henholdsvis inputfelter.

Det browser.find_element_by_css_selector () metode vælger Send knap af formularen og gemmer den i send knappen variabel.

Det submitButton.send_keys () metode sender Enter -tastetrykket ( Nøgler.ENTER ) til Send knap af formularen. Denne handling indsender formularen.

Kør ex09.py Python script, som følger:

$ python3 ex09.py

Som du kan se, er formularen automatisk sendt med de korrekte input.

Konklusion

Denne artikel skal hjælpe dig med at komme i gang med Selenium -browsertest, webautomatisering og webskrotbiblioteker i Python 3. For mere information, tjek officiel Selenium Python -dokumentation .