Introduksjon til selen i Python 3

Introduction Selenium Python 3



Selen er et rammeverk som brukes for testing av webapplikasjoner. Selenium automatiserer en nettleser, for eksempel Chrome eller Firefox, for å kjøre tester på ønsket nettsted. Selen er også et veldig kraftig nettskrapingsverktøy. Selenium støtter JavaScript og alle de moderne nettleserfunksjonene. Dette verktøyet er veldig effektivt for å trekke ut informasjon fra nettsteder.

Denne artikkelen viser deg hvordan du konfigurerer Selenium på Linux -distribusjonen din (dvs. Ubuntu), samt hvordan du utfører grunnleggende webautomatisering og webskraping med Selenium Python 3 -biblioteket.







Forutsetninger

For å prøve kommandoene og eksemplene som brukes i denne artikkelen, må du ha følgende:



1) En Linux -distribusjon (helst Ubuntu) installert på datamaskinen din.
2) Python 3 installert på datamaskinen.
3) PIP 3 installert på datamaskinen.
4) Google Chrome eller Firefox nettleseren installert på datamaskinen din.



Du kan finne mange artikler om disse temaene på LinuxHint.com . Husk å sjekke disse artiklene hvis du trenger ytterligere hjelp.





Forbereder Python 3 virtuelt miljø 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, i stedet for globalt.

Python virtualenv modulen brukes til å administrere virtuelle Python -miljøer.



Du kan installere Python virtualenv modul globalt ved hjelp av PIP 3, som følger:

$ sudo pip3 install virtualenv

PIP3 vil laste ned og installere alle nødvendige moduler globalt.

På dette tidspunktet, Python virtualenv modulen skal installeres globalt.

Lag prosjektkatalogen python-selen-basic/ i din nåværende arbeidskatalog, som følger:

$ mkdir -pv python-selen-basic/drivers

Naviger til den nyopprettede prosjektkatalogen python-selen-basic/ , følgende:

$CDpython-selen-basic/

Opprett et virtuelt Python -miljø i prosjektkatalogen med følgende kommando:

$ virtualenv.env

Det virtuelle Python -miljøet bør nå opprettes i prosjektkatalogen din. '

Aktiver det virtuelle Python -miljøet i prosjektkatalogen din via følgende kommando:

$ kilde.env/bin/active

Som du kan se, er det virtuelle Python -miljøet aktivert for denne prosjektkatalogen.

Installere Selenium Python Library

Selen Python -biblioteket er tilgjengelig i det offisielle Python PyPI -depotet.

Du kan installere dette biblioteket ved hjelp av PIP 3, som følger:

$ pip3 installer selen

Selenium Python -biblioteket skal nå installeres.

Nå som Selenium Python -biblioteket er installert, er det neste du må gjøre å installere en nettdriver for din favoritt nettleser. I denne artikkelen vil jeg vise deg hvordan du installerer Firefox og Chrome webdrivere for Selenium.

Installere Firefox Gecko Driver

Firefox Gecko Driver lar deg kontrollere eller automatisere Firefox -nettleseren ved hjelp av Selenium.

For å laste ned Firefox Gecko Driver, gå til GitHub lanserer siden til mozilla/geckodriver fra en nettleser.

Som du kan se, er v0.26.0 den siste versjonen av Firefox Gecko Driver på det tidspunktet denne artikkelen ble skrevet.

For å laste ned Firefox Gecko Driver, rull ned litt og klikk på Linux geckodriver tar.gz -arkivet, avhengig av operativsystemets arkitektur.

Hvis du bruker et 32-biters operativsystem, klikker du på geckodriver-v0.26.0-linux32.tar.gz lenke.

Hvis du bruker et 64-biters operativsystem, klikker du på geckodriver-v0.26.0-linuxx64.tar.gz lenke.

I mitt tilfelle vil jeg laste ned 64-biters versjon av Firefox Gecko Driver.

Nettleseren din bør be deg om å lagre arkivet. Plukke ut Lagre filen og klikk deretter OK .

Firefox Gecko Driver -arkivet bør lastes ned i ~/Nedlastinger katalog.

Trekk ut geckodriver-v0.26.0-linux64.tar.gz arkiv fra ~/Nedlastinger katalogen til sjåfører/ katalogen for prosjektet ditt ved å skrive inn følgende kommando:

$tjære -xzf~/Nedlastinger/geckodriver-v0.26.0-linux64.tar.gz-Csjåfører/

Når Firefox Gecko Driver -arkivet er trukket ut, vil en ny gecko driver binær fil bør opprettes i sjåfører/ katalogen for prosjektet ditt, som du kan se på skjermbildet nedenfor.

Tester Selenium Firefox Gecko Driver

I denne delen vil jeg vise deg hvordan du konfigurerer ditt aller første Selenium Python -skript for å teste om Firefox Gecko Driver fungerer.

Først åpner du prosjektkatalogen python-selen-basic/ med din favoritt IDE eller redaktør. I denne artikkelen vil jeg bruke Visual Studio Code.

Lag det nye Python -skriptet ex01.py , og skriv inn følgende linjer i skriptet.

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler
fra tid importsøvn
nettleser=webdriver.Firefox(kjørbar_bane='./drivers/geckodriver')
nettleser.('http://www.google.com')
søvn(5)
nettleser.slutte()

Når du er ferdig, lagrer du ex01.py Python -skript.

Jeg vil forklare koden i en senere del av denne artikkelen.

Følgende linje konfigurerer Selenium til å bruke Firefox Gecko Driver fra sjåfører/ katalog over prosjektet ditt.

For å teste om Firefox Gecko Driver fungerer med Selenium, kjør følgende ex01.py Python -skript:

$ python3 ex01.py

Firefox -nettleseren bør automatisk besøke Google.com og lukke seg selv etter 5 sekunder. Hvis dette skjer, fungerer Selenium Firefox Gecko Driver som det skal.

Installere Chrome Web Driver

Med Chrome Web Driver kan du kontrollere eller automatisere nettleseren Google Chrome ved hjelp av Selenium.

Du må laste ned den samme versjonen av Chrome Web Driver som for Google Chrome nettleseren din.

For å finne versjonsnummeret til Google Chrome -nettleseren din, besøk chrome: // innstillinger/hjelp i Google Chrome. Versjonsnummeret skal være i Om Chrome som du kan se på skjermbildet nedenfor.

I mitt tilfelle er versjonsnummeret 83.0.4103.116 . De tre første delene av versjonsnummeret ( 83.0.4103 , i mitt tilfelle) må samsvare med de tre første delene av Chrome Web Driver -versjonsnummeret.

For å laste ned Chrome Web Driver, gå til offisiell Chrome -nedlastingsside .

I Gjeldende utgivelser delen, vil Chrome Web Driver for de nyeste versjonene av nettleseren Google Chrome være tilgjengelig, som du kan se på skjermbildet nedenfor.

Hvis versjonen av Google Chrome du bruker ikke er i Gjeldende utgivelser delen, bla litt ned, og du bør finne ønsket versjon.

Når du klikker på riktig Chrome Web Driver -versjon, bør den ta deg til neste side. Klikk på chromedriver_linux64.zip lenke, som angitt på skjermbildet nedenfor.

Arkivet for Chrome Web Driver skal nå lastes ned.

Chrome Web Driver -arkivet skal nå lastes ned i ~/Nedlastinger katalog.

Du kan trekke ut chromedriver-linux64.zip arkiv fra ~/Nedlastinger katalogen til sjåfører/ katalogen for prosjektet ditt med følgende kommando:

$ unzip~/Nedlastinger/chromedriver_linux64.glidelås-d drivere/

Når Chrome Web Driver -arkivet er trukket ut, vil en ny chromedriver binær fil bør opprettes i sjåfører/ katalogen for prosjektet ditt, som du kan se på skjermbildet nedenfor.

Tester Selenium Chrome Web Driver

I denne delen vil jeg vise deg hvordan du konfigurerer ditt aller første Selenium Python -skript for å teste om Chrome Web Driver fungerer.

Opprett først det nye Python -skriptet ex02.py , og skriv inn følgende kodelinjer i skriptet.

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler
fra tid importsøvn
nettleser=webdriver.Chrome(kjørbar_bane='./drivers/chromedriver')
nettleser.('http://www.google.com')
søvn(5)
nettleser.slutte()

Når du er ferdig, lagrer du ex02.py Python -skript.

Jeg vil forklare koden i en senere del av denne artikkelen.

Følgende linje konfigurerer Selenium til å bruke Chrome Web Driver fra sjåfører/ katalog over prosjektet ditt.

For å teste om Chrome Web Driver fungerer med Selenium, kjør ex02.py Python -skript, som følger:

$ python3 ex01.py

Google Chrome -nettleseren bør automatisk besøke Google.com og lukke seg selv etter 5 sekunder. Hvis dette skjer, fungerer Selenium Firefox Gecko Driver som det skal.

Grunnleggende om webskraping med selen

Jeg kommer til å bruke Firefox -nettleseren fra nå av. Du kan også bruke Chrome hvis du vil.

Et grunnleggende Selenium Python -skript skal se ut som skriptet som vises på skjermbildet nedenfor.

Først importerer du selen webdriver fra selen modul.

Deretter importerer du Nøkler fra selen.webdriver.common.keys . Dette hjelper deg med å sende tastetrykk til nettleseren du automatiserer fra Selenium.

Følgende linje oppretter en nettleser objekt for Firefox -nettleseren ved hjelp av Firefox Gecko Driver (Webdriver). Du kan kontrollere Firefox -nettleserhandlinger ved å bruke dette objektet.

For å laste inn et nettsted eller en URL (jeg laster nettstedet https://www.duckduckgo.com ), Ring få() metoden for nettleser objekt i Firefox -nettleseren din.

Ved å bruke Selenium kan du skrive testene dine, utføre webskraping og til slutt lukke nettleseren ved hjelp av slutte() metoden for nettleser gjenstand.

Over er grunnoppsettet til et Selenium Python -skript. Du kommer til å skrive disse linjene i alle Selenium Python -skriptene dine.

Eksempel 1: Skrive ut tittelen på en webside

Dette vil være det enkleste eksemplet som diskuteres ved hjelp av selen. I dette eksemplet vil vi skrive ut tittelen på nettsiden vi skal besøke.

Lag den nye filen ex04.py og skriv inn følgende koderader.

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler

nettleser=webdriver.Firefox(kjørbar_bane='./drivers/geckodriver')

nettleser.('https://www.duckduckgo.com')
skrive ut('Tittel: %s'% nettleser.tittel)
nettleser.slutte()

Når du er ferdig, lagrer du filen.

Her, den browser.title brukes for å få tilgang til tittelen på den besøkte nettsiden og skrive ut() funksjonen vil bli brukt til å skrive ut tittelen i konsollen.

Etter å ha kjørt ex04.py manus, bør det:

1) Åpne Firefox
2) Last inn ønsket webside
3) Hent tittelen på siden
4) Skriv ut tittelen på konsollen
5) Og til slutt, lukk nettleseren

Som du kan se, ex04.py script har trykt tittelen på nettsiden pent i konsollen.

$ python3 ex04.py

Eksempel 2: Skrive ut titlene på flere nettsider

Som i forrige eksempel kan du bruke samme metode for å skrive ut tittelen på flere nettsider ved hjelp av Python -løkken.

For å forstå hvordan dette fungerer, opprett det nye Python -skriptet eks05.py og skriv inn følgende kodelinjer i skriptet:

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler

nettleser=webdriver.Firefox(kjørbar_bane='./drivers/geckodriver')


nettadresser= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
tilurlinettadresser:
nettleser.(url)
skrive ut('Tittel: %s'% nettleser.tittel)
nettleser.slutte()

Når du er ferdig, lagrer du Python -skriptet eks05.py .

Her, den nettadresser listen beholder nettadressen til hver webside.

TIL til loop brukes til å iterere gjennom nettadresser listeelementer.

På hver iterasjon forteller Selenium nettleseren å besøke url og få tittelen på nettsiden. Når Selenium har hentet tittelen på websiden, skrives den ut i konsollen.

Kjør Python -skriptet eks05.py , og du bør se tittelen på hver nettside i nettadresser liste.

$ python3 ex05.py

Dette er et eksempel på hvordan Selenium kan utføre den samme oppgaven med flere nettsider eller nettsteder.

Eksempel 3: Pakk ut data fra en webside

I dette eksemplet vil jeg vise deg det grunnleggende for å trekke ut data fra nettsider som bruker Selenium. Dette er også kjent som webskraping.

Besøk først Random.org lenke fra Firefox. Siden skal generere en tilfeldig streng, som du kan se på skjermbildet nedenfor.

For å trekke ut tilfeldige strengdata ved hjelp av Selen, må du også kjenne HTML -representasjonen av dataene.

For å se hvordan de tilfeldige strengdataene er representert i HTML, velg de tilfeldige strengdataene, trykk på høyre museknapp (RMB) og klikk på Inspiser element (Q) , som angitt på skjermbildet nedenfor.

HTML -representasjonen av dataene skal vises i Inspektør kategorien, som du kan se på skjermbildet nedenfor.

Du kan også klikke på Kontroller ikonet ( ) for å inspisere dataene fra siden.

Klikk på inspiseringsikonet () og hold markøren over de tilfeldige strengdataene du vil pakke ut. HTML -representasjonen av dataene skal vises som før.

Som du kan se, er de tilfeldige strengdataene pakket inn i en HTML til tag og inneholder klassen data .

Nå som vi kjenner HTML -representasjonen av dataene vi ønsker å trekke ut, vil vi lage et Python -skript for å trekke ut dataene ved hjelp av Selenium.

Lag det nye Python -skriptet ex06.py og skriv inn følgende koderader i skriptet

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler

nettleser=webdriver.Firefox(kjørbar_bane='./drivers/geckodriver')

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

dataElement=nettleser.finn_element_by_css_selector('pre.data')
skrive ut(dataElement.tekst)
nettleser.slutte()

Når du er ferdig, lagrer du ex06.py Python -skript.

Her, den browser.get () metoden laster nettsiden i Firefox -nettleseren.

De browser.find_element_by_css_selector () method søker i HTML -koden på siden etter et bestemt element og returnerer det.

I dette tilfellet vil elementet være forhåndsdata , til tag som har klassens navn data .

Under forhåndsdata elementet har blitt lagret i dataElement variabel.

Skriptet skriver deretter ut tekstinnholdet til det valgte forhåndsdata element.

Hvis du kjører ex06.py Python -skript, det bør trekke ut de tilfeldige strengdataene fra websiden, som du kan se på skjermbildet nedenfor.

$ python3 ex06.py

Som du kan se, hver gang jeg kjører ex06.py Python -skript, det trekker ut en annen tilfeldig strengdata fra nettsiden.

Eksempel 4: Utpakke liste over data fra nettside

Det forrige eksemplet viste deg hvordan du trekker ut et enkelt dataelement fra en webside ved hjelp av selen. I dette eksemplet vil jeg vise deg hvordan du bruker Selenium til å trekke ut en liste over data fra en webside.

Besøk først random-name-generator.info fra nettleseren din i Firefox. Dette nettstedet vil generere ti tilfeldige navn hver gang du laster inn siden på nytt, som du kan se på skjermbildet nedenfor. Målet vårt er å trekke ut disse tilfeldige navnene ved hjelp av selen.

Hvis du inspiserer navnelisten nærmere, kan du se at det er en ordnet liste ( stikkord). De taggen inneholder også klassens navn navneliste . Hvert av de tilfeldige navnene er representert som et listeelement ( tag) inne i stikkord.

For å trekke ut disse tilfeldige navnene, opprett det nye Python -skriptet eks07.py og skriv inn følgende koderader i skriptet.

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler

nettleser=webdriver.Firefox(kjørbar_bane='./drivers/geckodriver')

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

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

tilNavninavneliste:
skrive ut(Navn.tekst)

nettleser.slutte()

Når du er ferdig, lagrer du eks07.py Python -skript.

Her, den browser.get () metoden laster nettsiden for tilfeldig navngenerator i Firefox -nettleseren.

De browser.find_elements_by_css_selector () metoden bruker CSS -velgeren ol.nameList li å finne alt elementer inne i tag med klassens navn navneliste . Jeg har lagret alle de valgte elementer i navneliste variabel.

TIL til loop brukes til å iterere gjennom navneliste liste over elementer. I hver iterasjon, innholdet i elementet er skrevet ut på konsollen.

Hvis du kjører eks07.py Python -skript, det vil hente alle tilfeldige navn fra nettsiden og skrive det ut på skjermen, som du kan se på skjermbildet nedenfor.

$ python3 ex07.py

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

Eksempel 5: Send skjema - Søk på DuckDuckGo

Dette eksemplet er like enkelt som det første eksemplet. I dette eksemplet vil jeg besøke søkemotoren DuckDuckGo og søke på begrepet selen hq bruker selen.

Først, besøk DuckDuckGo søkemotor fra nettleseren Firefox.

Hvis du inspiserer søkeinndatafeltet, bør det ha id search_form_input_homepage , som du kan se på skjermbildet nedenfor.

Lag nå det nye Python -skriptet ex08.py og skriv inn følgende koderader i skriptet.

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler
nettleser=webdriver.Firefox(kjørbar_bane='./drivers/geckodriver')
nettleser.('https://duckduckgo.com/')
searchInput=nettleser.finn_element_by_id('search_form_input_homepage')
searchInput.send_key('selen hq'+ Nøkler.TAST INN)

Når du er ferdig, lagrer du ex08.py Python -skript.

Her, den browser.get () metoden laster hjemmesiden til DuckDuckGo -søkemotoren i nettleseren Firefox.

De browser.find_element_by_id () metode velger input -elementet med id search_form_input_homepage og lagrer den i searchInput variabel.

De searchInput.send_keys () metoden brukes til å sende tastetrykkdata til inndatafeltet. I dette eksemplet sender den strengen selen hq , og Enter -tasten trykkes med Keys.ENTER konstant.

Så snart DuckDuckGo søkemotor mottar Enter -tastetrykket ( Keys.ENTER ), søker den og viser resultatet.

Kjør ex08.py Python -skript, som følger:

$ python3 ex08.py

Som du kan se, besøkte Firefox nettleser DuckDuckGo søkemotor.

Den skrev automatisk selen hq i tekstboksen for søk.

Så snart nettleseren mottok Enter -tasten, trykk ( Keys.ENTER ), viste det søkeresultatet.

Eksempel 6: Send inn et skjema på W3Schools.com

I eksempel 5 var innsending av DuckDuckGo søkemotor skjema enkelt. Alt du måtte gjøre var å trykke Enter. Men dette vil ikke være tilfelle for alle skjemainnleveringer. I dette eksemplet vil jeg vise deg mer kompleks skjemahåndtering.

Besøk først HTML -skjema -side på W3Schools.com fra Firefox nettleser. Når siden er lastet inn, bør du se et eksempelskjema. Dette er skjemaet vi vil sende inn i dette eksemplet.

Hvis du inspiserer skjemaet, vil Fornavn inndatafeltet skal ha id fnavn , Etternavn inndatafeltet skal ha id lnavn , og Send -knapp burde ha type sende inn , som du kan se på skjermbildet nedenfor.

For å sende inn dette skjemaet ved hjelp av Selenium, opprett det nye Python -skriptet ex09.py og skriv inn følgende koderader i skriptet.

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler
nettleser=webdriver.Firefox(kjørbar_bane='./drivers/geckodriver')
nettleser.('https://www.w3schools.com/html/html_forms.asp')
fnavn=nettleser.finn_element_by_id('fname')
fnavn.klar()
fnavn.send_key('Shahriar')
lnavn=nettleser.finn_element_by_id('lname')
lnavn.klar()
lnavn.send_key('Shovon')
send inn -knappen=nettleser.finn_element_by_css_selector('input [type =' send ']')
send inn -knappen.send_key(Nøkler.TAST INN)

Når du er ferdig, lagrer du ex09.py Python -skript.

Her, den browser.get () metoden åpner W3schools HTML -skjemaside i Firefox -nettleseren.

De browser.find_element_by_id () metoden finner inndatafeltene med id fnavn og lnavn og den lagrer dem i fnavn og lnavn henholdsvis variabler.

De fname.clear () og lname.clear () metoder fjerner standard fornavn (John) fnavn verdi og etternavn (Doe) lnavn verdi fra inndatafeltene.

De fname.send_keys () og lname.send_keys () metoder type Shahriar og Shovon i Fornavn og Etternavn henholdsvis inndatafelt.

De browser.find_element_by_css_selector () metoden velger Send -knapp av skjemaet og lagrer det i send inn -knappen variabel.

De submitButton.send_keys () metoden sender Enter -tastetrykket ( Keys.ENTER ) til Send -knapp av skjemaet. Denne handlingen sender inn skjemaet.

Kjør ex09.py Python -skript, som følger:

$ python3 ex09.py

Som du kan se, har skjemaet blitt sendt automatisk med de riktige inngangene.

Konklusjon

Denne artikkelen skal hjelpe deg med å komme i gang med Selenium -nettlesertesting, webautomatisering og nettbaserte bibliotek i Python 3. For mer informasjon, sjekk offisiell Selenium Python -dokumentasjon .