Uvod v selen v Pythonu 3

Introduction Selenium Python 3



Selenium je okvir za testiranje spletnih aplikacij. Selenium avtomatizira brskalnik, na primer Chrome ali Firefox, za izvajanje testov na želenem spletnem mestu. Selen je tudi zelo močno orodje za strganje po spletu. Selenium podpira JavaScript in vse sodobne funkcije brskalnika. To orodje je zelo učinkovito pri pridobivanju informacij s spletnih mest.

Ta članek vam bo pokazal, kako nastaviti Selenium v ​​distribuciji Linuxa (t.i. Ubuntu), pa tudi, kako izvesti osnovno spletno avtomatizacijo in spletno razrezovanje s knjižnico Selenium Python 3.







Predpogoji

Če želite preizkusiti ukaze in primere, uporabljene v tem članku, morate imeti naslednje:



1) V vašem računalniku nameščena distribucija Linuxa (po možnosti Ubuntu).
2) Python 3 je nameščen na vašem računalniku.
3) PIP 3 nameščen na vašem računalniku.
4) Spletni brskalnik Google Chrome ali Firefox, nameščen v vašem računalniku.



Veliko člankov o teh temah najdete na LinuxHint.com . Če potrebujete dodatno pomoč, si oglejte te članke.





Priprava virtualnega okolja Python 3 za projekt

Navidezno okolje Python se uporablja za ustvarjanje izoliranega imenika projektov Python. Moduli Python, ki jih namestite z uporabo PIP, bodo nameščeni samo v imeniku projekta in ne globalno.

Python virtualenv Modul se uporablja za upravljanje virtualnih okolij Python.



Namestite lahko Python virtualenv modul globalno z uporabo PIP 3:

$ sudo pip3 namestite virtualenv

PIP3 bo prenesel in globalno namestil vse potrebne module.

Na tej točki je Python virtualenv modul je treba namestiti globalno.

Ustvarite imenik projekta python-selenium-basic/ v trenutnem delovnem imeniku:

$ mkdir -pv python-selenium-basic/gonilniki

Pomaknite se do novo ustvarjenega imenika projekta python-selenium-basic/ , kot sledi:

$CDpython-selenium-basic/

Ustvarite navidezno okolje Python v imeniku projekta z naslednjim ukazom:

$ virtualenv.env

Navidezno okolje Python je zdaj treba ustvariti v imeniku vašega projekta. '

Aktivirajte navidezno okolje Python v imeniku projekta z naslednjim ukazom:

$ vir.env/bin/aktiviraj

Kot lahko vidite, je za ta imenik projektov aktivirano virtualno okolje Python.

Namestitev knjižnice Selenium Python

Knjižnica Selenium Python je na voljo v uradnem skladišču Python PyPI.

To knjižnico lahko namestite z uporabo PIP 3 na naslednji način:

$ pip3 namestite selen

Zdaj bi morala biti nameščena knjižnica Selenium Python.

Zdaj, ko je knjižnica Selenium Python nameščena, morate naslednjič namestiti spletni gonilnik za vaš najljubši spletni brskalnik. V tem članku vam bom pokazal, kako namestiti gonilnike Firefox in Chrome za Selenium.

Namestitev gonilnika Firefox Gecko

Gonilnik Firefox Gecko vam omogoča nadzor ali avtomatizacijo spletnega brskalnika Firefox z uporabo Selenium.

Če želite prenesti gonilnik Firefox Gecko, obiščite GitHub objavi stran mozilla/geckodriver iz spletnega brskalnika.

Kot lahko vidite, je v0.26.0 najnovejša različica gonilnika Firefox Gecko v času nastanka tega članka.

Če želite prenesti gonilnik Firefox Gecko, se pomaknite navzdol in kliknite na arhiv geckodriver za Linux tar.gz, odvisno od arhitekture vašega operacijskega sistema.

Če uporabljate 32-bitni operacijski sistem, kliknite geckodriver-v0.26.0-linux32.tar.gz povezava.

Če uporabljate 64-bitni operacijski sistem, kliknite geckodriver-v0.26.0-linuxx64.tar.gz povezava.

V mojem primeru bom prenesel 64-bitno različico gonilnika Firefox Gecko.

Brskalnik vas bo pozval, da shranite arhiv. Izberite Shranite datoteko in nato kliknite v redu .

Arhiv gonilnikov Firefox Gecko je treba prenesti v ~/Prenosi imenik.

Izvlecite datoteko geckodriver-v0.26.0-linux64.tar.gz arhiv iz ~/Prenosi imenik v vozniki/ imenik vašega projekta, tako da vnesete naslednji ukaz:

$katran -xzf~/Prenosi/geckodriver-v0.26.0-linux64.tar.gz-Cvozniki/

Ko je arhiv gonilnika Firefox Gecko izločen, se pojavi nov voznik gekona binarno datoteko je treba ustvariti v vozniki/ imenik vašega projekta, kot vidite na spodnjem posnetku zaslona.

Testiranje gonilnika Selenium Firefox Gecko

V tem razdelku vam bom pokazal, kako nastaviti svoj prvi skript Selenium Python, da preizkusite, ali gonilnik Firefox Gecko deluje.

Najprej odprite imenik projekta python-selenium-basic/ z vašim najljubšim IDE ali urejevalnikom. V tem članku bom uporabil Visual Studio Code.

Ustvarite nov skript Python ex01.py in vnesite naslednje vrstice v skript.

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči
od čas uvozspi
brskalnik=spletni gonilnik.Firefox(executable_path='./drivers/geckodriver')
brskalnik.dobiti('http://www.google.com')
spi(5)
brskalnik.prenehati()

Ko končate, shranite ex01.py Python skript.

Kodo bom razložil v naslednjem razdelku tega članka.

Naslednja vrstica konfigurira Selenium za uporabo gonilnika Firefox Gecko iz vozniki/ imenik vašega projekta.

Če želite preveriti, ali gonilnik Firefox Gecko deluje s Selenium, izvedite naslednje ex01.py Python skript:

$ python3 ex01.py

Spletni brskalnik Firefox bi moral samodejno obiskati Google.com in se zapreti po 5 sekundah. Če se to zgodi, gonilnik Selenium Firefox Gecko deluje pravilno.

Namestitev spletnega gonilnika Chrome

Spletni gonilnik Chrome omogoča upravljanje ali avtomatizacijo spletnega brskalnika Google Chrome s pomočjo Selenium.

Prenesti morate isto različico spletnega gonilnika Chrome kot tisto v brskalniku Google Chrome.

Številko različice spletnega brskalnika Google Chrome obiščite chrome: // nastavitve/pomoč v brskalniku Google Chrome. Številka različice mora biti v O Chromu razdelku, kot vidite na spodnjem posnetku zaslona.

V mojem primeru je številka različice 83.0.4103.116 . Prvi trije deli številke različice ( 83.0.4103 , v mojem primeru) se morajo ujemati s prvimi tremi deli številke različice spletnega gonilnika Chrome.

Če želite prenesti spletni gonilnik za Chrome, obiščite uradna stran za prenos gonilnika Chrome .

V Trenutne izdaje razdelku, bo na voljo spletni gonilnik Chrome za najnovejše izdaje spletnega brskalnika Google Chrome, kot lahko vidite na spodnjem posnetku zaslona.

Če različica Google Chroma, ki jo uporabljate, ni v Trenutne izdaje razdelku, se pomaknite navzdol in našli boste želeno različico.

Ko kliknete ustrezno različico spletnega gonilnika za Chrome, bi se morali odpraviti na naslednjo stran. Kliknite na chromedriver_linux64.zip povezavo, kot je zapisano na spodnjem posnetku zaslona.

Arhiv spletnega gonilnika Chrome bi morali zdaj prenesti.

Arhiv spletnega gonilnika Chrome je zdaj treba prenesti v ~/Prenosi imenik.

Lahko izvlečete chromedriver-linux64.zip arhiv iz ~/Prenosi imenik v vozniki/ imenik vašega projekta z naslednjim ukazom:

$ unzip~/Prenosi/chromedriver_linux64.zadrgo-d gonilniki/

Ko je arhiv Chromovega spletnega gonilnika izvlečen, se pojavi nov kromiran binarno datoteko je treba ustvariti v vozniki/ imenik vašega projekta, kot vidite na spodnjem posnetku zaslona.

Testiranje gonilnika Selenium Chrome Web Driver

V tem razdelku vam bom pokazal, kako nastaviti svoj prvi skript Selenium Python, da preizkusite, ali spletni gonilnik Chrome deluje.

Najprej ustvarite nov skript Python ex02.py , in v skript vnesite naslednje vrstice kod.

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči
od čas uvozspi
brskalnik=spletni gonilnik.Chrome(executable_path='./drivers/chromedriver')
brskalnik.dobiti('http://www.google.com')
spi(5)
brskalnik.prenehati()

Ko končate, shranite ex02.py Python skript.

Kodo bom razložil v naslednjem razdelku tega članka.

Naslednja vrstica konfigurira Selenium za uporabo spletnega gonilnika Chrome iz vozniki/ imenik vašega projekta.

Če želite preveriti, ali spletni gonilnik Chrome deluje s Selenom, zaženite datoteko ex02.py Python skript:

$ python3 ex01.py

Spletni brskalnik Google Chrome bi moral samodejno obiskati Google.com in se zapreti po 5 sekundah. Če se to zgodi, gonilnik Selenium Firefox Gecko deluje pravilno.

Osnove spletnega strganja s selenom

Od zdaj naprej bom uporabljal spletni brskalnik Firefox. Če želite, lahko uporabite tudi Chrome.

Osnovni skript Selenium Python bi moral izgledati kot scenarij, prikazan na spodnjem posnetku zaslona.

Najprej uvozite selen spletni gonilnik Iz selena modul.

Nato uvozite datoteko Ključi od selenium.webdriver.common.keys . To vam bo pomagalo, da pritisnete tipke na tipkovnici v brskalnik, ki ga avtomatizirate iz Selenium.

Naslednja vrstica ustvari brskalnik predmet za spletni brskalnik Firefox z gonilnikom Firefox Gecko (Webdriver). S tem predmetom lahko nadzirate dejanja brskalnika Firefox.

Za nalaganje spletnega mesta ali URL -ja (bom naložil spletno mesto https://www.duckduckgo.com ), pokličite get () metoda brskalnik predmet v brskalniku Firefox.

Z uporabo Selenium lahko napišete svoje teste, izvedete razrez spletnih strani in na koncu zaprete brskalnik z uporabo prenehati() metoda brskalnik predmet.

Zgoraj je osnovna postavitev skripta Selenium Python. Te vrstice boste pisali v vse svoje skripte Selenium Python.

Primer 1: Tiskanje naslova spletne strani

To bo najlažji primer, o katerem bomo razpravljali z uporabo selena. V tem primeru bomo natisnili naslov spletne strani, ki jo bomo obiskali.

Ustvarite novo datoteko ex04.py in vanj vnesite naslednje vrstice kod.

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči

brskalnik=spletni gonilnik.Firefox(executable_path='./drivers/geckodriver')

brskalnik.dobiti('https://www.duckduckgo.com')
tiskanje('Naslov: %s'% brskalnik.naslov)
brskalnik.prenehati()

Ko končate, shranite datoteko.

Tukaj, browser.title se uporablja za dostop do naslova obiskane spletne strani in print () funkcija bo uporabljena za tiskanje naslova v konzoli.

Po zagonu ex04.py skript, bi moral:

1) Odprite Firefox
2) Naložite želeno spletno stran
3) Pridobite naslov strani
4) Natisnite naslov na konzoli
5) Na koncu zaprite brskalnik

Kot lahko vidite, ex04.py script je lepo natisnil naslov spletne strani v konzoli.

$ python3 ex04.py

Primer 2: Tiskanje naslovov več spletnih strani

Tako kot v prejšnjem primeru lahko z isto metodo natisnete naslov več spletnih strani z zanko Python.

Če želite razumeti, kako to deluje, ustvarite nov skript Python ex05.py in v skript vnesite naslednje vrstice kode:

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči

brskalnik=spletni gonilnik.Firefox(executable_path='./drivers/geckodriver')


urls= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
zaurlvurls:
brskalnik.dobiti(url)
tiskanje('Naslov: %s'% brskalnik.naslov)
brskalnik.prenehati()

Ko končate, shranite skript Python ex05.py .

Tukaj, urls seznam hrani URL vsake spletne strani.

TO za zanka se uporablja za ponovitev po urls elementi seznama.

Na vsaki ponovitvi Selenium brskalniku pove, naj obišče url in dobite naslov spletne strani. Ko Selenium izvleče naslov spletne strani, se natisne v konzoli.

Zaženite skript Python ex05.py , naslov vsake spletne strani pa bi morali videti v urls seznam.

$ python3 ex05.py

To je primer, kako lahko Selenium opravlja isto nalogo z več spletnimi stranmi ali spletnimi mesti.

Primer 3: Izvleček podatkov s spletne strani

V tem primeru vam bom pokazal osnove pridobivanja podatkov s spletnih strani z uporabo Selenium. To je znano tudi kot strganje po spletu.

Najprej obiščite Random.org povezavo iz Firefoxa. Stran mora ustvariti naključni niz, kot lahko vidite na spodnjem posnetku zaslona.

Če želite izvleči podatke naključnega niza z uporabo Selenium, morate poznati tudi HTML -predstavitev podatkov.

Če si želite ogledati, kako so podatki naključnega niza predstavljeni v HTML, izberite podatke naključnega niza in pritisnite desni gumb miške (RMB) in kliknite na Preglejte element (Q) , kot je zapisano na spodnjem posnetku zaslona.

HTML predstavitev podatkov mora biti prikazana v Inšpektor zavihek, kot lahko vidite na spodnjem posnetku zaslona.

Lahko tudi kliknete na Ikona za pregled ( ) za pregled podatkov s strani.

Kliknite ikono za pregled () in se pomaknite nad naključne podatke niza, ki jih želite izvleči. Predstavitev podatkov v HTML mora biti prikazana kot prej.

Kot lahko vidite, so podatki naključnega niza zaviti v HTML za oznako in vsebuje razred podatkov .

Zdaj, ko poznamo HTML predstavitev podatkov, ki jih želimo izvleči, bomo ustvarili skript Python za ekstrakcijo podatkov z uporabo Selenium.

Ustvarite nov skript Python ex06.py in v skript vnesite naslednje vrstice kod

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči

brskalnik=spletni gonilnik.Firefox(executable_path='./drivers/geckodriver')

brskalnik.dobiti('https://www.random.org/strings/?num=1&len=20&digits
= na & upperalpha = na & loweralpha = na & edinstveno = na & format = html & rnd = novo '
)

dataElement=brskalnik.find_element_by_css_selector('pre.data')
tiskanje(dataElement.besedilo)
brskalnik.prenehati()

Ko končate, shranite ex06.py Python skript.

Tukaj, browser.get () method naloži spletno stran v brskalniku Firefox.

The browser.find_element_by_css_selector () method išče HTML kodo strani za določen element in ga vrne.

V tem primeru bi bil element pre.data , za oznako z imenom razreda podatkov .

Spodaj je pre.data element je bil shranjen v dataElement spremenljivka.

Skript nato natisne besedilno vsebino izbranega pre.data element.

Če zaženete ex06.py Python skript, bi moral izvleči podatke naključnega niza s spletne strani, kot lahko vidite na spodnjem posnetku zaslona.

$ python3 ex06.py

Kot vidite, vsakič, ko zaženem ex06.py Python skript, s spletne strani izvleče različne podatke o naključnem nizu.

Primer 4: Izvlečenje seznama podatkov s spletne strani

Prejšnji primer vam je pokazal, kako z uporabo Selenium izvlečete en sam podatkovni element s spletne strani. V tem primeru vam bom pokazal, kako s selenom izvleči seznam podatkov s spletne strani.

Najprej obiščite generator naključnih imen.info iz brskalnika Firefox. To spletno mesto bo ob vsakem ponovnem nalaganju strani ustvarilo deset naključnih imen, kot lahko vidite na spodnjem posnetku zaslona. Naš cilj je izvleči ta naključna imena s pomočjo selena.

Če natančneje pregledate seznam imen, lahko vidite, da gre za urejen seznam ( umreti oznaka). The umreti Oznaka vsebuje tudi ime razreda nameList . Vsako od naključnih imen je predstavljeno kot postavka seznama ( pri oznako) v umreti oznaka.

Če želite izvleči ta naključna imena, ustvarite nov skript Python ex07.py in v skript vnesite naslednje vrstice kod.

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči

brskalnik=spletni gonilnik.Firefox(executable_path='./drivers/geckodriver')

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

nameList=brskalnik.find_elements_by_css_selector('ol.nameList li')

zaimevnameList:
tiskanje(ime.besedilo)

brskalnik.prenehati()

Ko končate, shranite ex07.py Python skript.

Tukaj, browser.get () method naloži spletno stran generatorja naključnih imen v brskalniku Firefox.

The browser.find_elements_by_css_selector () metoda uporablja izbirnik CSS ol.nameList li najti vse pri elementi znotraj umreti oznako z imenom razreda nameList . Vse izbrane sem shranil pri elementi v nameList spremenljivka.

TO za zanka se uporablja za ponovitev po nameList seznam pri elementi. V vsaki ponovitvi je vsebina pri element je natisnjen na konzoli.

Če zaženete ex07.py Python skript, bo prenesla vsa naključna imena s spletne strani in ga natisnila na zaslonu, kot lahko vidite na spodnjem posnetku zaslona.

$ python3 ex07.py

Če skript zaženete drugič, mora vrniti nov seznam naključnih uporabniških imen, kot lahko vidite na spodnjem posnetku zaslona.

Primer 5: Oddaja obrazca - Iskanje na DuckDuckGo

Ta primer je tako preprost kot prvi primer. V tem primeru bom obiskal iskalnik DuckDuckGo in poiskal izraz selen hq z uporabo selena.

Najprej obiščite Iskalnik DuckDuckGo iz spletnega brskalnika Firefox.

Če pregledate vnosno polje za iskanje, mora imeti ID search_form_input_homepage , kot lahko vidite na spodnjem posnetku zaslona.

Zdaj ustvarite nov skript Python ex08.py in v skript vnesite naslednje vrstice kod.

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči
brskalnik=spletni gonilnik.Firefox(executable_path='./drivers/geckodriver')
brskalnik.dobiti('https://duckduckgo.com/')
searchInput=brskalnik.find_element_by_id('search_form_input_homepage')
searchInput.send_keys('selenov hq'+ Ključi.ENTER)

Ko končate, shranite ex08.py Python skript.

Tukaj, browser.get () method naloži domačo stran iskalnika DuckDuckGo v brskalniku Firefox.

The browser.find_element_by_id () method izbere vhodni element z id search_form_input_homepage in ga shrani v searchInput spremenljivka.

The searchInput.send_keys () se uporablja za pošiljanje podatkov o pritisku tipk v polje za vnos. V tem primeru pošlje niz selen hq , tipko Enter pa pritisnete s tipko Ključi.ENTER konstantno.

Takoj, ko iskalnik DuckDuckGo prejme tipko Enter ( Ključi.ENTER ), išče in prikaže rezultat.

Zaženite ex08.py Python skript:

$ python3 ex08.py

Kot lahko vidite, je spletni brskalnik Firefox obiskal iskalnik DuckDuckGo.

Samodejno je vnesel selen hq v iskalno polje za iskanje.

Takoj, ko je brskalnik prejel tipko Enter (pritisnite Ključi.ENTER ), je prikazal rezultat iskanja.

Primer 6: Oddaja obrazca na spletnem mestu W3Schools.com

V primeru 5 je bilo oddajanje obrazca za iskalnik DuckDuckGo enostavno. Vse kar morate storiti je, da pritisnete tipko Enter. Vendar to ne velja za vse oddane obrazce. V tem primeru vam bom pokazal bolj zapleteno ravnanje z obrazci.

Najprej obiščite Stran z obrazci HTML na spletnem mestu W3Schools.com iz brskalnika Firefox. Ko se stran naloži, bi morali videti primer obrazca. To je obrazec, ki ga bomo oddali v tem primeru.

Če pregledate obrazec, se Ime polje za vnos mora imeti ID fname , Priimek polje za vnos mora imeti ID lname , in Gumb za oddajo bi morali imeti tip predloži , kot lahko vidite na spodnjem posnetku zaslona.

Če želite poslati obrazec z uporabo Selenium, ustvarite nov skript Python ex09.py in v skript vnesite naslednje vrstice kod.

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči
brskalnik=spletni gonilnik.Firefox(executable_path='./drivers/geckodriver')
brskalnik.dobiti('https://www.w3schools.com/html/html_forms.asp')
fname=brskalnik.find_element_by_id('fname')
fname.jasno()
fname.send_keys('Shahriar')
lname=brskalnik.find_element_by_id('lname')
lname.jasno()
lname.send_keys('Shovon')
submitButton=brskalnik.find_element_by_css_selector('input [type =' submit ']')
submitButton.send_keys(Ključi.ENTER)

Ko končate, shranite ex09.py Python skript.

Tukaj, browser.get () metoda odpre stran obrazcev HTML W3schools v spletnem brskalniku Firefox.

The browser.find_element_by_id () metoda najde vnosna polja po id -ju fname in lname in jih shrani v fname in lname spremenljivke.

The fname.clear () in lname.clear () metode počistijo privzeto ime (John) fname vrednost in priimek (Srna) lname vrednost iz vnosnih polj.

The fname.send_keys () in lname.send_keys () vrsto metode Shahriar in Shovon v Ime in Priimek vnosna polja.

The browser.find_element_by_css_selector () metoda izbere Gumb za oddajo obrazca in ga shrani v submitButton spremenljivka.

The submitButton.send_keys () metoda pošlje tipko Enter ( Ključi.ENTER ) do Gumb za oddajo obrazca. To dejanje predloži obrazec.

Zaženite ex09.py Python skript:

$ python3 ex09.py

Kot lahko vidite, je bil obrazec samodejno poslan s pravilnimi vnosi.

Zaključek

Ta članek vam bo pomagal začeti s testiranjem brskalnika Selenium, spletno avtomatizacijo in knjižnicami za razrez spletnih strani v Pythonu 3. Za več informacij si oglejte uradna dokumentacija Selenium Python .