Introduksjon til selen i Python 3

Introduksjon til selen i Python 3
Selenium er et rammeverk som brukes til å teste webapplikasjoner. Selenium automatiserer en nettleser, for eksempel Chrome eller Firefox, for å kjøre tester på ønsket nettsted. Selen er også et veldig kraftig skrapingsverktøy for nettet. Selenium støtter JavaScript og alle moderne nettleserfunksjoner. Dette verktøyet er veldig effektivt til å hente ut informasjon fra nettsteder.

Denne artikkelen vil vise deg hvordan du setter opp Selenium på Linux -distribusjonen din (i.e., Ubuntu), samt hvordan du utfører grunnleggende nettautomatisering og skraping av nettet med Selenium Python 3 -biblioteket.

Forutsetninger

For å prøve ut 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 din.
3) Pip 3 installert på datamaskinen din.
4) Google Chrome eller Firefox nettleser installert på datamaskinen din.

Du kan finne mange artikler om disse emnene på Linuxhint.com. Sørg for å sjekke ut disse artiklene hvis du trenger ytterligere hjelp.

Forberede Python 3 virtuelle 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 Modul brukes til å administrere python virtuelle miljøer.

Du kan installere python Virtualenv Modul globalt ved hjelp av Pip 3, som følger:

$ sudo pip3 installer virtualenv

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

På dette tidspunktet python Virtualenv Modulen skal installeres globalt.

Lag prosjektkatalogen Python-Selenium-Basic/ I din nåværende arbeidskatalog, som følger:

$ mkdir -pv python-selenium-basic/drivere

Naviger til den nyopprettede prosjektkatalogen Python-Selenium-Basic/, følgende:

$ CD Python-Selenium-Basic/

Lag et virtuelt miljø i Python i prosjektkatalogen din med følgende kommando:

$ virtualenv .env

Det virtuelle miljøet i Python skal nå opprettes i prosjektkatalogen.'

Aktiver Python Virtual Environment i prosjektkatalogen via følgende kommando:

$ kilde .env/bin/aktiverer

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

Installere Selenium Python Library

Selenium 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 Web -drivere for Selenium.

Installere Firefox Gecko Driver

Firefox Gecko -sjåføren lar deg kontrollere eller automatisere Firefox -nettleseren ved hjelp av Selenium.

For å laste ned Firefox Gecko -driveren, besøk GitHub -utgivelsessiden til Mozilla/Geckodriver fra en nettleser.

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

For å laste ned Firefox Gecko -sjåføren, bla litt ned og klikk på Linux Geckodriver Tar.GZ -arkivet, avhengig av operativsystemarkitekturen.

Hvis du bruker et 32-biters operativsystem, klikker du på Geckodriver-V0.26.0-Linux32.tjære.gz lenke.

Hvis du bruker et 64-biters operativsystem, klikker du på Geckodriver-V0.26.0-Linuxx64.tjære.gz lenke.

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

Nettleseren din skal be deg om å lagre arkivet. Plukke ut Lagre filen og klikk deretter Ok.

Firefox Gecko Driver Archive skal lastes ned i ~/Nedlastinger katalog.

Trekke ut Geckodriver-V0.26.0-Linux64.tjære.gz arkiv fra ~/Nedlastinger katalog til drivere/ Katalog for prosjektet ditt ved å legge inn følgende kommando:

$ tar -xzf ~/nedlastinger/gekkodriver -v0.26.0-Linux64.tjære.GZ -C -drivere/

Når Firefox Gecko Driver Archive er trukket ut, en ny Geckodriver Binærfil skal opprettes i drivere/ Katalog for prosjektet ditt, som du kan se på skjermdumpen nedenfor.

Testing Selenium Firefox Gecko Driver

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

Åpne først prosjektkatalogen Python-Selenium-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.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
Fra tid importer søvn
nettleser = webdriver.Firefox (kjørbar_path = "./drivere/gekkodriver ")
nettleser.få ('http: // www.Google.com ')
søvn (5)
nettleser.slutte()

Når du er ferdig, kan du lagre EX01.py Python -manus.

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

Følgende linje konfigurerer Selenium til å bruke Firefox Gecko -driveren fra drivere/ Katalog for prosjektet ditt.

For å teste om Firefox Gecko -sjåføren jobber med Selenium, kjør følgende EX01.py Python -skript:

$ Python3 EX01.py

Firefox -nettleseren skal automatisk besøke Google.com og lukk seg etter 5 sekunder. Hvis dette skjer, fungerer Selenium Firefox Gecko -sjåføren riktig.

Installere Chrome Web Driver

Chrome Web Driver lar deg kontrollere eller automatisere Google Chrome -nettleseren ved hjelp av Selenium.

Du må laste ned samme versjon 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 krom Seksjon, som du kan se på skjermdumpen 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, besøk den offisielle nedlastingssiden for Chrome Driver.

I Gjeldende utgivelser Seksjonen, Chrome Web Driver for de nyeste utgivelsene av Google Chrome -nettleseren vil være tilgjengelig, som du kan se på skjermdumpen nedenfor.

Hvis versjonen av Google Chrome du bruker ikke er i Gjeldende utgivelser Seksjon, 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 følgende side. Klikk på Chromedriver_linux64.glidelås lenke, som nevnt på skjermbildet nedenfor.

Chrome Web Driver Archive skal nå lastes ned.

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

Du kan trekke ut Chromedriver-Linux64.glidelås arkiv fra ~/Nedlastinger katalog til drivere/ Katalog for prosjektet ditt med følgende kommando:

$ Unzip ~/nedlastinger/Chromedriver_Linux64.Zip -D -drivere/

Når Chrome Web Driver Archive er trukket ut, en ny Chromedriver Binærfil skal opprettes i drivere/ Katalog for prosjektet ditt, som du kan se på skjermdumpen nedenfor.

Testing Selenium Chrome Web Driver

I denne delen vil jeg vise deg hvordan du setter opp det aller første Selenium Python -skriptet for å teste om Chrome Web -driveren fungerer.

Lag først det nye Python -skriptet EX02.py, og skriv inn følgende koder i skriptet.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
Fra tid importer søvn
nettleser = webdriver.Krom (kjørbar_path = "./Drivere/Chromedriver ")
nettleser.få ('http: // www.Google.com ')
søvn (5)
nettleser.slutte()

Når du er ferdig, kan du lagre EX02.py Python -manus.

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

Følgende linje konfigurerer Selenium til å bruke Chrome Web -driveren fra drivere/ Katalog for prosjektet ditt.

For å teste om Chrome Web -driveren jobber med Selenium, kjører du EX02.py Python -manus, som følger:

$ Python3 EX01.py

Google Chrome -nettleseren skal automatisk besøke Google.com og lukk seg etter 5 sekunder. Hvis dette skjer, fungerer Selenium Firefox Gecko -sjåføren riktig.

Grunnleggende om nettskraping med selen

Jeg vil 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å skjermdumpen nedenfor.

Først, importer selen Webdriver fra Selen modul.

Deretter importerer du Nøkler fra Selen.Webdriver.felles.nøkler. Dette vil hjelpe deg med å sende tastaturtastene til nettleseren du automatiserer fra Selenium.

Følgende linje skaper en nettleser Objekt for Firefox -nettleseren ved hjelp av Firefox Gecko Driver (WebDriver). Du kan kontrollere Firefox nettleserhandlinger ved hjelp av dette objektet.

For å laste inn et nettsted eller en URL (jeg laster inn nettstedet https: // www.Duckduckgo.com), ring få() metode for nettleser Objekt på Firefox -nettleseren din.

Ved hjelp av selen kan du skrive testene dine, utføre nettverk og til slutt lukke nettleseren ved hjelp av slutte() metode for nettleser gjenstand.

Over er den grunnleggende utformingen av et Selenium Python -skript. Du vil skrive disse linjene i alle dine Selenium Python -skript.

Eksempel 1: Skrive ut tittelen på en webside

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

Opprett den nye filen EX04.py og skriv inn følgende koder i den.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (kjørbar_path = "./drivere/gekkodriver ")
nettleser.få ('https: // www.Duckduckgo.com ')
Print ("Tittel: % s" % nettleser.tittel)
nettleser.slutte()

Når du er ferdig, lagre filen.

Her, The nettleser.tittel brukes til å få tilgang til tittelen på den besøkte websiden og skrive ut() Funksjon vil bli brukt til å skrive ut tittelen i konsollen.

Etter å ha kjørt EX04.py manus, det skal:

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 skrevet ut tittelen på websiden pent i konsollen.

$ Python3 EX04.py

Eksempel 2: Skrive ut titlene på flere websider

Som i forrige eksempel, kan du bruke den samme metoden for å skrive ut tittelen på flere websider ved hjelp av Python Loop.

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

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (kjørbar_path = "./drivere/gekkodriver ")
URLS = ['https: // www.Duckduckgo.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
for URL i URL -er:
nettleser.Get (URL)
Print ("Tittel: % s" % nettleser.tittel)
nettleser.slutte()

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

Her, The URLS Listen holder nettadressen til hver webside.

EN til sløyfe er vant til å iterere gjennom URLS Liste over elementer.

På hver iterasjon ber Selenium at nettleseren besøker URL og få tittelen på websiden. Når Selenium har trukket ut tittelen på websiden, skrives den ut i konsollen.

Kjør Python -skriptet EX05.py, og du bør se tittelen på hver webside i URLS liste.

$ Python3 EX05.py

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

Eksempel 3: Utløp av data fra en webside

I dette eksemplet vil jeg vise deg det grunnleggende om å trekke ut data fra websider ved hjelp av Selenium. Dette er også kjent som nettskraping.

Først, besøk det tilfeldige.org lenke fra Firefox. Siden skal generere en tilfeldig streng, som du kan se på skjermdumpen nedenfor.

For å trekke ut de tilfeldige strengdataene ved hjelp av selen, må du også kjenne HTML -representasjonen av dataene.

For å se hvordan de tilfeldige strengdataene er representert i HTML, velger du tilfeldige strengdata og trykk på høyre museknapp (RMB) og klikker på Inspiser element (q), Som bemerket på skjermbildet nedenfor.

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

Du kan også klikke på Inspiser ikonet ( ) For å inspisere dataene fra siden.

Klikk på Inspect Icon () og hold det over de tilfeldige strengdataene du vil trekke ut. HTML -representasjonen av dataene skal vises som før.

Som du kan se, er de tilfeldige strengdataene pakket inn i en HTML før 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 koder i skriptet

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (kjørbar_path = "./drivere/gekkodriver ")
nettleser.få ("https: // www.tilfeldig.org/strenger/?num = 1 & len = 20 & sifre
= ON & Upperalpha = ON & LOWERALPHA = ON & Unique = ON & Format = HTML & RND = NYTT ")
DataElement = nettleser.find_element_by_css_selector ('pre.data')
Print (DataElement.tekst)
nettleser.slutte()

Når du er ferdig, kan du lagre EX06.py Python -manus.

Her, The nettleser.få() Metoden laster nettsiden i Firefox -nettleseren.

De nettleser.find_element_by_css_selector () Metode søker på HTML -koden på siden for spesifikt et element og returnerer den.

I dette tilfellet ville elementet være før.data, de før Tag som har klassenavnet data.

Under før.data elementet er lagret i DataElement variabel.

Skriptet skriver deretter ut tekstinnholdet i det valgte før.data element.

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

$ Python3 EX06.py

Som du ser, hver gang jeg kjører EX06.py Python -skript, det trekker ut en annen tilfeldig strengdata fra websiden.

EKSEMPEL 4: Utløpsliste over data fra webside

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

Først, besøk den tilfeldige navnegeneratoren.Info fra Firefox -nettleseren din. Dette nettstedet vil generere ti tilfeldige navn hver gang du laster inn siden, 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 bestilt liste (ol stikkord). De ol Tag inkluderer også klassenavnet navneliste. Hvert av de tilfeldige navnene er representert som et listeelement (li tag) inne i ol stikkord.

For å trekke ut disse tilfeldige navnene, oppretter du det nye Python -skriptet EX07.py og skriv inn følgende koder i skriptet.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (kjørbar_path = "./drivere/gekkodriver ")
nettleser.få ("http: // tilfeldig-navn-generator.info/")
Namelist = nettleser.find_elements_by_css_selector ('ol.namelist li ')
For navn i Namelist:
trykk (navn.tekst)
nettleser.slutte()

Når du er ferdig, kan du lagre EX07.py Python -manus.

Her, The nettleser.få() Metoden laster inn tilfeldig navnegeneratorens webside i Firefox -nettleseren.

De nettleser.find_elements_by_css_selector () Metode bruker CSS -velgeren ol.Namelist Li å finne alle li elementer inne i ol Tag har klassenavnet navneliste. Jeg har lagret alle de valgte li elementer i navneliste variabel.

EN til sløyfe er vant til å iterere gjennom navneliste liste over li elementer. I hver iterasjon er innholdet i li elementet skrives ut på konsollen.

Hvis du kjører EX07.py Python -skript, det vil hente alle tilfeldige navnene 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: Innlevering av skjema - Søker på DuckduckGo

Dette eksemplet er like enkelt som det første eksemplet. I dette eksemplet vil jeg besøke Duckduckgo søkemotor og søke på begrepet Selen HQ ved hjelp av selen.

Besøk først Duckduckgo søkemotor fra Firefox nettleser.

Hvis du inspiserer søkeinngangsfeltet, bør det ha IDen search_form_input_homepage, Som du kan se på skjermbildet nedenfor.

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

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (kjørbar_path = "./drivere/gekkodriver ")
nettleser.få ("https: // duckduckgo.com/")
SearchInput = nettleser.find_element_by_id ('search_form_input_homepage')
SearchInput.Send_Keys ('Selenium HQ' + Keys.TAST INN)

Når du er ferdig, kan du lagre EX08.py Python -manus.

Her, The nettleser.få() Metoden laster hjemmesiden til Duckduckgo -søkemotoren i Firefox -nettleseren.

De nettleser.find_element_by_id () Metoden velger inngangselementet med ID search_form_input_homepage og lagrer det i SearchInput variabel.

De SearchInput.send_keys () Metoden brukes til å sende nøkkelpressdata til inngangsfeltet. I dette eksemplet sender det strengen Selen HQ, og Enter -tasten er trykket på ved hjelp av Nøkler.TAST INN konstant.

Så snart Duckduckgo søkemotor mottar enter -tastetrykk (Nøkler.TAST INN), den søker og viser resultatet.

Kjør EX08.py Python -manus, som følger:

$ Python3 EX08.py

Som du ser besøkte Firefox -nettleseren Duckduckgo søkemotor.

Den skrev automatisk Selen HQ I tekstboksen søk.

Så snart nettleseren mottok enter -tastetrykk (Nøkler.TAST INN), det viste søkeresultatet.

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

I eksempel 5 var Duckduckgo søkemotorforminnlevering enkelt. Alt du måtte gjøre var å trykke på Enter -tasten. Men dette vil ikke være tilfelle for alle skjemainnleveringer. I dette eksemplet vil jeg vise deg mer kompleks formhåndtering.

Først, besøk HTML -skjema -siden til W3Schools.com fra Firefox nettleser. Når siden har lastet inn, bør du se et eksempelform. Dette er skjemaet vi vil sende inn i dette eksemplet.

Hvis du inspiserer skjemaet, er Fornavn Inngangsfeltet skal ha ID fname, de Etternavn Inngangsfeltet skal ha ID lname, og Send inn knapp skal ha type sende inn, Som du kan se på skjermbildet nedenfor.

For å sende inn dette skjemaet ved hjelp av Selenium, oppretter du det nye Python -skriptet EX09.py og skriv inn følgende koder i skriptet.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (kjørbar_path = "./drivere/gekkodriver ")
nettleser.få ("https: // www.W3Schools.com/html/html_forms.ASP ")
fname = nettleser.find_element_by_id ('fname')
fname.klar()
fname.Send_Keys ('Shahriar')
LName = nettleser.find_element_by_id ('lname')
lname.klar()
lname.Send_Keys ('Shovon')
SubmitButton = nettleser.find_element_by_css_selector ('input [type = "Send"]')
SubmitButton.send_keys (nøkler.TAST INN)

Når du er ferdig, kan du lagre EX09.py Python -manus.

Her, The nettleser.få() Metoden åpner for W3Schools HTML -skjema -siden i Firefox -nettleseren.

De nettleser.find_element_by_id () metoden finner inngangsfeltene av IDen fname og lname og det lagrer dem i fname og lname variabler henholdsvis.

De fname.klar() og lname.klar() Metoder Fjern standard fornavn (John) fname Verdi og etternavn (DOE) lname verdi fra inngangsfeltene.

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

De nettleser.find_element_by_css_selector () Metoden velger Send inn knapp av skjemaet og lagrer det i SubmitButton variabel.

De SubmitButton.send_keys () Metoden sender Enter -tastetrykk (Nøkler.TAST INN) til Send inn knapp av skjemaet. Denne handlingen sender inn skjemaet.

Kjør EX09.py Python -manus, som følger:

$ Python3 EX09.py

Som du kan se, har skjemaet automatisk blitt sendt inn med riktige innganger.

Konklusjon

Denne artikkelen skal hjelpe deg med å komme i gang med Selenium Browser -testing, nettautomatisering og skrapingsbiblioteker i nettet i Python 3. For mer informasjon, sjekk ut den offisielle Selenium Python -dokumentasjonen.