Selen

Introduktion til selen i Python 3

Introduktion til selen i Python 3
Selen er en ramme, der bruges til test af webapplikationer. Selen automatiserer en browser, såsom Chrome eller Firefox, til at køre tests på dit ønskede websted. Selen er også et meget kraftigt 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 (i.e., Ubuntu) samt hvordan man udfører grundlæggende webautomatisering og skrotning af web med Selenium Python 3-biblioteket.

Forudsætninger

For at prøve de 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-webbrowseren installeret på din computer.

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

Forberedelse af Python 3 virtuelt miljø til projektet

Python Virtual Environment bruges til at oprette en isoleret Python-projektmappe. Python-modulerne, som du installerer ved hjælp af PIP, installeres kun i projektmappen snarere end 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 downloader og installerer globalt alle de krævede moduler.

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

Opret projektmappen python-selen-basisk / i din nuværende arbejdsmappe som følger:

$ mkdir -pv python-selen-basic / drivere

Naviger til din nyoprettede projektmappe python-selen-basisk /, som følger:

$ cd python-selen-basic /

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

$ virtualenv .env

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

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

$ kilde .env / bin / aktiver

Som du kan se, aktiveres det virtuelle Python-miljø for denne projektmappe.

Installation af Selenium Python Library

Selen Python-biblioteket er tilgængeligt i det officielle Python PyPI-lager.

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 Driver giver dig mulighed for at kontrollere eller automatisere Firefox-browseren ved hjælp af Selenium.

For at downloade Firefox Gecko Driver, skal du besøge GitHub-udgivelsessiden for mozilla / geckodriver fra en webbrowser.

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

For at downloade Firefox Gecko Driver, rul lidt ned og klik på Linux geckodriver tjære.gz-arkiv afhængigt af dit operativsystems arkitektur.

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

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

I mit tilfælde downloader jeg 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.

Uddrag geckodriver-v0.26.0-linux64.tjære.gz arkiv fra ~ / Downloads bibliotek til drivere / katalog over dit projekt ved at indtaste følgende kommando:

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

Når Firefox Gecko Driver-arkivet er udpakket, et nyt geckodriver binær fil skal oprettes i drivere / katalog over dit projekt, som du kan se i skærmbilledet nedenfor.

Test af Selenium Firefox Gecko Driver

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

Åbn først projektmappen python-selen-basisk / med din foretrukne IDE eller editor. I denne artikel bruger jeg Visual Studio-kode.

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

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
fra tidspunktet import søvn
browser = webdriver.Firefox (eksekverbar_sti = "./ drivere / geckodriver ")
browser.få ('http: // www.google.com ')
sove (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 Selen til at bruge Firefox Gecko Driver fra drivere / katalog over dit projekt.

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

$ python3 ex01.py

Firefox-browseren skal automatisk besøge Google.com og luk 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 kontrollere eller automatisere Google Chrome-webbrowseren ved hjælp af Selenium.

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

For at finde versionsnummeret på din Google Chrome-webbrowser, besøg chrome: // settings / help i Google Chrome. Versionsnummeret skal være i Om Chrome sektion, som du kan se i skærmbilledet nedenfor.

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

For at downloade Chrome Web Driver skal du besøge den officielle Chrome Driver download-side.

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

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

Når du klikker på den korrekte Chrome Web Driver-version, skal det tage dig til den næste side. Klik på chromedriver_linux64.lynlås link, som noteret i skærmbilledet nedenfor.

Chrome Web Driver-arkivet skal nu downloades.

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

Du kan udtrække chromedriver-linux64.lynlås arkiv fra ~ / Downloads bibliotek til drivere / katalog over dit projekt med følgende kommando:

$ unzip ~ / Downloads / chromedriver_linux64.zip-d drivere /

Når Chrome Web Driver-arkivet er udpakket, et nyt chromedriver binær fil skal oprettes i drivere / katalog over dit projekt, som du kan se i skærmbilledet nedenfor.

Test af selen Chrome Web Driver

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

Opret først det nye Python-script ex02.py, og skriv følgende linjer med koder i scriptet.

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
fra tidspunktet import søvn
browser = webdriver.Chrome (eksekverbar_sti = "./ drivere / chromedriver ")
browser.få ('http: // www.google.com ')
sove (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 Selen til at bruge Chrome Web Driver fra drivere / katalog over dit projekt.

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

$ python3 ex01.py

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

Grundlæggende om webskrabning med selen

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

Et grundlæggende Selenium Python-script skal se ud som scriptet vist i skærmbilledet nedenfor.

Først skal du importere selen webdriver fra selen modul.

Importér derefter Nøgler fra selen.webdriver.almindelige.nøgler. Dette hjælper dig med at sende tastetryk til den browser, du automatiserer fra Selenium.

Den 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 skrotning af web 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 nemmeste 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 linjer med koder i den.

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
browser = webdriver.Firefox (eksekverbar_sti = "./ drivere / geckodriver ")
browser.get ('https: // www.duckduckgo.com ')
udskriv ("Titel:% s"% browser.titel)
browser.Afslut()

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

Her, den browser.titel bruges til at få adgang til titlen på den besøgte webside og Print() funktion 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 titlen på siden
4) Udskriv titlen på konsollen
5) Og til sidst, luk 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 titler 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-sløjfen.

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

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
browser = webdriver.Firefox (eksekverbar_sti = "./ drivere / geckodriver ")
urls = ['https: // www.duckduckgo.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
for webadresse i webadresser:
browser.få (url)
udskriv ("Titel:% s"% browser.titel)
browser.Afslut()

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

Her, den webadresser listen gemmer URL'en på hver webside.

EN til loop bruges til at gentage gennem webadresser listeelementer.

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

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

$ python3 ex05.py

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

Eksempel 3: Uddrag af data fra en webside

I dette eksempel viser jeg dig det grundlæggende ved at udtrække data fra websider ved hjælp af Selen. 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 nedenfor.

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

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

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

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

Klik på inspiceringsikonet () 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 i en HTML præ tag og indeholder klassen data.

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

Opret det nye Python-script ex06.py og skriv følgende linjer med koder i scriptet

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
browser = webdriver.Firefox (eksekverbar_sti = "./ drivere / geckodriver ")
browser.get ("https: // www.tilfældig.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 ('præ.data')
udskrive (dataElement.tekst)
browser.Afslut()

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

Her, den browser.få() metode indlæser websiden i Firefox-browseren.

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

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

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

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

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

$ python3 ex06.py

Som du kan se, hver gang jeg kører ex06.py Python-script, det udtrækker forskellige tilfældige strengdata fra websiden.

Eksempel 4: Uddrag af liste over data fra websiden

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

Besøg først tilfældiggeneratoren.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 nedenfor. 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 (ol tag). Det ol tag indeholder også klassens navn navneliste. Hver af de tilfældige navne er repræsenteret som et listeelement (li tag) inde i ol tag.

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

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
browser = webdriver.Firefox (eksekverbar_sti = "./ drivere / geckodriver ")
browser.get ("http: // random-name-generator.info / ")
nameList = browser.find_elements_by_css_selector ('ol.nameList li ')
for navn i navnListe:
Print navn.tekst)
browser.Afslut()

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

Her, den browser.få() metoden indlæser den tilfældige navnegeneratorside i Firefox-browseren.

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

EN til loop bruges til at gentage gennem navneliste liste af li elementer. I hver iteration, indholdet af li elementet er trykt på konsollen.

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

$ 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 nedenfor.

Eksempel 5: Indsendelsesformular - Søgning på DuckDuckGo

Dette eksempel er lige så simpelt som det første eksempel. I dette eksempel vil jeg besøge DuckDuckGo-søgemaskinen og søge på 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 nedenfor.

Opret nu det nye Python-script ex08.py og skriv følgende linjer med koder i scriptet.

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
browser = webdriver.Firefox (eksekverbar_sti = "./ drivere / geckodriver ")
browser.get ("https: // duckduckgo.com / ")
searchInput = browser.find_element_by_id ('search_form_input_homepage')
searchInput.send_keys ('selen hq' + nøgler.GÅ IND)

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

Her, den browser.få() metoden indlæser hjemmesiden for DuckDuckGo-søgemaskinen i Firefox-browseren.

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 () metoden bruges til at sende tastetrykdata til indtastningsfeltet. I dette eksempel sender den strengen selen hq, og der trykkes på Enter-tasten ved hjælp af Nøgler.GÅ IND konstant.

Så snart DuckDuckGo-søgemaskinen modtager Enter-tasten, trykkes (Nøgler.GÅ IND), 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.

Det blev automatisk skrevet selen hq i søgefeltet.

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

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

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

Først skal du besøge siden HTML-formularer i W3Schools.com fra Firefox-webbrowser. Når siden er indlæst, skal du se et eksempel på en formular. Dette er den form, vi sender i dette eksempel.

Hvis du inspicerer formularen, Fornavn indtastningsfelt skal have id fname, det Efternavn indtastningsfelt skal have id lname, og Send-knap skulle have type Indsend, som du kan se på skærmbilledet nedenfor.

For at indsende denne formular ved hjælp af Selen skal du oprette det nye Python-script ex09.py og skriv følgende linjer med koder i scriptet.

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
browser = webdriver.Firefox (eksekverbar_sti = "./ drivere / geckodriver ")
browser.get ("https: // www.w3skoler.com / html / html_forms.asp ")
fname = browser.find_element_by_id ('fname')
fname.klar()
fname.send_keys ('Shahriar')
lname = browser.find_element_by_id ('lname')
lname.klar()
lname.send_keys ('Shovon')
submitButton = browser.find_element_by_css_selector ('input [type = "send"]')
sendButton.send_keys (nøgler.GÅ IND)

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

Her, den browser.få() metoden åbner W3schools HTML-formularer i Firefox-browseren.

Det browser.find_element_by_id () metoden finder inputfelterne efter id'et fname og lname og det gemmer dem i fname og lname variabler, henholdsvis.

Det fname.klar() og lname.klar() metoder rydder standardnavnet (John) fname værdi og efternavn (Doe) lname værdi fra inputfelterne.

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

Det browser.find_element_by_css_selector () metoden vælger Send-knap af formularen og gemmer den i sendButton variabel.

Det sendButton.send_keys () metode sender Enter-tasten tryk (Nøgler.GÅ IND) 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 indsendt med de korrekte input.

Konklusion

Denne artikel skal hjælpe dig med at komme i gang med test af Selenium-browsere, webautomatisering og web-scrapping-biblioteker i Python 3. For mere information, se den officielle Selenium Python-dokumentation.

Top 10 spil at spille på Ubuntu
Windows-platform har været en af ​​de dominerende platforme til spil på grund af den enorme procentdel af spil, der udvikler sig i dag til indbygget a...
5 bedste arkadespil til Linux
I dag er computere seriøse maskiner, der bruges til spil. Hvis du ikke kan få den nye høje score, ved du hvad jeg mener. I dette indlæg vil du kende n...
Kamp om Wesnoth 1.13.6 Udvikling frigivet
Kamp om Wesnoth 1.13.6 udgivet i sidste måned, er den sjette udviklingsudgivelse i 1.13.x-serien, og den leverer en række forbedringer, især til bruge...