Selen

Introduksjon til selen i Python 3

Introduksjon til selen i Python 3
Selen er et rammeverk som brukes til 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 verktøy for nettskraping. Selenium støtter JavaScript og alle moderne nettleserfunksjoner. Dette verktøyet er veldig effektivt for å hente ut informasjon fra nettsteder.

Denne artikkelen viser deg hvordan du konfigurerer Selenium på Linux-distribusjonen din (i.e., Ubuntu), samt hvordan du utfører grunnleggende nettautomatisering og nettutklipp 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 din.
3) PIP 3 installert på datamaskinen din.
4) Nettleseren Google Chrome eller Firefox installert på datamaskinen din.

Du kan finne mange artikler om disse emnene på LinuxHint.com. Husk å sjekke ut 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 som du installerer ved hjelp av PIP, blir bare 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 punktet, Python virtualenv modulen skal installeres globalt.

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

$ mkdir -pv python-selen-basic / drivere

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

$ cd python-selen-basic /

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

$ virtualenv .env

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

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

$ kilde .env / bin / aktivere

Som du kan se, aktiveres det virtuelle Python-miljøet 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 favorittnettleser. I denne artikkelen vil jeg vise deg hvordan du installerer Firefox og Chrome nettdrivere for Selenium.

Installerer Firefox Gecko Driver

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

For å laste ned Firefox Gecko Driver, besøk GitHub utgivelsessiden til mozilla / geckodriver fra en nettleser.

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

For å laste ned Firefox Gecko Driver, rull ned litt og klikk på Linux geckodriver tar.gz-arkiv, 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 bør be deg om å lagre arkivet. Å velge Lagre filen og klikk deretter OK.

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

Pakk ut geckodriver-v0.26.0-linux64.tjære.gz arkiv fra ~ / Nedlastinger katalog til drivere / katalog for prosjektet ditt ved å skrive inn følgende kommando:

$ tar -xzf ~ / Nedlastinger / geckodriver-v0.26.0-linux64.tjære.gz -C drivere /

Når Firefox Gecko Driver-arkivet er hentet, en ny geckodriver binærfil skal opprettes i drivere / katalog av 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.

Åpne først prosjektkatalogen python-selen-basic / med din favoritt IDE eller redaktør. I denne artikkelen vil jeg bruke Visual Studio Code.

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

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
fra tid importerer søvn
nettleser = webdriver.Firefox (executable_path = "./ drivere / geckodriver ")
nettleser.få ('http: // www.Google.com ')
sove (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 Selen til å bruke Firefox Gecko Driver fra drivere / katalog over prosjektet.

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

$ python3 ex01.py

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

Installerer Chrome Web Driver

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

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

For å finne versjonsnummeret til Google Chrome-nettleseren din, besøk chrome: // settings / help i Google Chrome. Versjonsnummeret skal være i Om Chrome delen, 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, besøk den offisielle Chrome Driver-nedlastingssiden.

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

Hvis versjonen av Google Chrome du bruker ikke er i Nåværende 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.glidelås lenke, som notert i skjermbildet nedenfor.

Chrome Web Driver-arkivet skal nå lastes ned.

Chrome Web Driver-arkivet 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-arkivet er hentet, en ny chromedriver binærfil skal opprettes i drivere / katalog av prosjektet ditt, som du kan se på skjermbildet nedenfor.

Testing 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.

Først oppretter du det nye Python-skriptet ex02.py, og skriv følgende linjer med koder i skriptet.

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
fra tid importerer søvn
nettleser = webdriver.Chrome (executable_path = "./ drivers / chromedriver ")
nettleser.få ('http: // www.Google.com ')
sove (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 Selen til å bruke Chrome Web Driver fra drivere / katalog over prosjektet.

For å teste om Chrome Web Driver jobber 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 lukk seg selv etter 5 sekunder. Hvis dette skjer, fungerer Selenium Firefox Gecko Driver riktig.

Grunnleggende om nettskraping med selen

Jeg skal 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 i skjermbildet nedenfor.

Først importerer du selen webdriver fra selen modul.

Deretter importerer du Nøkler fra selen.webdriver.felles.nøklene. Dette vil hjelpe 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 hjelp av 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 Selen kan du skrive testene dine, utføre nettskraping og til slutt lukke nettleseren ved hjelp av slutte() metoden for nettleser gjenstand.

Ovenfor er den grunnleggende utformingen av et Selenium Python-skript. Du vil 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 bruk av Selen. I dette eksemplet vil vi skrive ut tittelen på websiden vi skal besøke.

Opprett den nye filen ex04.py og skriv følgende kodelinjer i den.

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (executable_path = "./ drivere / geckodriver ")
nettleser.få ('https: // www.duckduckgo.com ')
skriv ut ("Tittel:% s"% nettleser.tittel)
nettleser.slutte()

Når du er ferdig, lagrer du filen.

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

Etter å ha kjørt ex04.py skript, 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, er 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 samme metode for å skrive ut tittelen på flere nettsider ved hjelp av Python-sløyfen.

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

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (executable_path = "./ drivere / geckodriver ")
urls = ['https: // www.duckduckgo.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
for url i urls:
nettleser.få (url)
skriv ut ("Tittel:% s"% nettleser.tittel)
nettleser.slutte()

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

Her, den nettadresser listen beholder nettadressen til hver webside.

EN til loop brukes til å gjenta gjennom nettadresser listeelementer.

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

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

$ python3 ex05.py

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

Eksempel 3: Hente ut data fra en webside

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

Først besøker du Tilfeldig.org-lenke fra Firefox. Siden skal generere en tilfeldig streng, som du kan se på skjermbildet nedenfor.

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

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

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

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

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

Som du kan se, er tilfeldige strengdata pakket inn i en HTML pre tag og inneholder klassen data.

Nå som vi vet HTML-representasjonen av dataene vi vil trekke ut, vil vi lage et Python-skript for å trekke ut dataene ved hjelp av Selen.

Opprett det nye Python-skriptet ex06.py og skriv følgende linjer med koder i skriptet

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (executable_path = "./ drivere / geckodriver ")
nettleser.få ("https: // www.tilfeldig.org / strenger /?num = 1 & len = 20 & sifre
= på & upperalpha = på & loweralpha = på & unik = på & format = html & rnd = ny ")
dataElement = nettleser.find_element_by_css_selector ('pre.data')
skriv ut (dataElement.tekst)
nettleser.slutte()

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

Her, den nettleser.få() metoden laster inn nettsiden i Firefox-nettleseren.

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

I dette tilfellet ville elementet være det pre.data, de pre tag som har kursnavnet data.

Under pre.data elementet er lagret i dataElement variabel.

Skriptet skriver deretter ut tekstinnholdet til det valgte pre.data element.

Hvis du driver ex06.py Python-skript, det skal trekke ut tilfeldige strengdata fra nettsiden, som du kan se på skjermbildet nedenfor.

$ python3 ex06.py

Som du kan se, hver gang jeg kjører ex06.py Python-skript, den trekker ut forskjellige tilfeldige strengdata fra nettsiden.

Eksempel 4: Henter ut liste over data fra nettsiden

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

Først besøker du generatoren for tilfeldige navn.info fra din Firefox-nettleser. Dette nettstedet genererer 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 (ol stikkord). De ol tag inkluderer også kursnavnet navneliste. Hvert av tilfeldige navn er representert som et listeelement (li tag) inne i ol stikkord.

For å trekke ut disse tilfeldige navnene, opprett det nye Python-skriptet ex07.py og skriv følgende linjer med koder i skriptet.

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (executable_path = "./ drivere / geckodriver ")
nettleser.get ("http: // random-name-generator.info / ")
nameList = nettleser.find_elements_by_css_selector ('ol.navneliste li ')
for navn i navnListe:
skriv ut (navn.tekst)
nettleser.slutte()

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

Her, den nettleser.få() metoden laster den tilfeldige navnet generator websiden i Firefox-nettleseren.

De nettleser.find_elements_by_css_selector () metoden bruker CSS-velgeren ol.navneliste li å finne alt li elementer inne i ol tag som har kursnavnet navneliste. Jeg har lagret alle de valgte li elementer i navneliste variabel.

EN til loop brukes til å gjenta gjennom navneliste liste over li elementer. I hver iterasjon, innholdet i li elementet er trykt på konsollen.

Hvis du driver ex07.py Python-skript, det henter alle tilfeldige navn fra nettsiden og skriver det ut på skjermen, som du kan se på skjermbildet nedenfor.

$ python3 ex07.py

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

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

Dette eksemplet er like enkelt som det første eksemplet. I dette eksemplet vil jeg besøke DuckDuckGo-søkemotoren og søke i begrepet selen hq ved bruk av selen.

Gå først til DuckDuckGo-søkemotoren fra Firefox-nettleseren.

Hvis du inspiserer søkeinntastingsfeltet, skal det ha ID-en search_form_input_homepage, som du kan se på skjermbildet nedenfor.

Lag nå det nye Python-skriptet ex08.py og skriv følgende linjer med koder i skriptet.

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (executable_path = "./ drivere / geckodriver ")
nettleser.få ("https: // duckduckgo.com / ")
searchInput = nettleser.find_element_by_id ('search_form_input_homepage')
searchInput.send_keys ('selen hq' + nøkler.TAST INN)

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

Her, den 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 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 Nøkler.TAST INN konstant.

Så snart DuckDuckGo-søkemotoren mottar Enter-tasten, trykk (Nøkler.TAST INN), 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-nettleseren DuckDuckGo-søkemotoren.

Den ble automatisk skrevet selen hq i søketekstboksen.

Så snart nettleseren mottok Enter-tasten, trykk (Nøkler.TAST INN), det viste søkeresultatet.

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

I eksempel 5 var det enkelt å sende inn skjema fra DuckDuckGo-søkemotoren. 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 formhåndtering.

Gå først til HTML Forms-siden til W3Schools.com fra Firefox nettleser. Når siden er lastet inn, bør du se et eksempel på skjemaet. Dette er skjemaet vi vil sende inn i dette eksemplet.

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

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

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
nettleser = webdriver.Firefox (executable_path = "./ drivere / geckodriver ")
nettleser.få ("https: // www.w3schools.no / 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 = "submit"]')
send inn knappen.send_keys (nøkler.TAST INN)

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

Her, den nettleser.få() metoden åpner W3schools HTML skjemaer i Firefox nettleser.

De nettleser.find_element_by_id () metoden finner inntastingsfeltene etter id fname og lname og det lagrer dem i fname og lname variabler, henholdsvis.

De fname.klar() og lname.klar() metoder fjerner standard fornavn (John) fname verdi og etternavn (Doe) lname verdi fra inntastingsfeltene.

De fname.send_keys () og lname.send_keys () metodetype Shahriar og Shovon i Fornavn og Etternavn inndatafelt, henholdsvis.

De nettleser.find_element_by_css_selector () metoden velger Send inn-knapp av skjemaet og lagrer det i submitButton variabel.

De send inn knappen.send_keys () metoden sender Enter-tasten (Nøkler.TAST INN) til Send inn-knapp av skjemaet. Denne handlingen sender skjemaet.

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

$ python3 ex09.py

Som du ser er skjemaet automatisk sendt inn med de riktige inngangene.

Konklusjon

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

Mus Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
De siste årene har datamaskiner og operativsystemer utviklet seg sterkt. Det var en tid da brukere måtte bruke kommandoer for å navigere gjennom filad...
Mus Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Dual Display Mouse Manager lar deg kontrollere og konfigurere musebevegelse mellom flere skjermer, ved å bremse bevegelsene nær grensen. Windows 10/8,...
Mus WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
Hvis du vil forbedre standardfunksjonene til musepekeren, bruk freeware WinMouse. Det legger til flere funksjoner som hjelper deg å få mest mulig ut a...