Bevezetés a szelénbe a Python 3 -ban

Introduction Selenium Python 3



A szelén egy olyan keretrendszer, amelyet webes alkalmazások tesztelésére használnak. A Selenium automatizálja a böngészőt, például a Chrome -ot vagy a Firefoxot, hogy a kívánt webhelyen teszteket futtasson. A szelén egy nagyon hatékony webkaparó eszköz is. A Selenium támogatja a JavaScriptet és az összes modern böngészőfunkciót. Ez az eszköz nagyon hatékony az információk kinyerésében a webhelyekről.

Ez a cikk bemutatja, hogyan kell beállítani a Selenium -ot a Linux disztribúción (azaz Ubuntu -n), valamint bemutatja az alapvető webes automatizálást és a selejtezést a Selenium Python 3 könyvtárral.





Előfeltételek

A cikkben használt parancsok és példák kipróbálásához az alábbiakkal kell rendelkeznie:



1) Linux disztribúció (lehetőleg Ubuntu) telepítve a számítógépére.
2) Python 3 telepítve a számítógépre.
3) A PIP 3 telepítve van a számítógépre.
4) A számítógépére telepített Google Chrome vagy Firefox webböngésző.



Sok cikket talál ezekről a témákról a címen LinuxHint.com . Feltétlenül nézze meg ezeket a cikkeket, ha további segítségre van szüksége.





A Python 3 virtuális környezetének előkészítése a projekthez

A Python virtuális környezet egy elszigetelt Python projektkönyvtár létrehozására szolgál. A PIP segítségével telepített Python modulok csak a projektkönyvtárba kerülnek telepítésre, nem pedig globálisan.

A Python virtualenv modul a Python virtuális környezetek kezelésére szolgál.



Telepítheti a Python programot virtualenv modul globálisan a PIP 3 használatával, az alábbiak szerint:

$ sudo pip3 install virtualenv

A PIP3 letölti és globálisan telepíti az összes szükséges modult.

Ezen a ponton a Python virtualenv modult globálisan kell telepíteni.

Hozza létre a projektkönyvtárat python-szelén-alap/ a jelenlegi munkakönyvtárban, az alábbiak szerint:

$ mkdir -pv python-selenium-basic/drivers

Keresse meg az újonnan létrehozott projektkönyvtárat python-szelén-alap/ , alábbiak szerint:

$CDpython-szelén-alap/

Hozzon létre egy Python virtuális környezetet a projekt könyvtárában a következő paranccsal:

$ virtualenv.env

A Python virtuális környezetet most létre kell hozni a projektkönyvtárban. ”

Aktiválja a Python virtuális környezetet a projektkönyvtárban a következő paranccsal:

$ forrás.env/bin/activ

Amint láthatja, a Python virtuális környezet aktiválva van ehhez a projektkönyvtárhoz.

A Selenium Python Library telepítése

A Selenium Python könyvtár elérhető a Python PyPI hivatalos tárházában.

Ezt a könyvtárat a PIP 3 segítségével telepítheti az alábbiak szerint:

$ pip3 telepítse a szelént

A Selenium Python könyvtárat most telepíteni kell.

Most, hogy a Selenium Python könyvtár telepítve van, a következő dolog, amit telepítenie kell, és telepítenie kell egy kedvenc illesztőprogramját kedvenc böngészőjéhez. Ebben a cikkben megmutatom, hogyan kell telepíteni a Firefox és a Chrome internetes illesztőprogramjait a Selenium számára.

A Firefox Gecko illesztőprogram telepítése

A Firefox Gecko illesztőprogram lehetővé teszi a Firefox webböngészőjének vezérlését vagy automatizálását a szelén használatával.

A Firefox Gecko illesztőprogram letöltéséhez látogasson el a A GitHub kiadja a mozilla/geckodriver oldalát webböngészőből.

Amint láthatja, a v0.26.0 a Firefox Gecko illesztőprogramjának legújabb verziója a cikk írásának idején.

A Firefox Gecko illesztőprogram letöltéséhez görgessen le egy kicsit, és kattintson az Linux geckodriver tar.gz archívumára, az operációs rendszer architektúrájától függően.

Ha 32 bites operációs rendszert használ, kattintson a gombra geckodriver-v0.26.0-linux32.tar.gz link.

Ha 64 bites operációs rendszert használ, kattintson a gombra geckodriver-v0.26.0-linuxx64.tar.gz link.

Esetemben letöltöm a Firefox Gecko Driver 64 bites verzióját.

A böngészőnek meg kell adnia az archívum mentését. Válassza a lehetőséget Fájl mentése majd kattintson rendben .

A Firefox Gecko illesztőprogram -archívumát a ~/Letöltések Könyvtár.

Kivonat a geckodriver-v0.26.0-linux64.tar.gz archívum a ~/Letöltések könyvtárat a sofőrök/ a projekt könyvtárába a következő parancs beírásával:

$kátrány -xzf~/Letöltések/geckodriver-v0.26.0-linux64.tar.gz-Cjárművezetők/

A Firefox Gecko illesztőprogram archívumának kibontása után új gekkó sofőr bináris fájlt kell létrehozni a sofőrök/ a projekt könyvtárában, amint az az alábbi képernyőképen is látható.

A Selenium Firefox Gecko illesztőprogram tesztelése

Ebben a szakaszban megmutatom, hogyan kell beállítani a legelső Selenium Python -szkriptet annak ellenőrzésére, hogy a Firefox Gecko illesztőprogram működik -e.

Először nyissa meg a projekt könyvtárat python-szelén-alap/ kedvenc IDE -jével vagy szerkesztőjével. Ebben a cikkben a Visual Studio Code -ot fogom használni.

Hozza létre az új Python -parancsfájlt ex01.py , és írja be a következő sorokat a parancsfájlba.

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok
tól től idő importalvás
böngésző=webmeghajtó.Firefox(futtatható_útvonal='./drivers/geckodriver')
böngésző.kap('http://www.google.com')
alvás(5)
böngésző.Kilépés()

Ha elkészült, mentse a ex01.py Python szkript.

A kódot a cikk későbbi részében magyarázom.

A következő sor a Selenium -ot a Firefox Gecko illesztőprogram használatára konfigurálja sofőrök/ a projekt könyvtárát.

Futtassa a következőt annak ellenőrzéséhez, hogy a Firefox Gecko illesztőprogram működik -e a szelénnel ex01.py Python szkript:

$ python3 ex01.py

A Firefox webböngészőnek automatikusan meg kell látogatnia a Google.com webhelyet, és 5 másodperc múlva bezárnia magát. Ha ez megtörténik, akkor a Selenium Firefox Gecko illesztőprogram megfelelően működik.

A Chrome webes illesztőprogram telepítése

A Chrome internetes illesztőprogram lehetővé teszi a Google Chrome webböngészőjének vezérlését vagy automatizálását a szelén használatával.

A Chrome Internetes illesztőprogramnak ugyanazt a verzióját kell letöltenie, mint a Google Chrome böngészőjének verzióját.

A Google Chrome böngésző verziószámának megtekintéséhez keresse fel a következő oldalt chrome: // settings/help a Google Chrome -ban. A verziószámnak szerepelnie kell a A Chrome -ról szakaszban, amint az az alábbi képernyőképen is látható.

Esetemben a verziószám az 83.0.4103.116 . A verziószám első három része ( 83.0.4103 , az én esetemben) meg kell egyeznie a Chrome Web Driver verziószámának első három részével.

A Chrome Web Driver letöltéséhez látogasson el a hivatalos Chrome illesztőprogram letöltési oldal .

Ban,-ben Jelenlegi kiadások szakaszban elérhető lesz a Google Web böngésző legfrissebb kiadásaihoz tartozó Chrome webillesztőprogram, amint az az alábbi képernyőképen is látható.

Ha az Ön által használt Google Chrome verzió nem szerepel a Jelenlegi kiadások szakaszban, görgessen le egy kicsit, és meg kell találnia a kívánt verziót.

Miután rákattintott a megfelelő Chrome Web Driver verzióra, a következő oldalra kell irányítania. Kattintson a chromedriver_linux64.zip linkre, ahogy az az alábbi képernyőképen is látható.

Most le kell tölteni a Chrome Web Driver archívumát.

A Chrome Web Driver archívumot most le kell tölteni a ~/Letöltések Könyvtár.

Kivonhatja a chromedriver-linux64.zip archívum a ~/Letöltések könyvtárat a sofőrök/ a projekt könyvtárát a következő paranccsal:

$ unzip~/Letöltések/chromedriver_linux64.postai irányítószám-d illesztőprogramok/

A Chrome Internetes illesztőprogram archívumának kibontása után új chromedriver bináris fájlt kell létrehozni a sofőrök/ a projekt könyvtárában, amint az az alábbi képernyőképen is látható.

A Selenium Chrome webes illesztőprogram tesztelése

Ebben a szakaszban megmutatom, hogyan állíthatja be a legelső Selenium Python -szkriptjét annak tesztelésére, hogy a Chrome internetes illesztőprogram működik -e.

Először hozza létre az új Python parancsfájlt ex02.py , és írja be a következő kódsorokat a parancsfájlba.

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok
tól től idő importalvás
böngésző=webmeghajtó.Króm(futtatható_útvonal='./drivers/chromedriver')
böngésző.kap('http://www.google.com')
alvás(5)
böngésző.Kilépés()

Ha elkészült, mentse a ex02.py Python szkript.

A kódot a cikk későbbi részében magyarázom.

A következő sor a Selenium -ot a Chrome webes illesztőprogram használatára konfigurálja sofőrök/ a projekt könyvtárát.

Annak ellenőrzéséhez, hogy a Chrome internetes illesztőprogram működik -e a szelénnel, futtassa a ex02.py Python -szkript, az alábbiak szerint:

$ python3 ex01.py

A Google Chrome webböngészőnek automatikusan fel kell keresnie a Google.com webhelyet, és 5 másodperc múlva bezárnia magát. Ha ez megtörténik, akkor a Selenium Firefox Gecko illesztőprogram megfelelően működik.

A webkaparás alapjai szelénnel

Mostantól a Firefox böngészőt fogom használni. Ha szeretné, használhatja a Chrome -ot is.

Egy alapvető Selenium Python szkriptnek úgy kell kinéznie, mint az alábbi képernyőképen látható szkript.

Először importálja a szelént webmeghajtó tól szelén modul.

Ezután importálja a Kulcsok tól től szelén.webdriver.common.kulcsok . Ez segít elküldeni a billentyűzetbillentyűket a Selenium által automatizált böngészőbe.

A következő sor létrehozza a böngésző objektum a Firefox webböngészőhöz a Firefox Gecko illesztőprogram (Webdriver) használatával. Ezzel az objektummal vezérelheti a Firefox böngésző műveleteit.

Weboldal vagy URL betöltése (betöltöm a webhelyet https://www.duckduckgo.com ), hívja a kap() módszere a böngésző objektumot a Firefox böngészőben.

A szelén használatával írhatja a teszteket, végezhet webes törlést, és végül bezárhatja a böngészőt a Kilépés() módszere a böngésző tárgy.

Fent a Selenium Python szkript alapvető elrendezése látható. Ezeket a sorokat a Selenium Python szkriptekbe fogja írni.

1. példa: Egy weboldal címének kinyomtatása

Ez lesz a legegyszerűbb példa a szelén használatával. Ebben a példában kinyomtatjuk a meglátogatott weboldal címét.

Hozza létre az új fájlt ex04.py és írja be a következő kódsorokat.

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok

böngésző=webmeghajtó.Firefox(futtatható_útvonal='./drivers/geckodriver')

böngésző.kap('https://www.duckduckgo.com')
nyomtatás('Cím: %s'% böngésző.cím)
böngésző.Kilépés()

Ha elkészült, mentse a fájlt.

Itt, a browser.title a meglátogatott weboldal címének és a nyomtatás() funkciót fogja használni a cím nyomtatásához a konzolban.

Futtatása után a ex04.py szkript, így kell lennie:

1) Nyissa meg a Firefoxot
2) Töltse be a kívánt weboldalt
3) Töltse le az oldal címét
4) Nyomtassa ki a címet a konzolon
5) Végül zárja be a böngészőt

Mint látható, a ex04.py script szépen kinyomtatta a weboldal címét a konzolban.

$ python3 ex04.py

2. példa: Több weboldal címének nyomtatása

Az előző példához hasonlóan ugyanazt a módszert használhatja több weboldal címének kinyomtatására a Python ciklus használatával.

Ennek megértéséhez hozza létre az új Python -parancsfájlt ex05.py és írja be a következő kódsorokat a parancsfájlba:

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok

böngésző=webmeghajtó.Firefox(futtatható_útvonal='./drivers/geckodriver')


URL -ek= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
számáraurlban benURL -ek:
böngésző.kap(url)
nyomtatás('Cím: %s'% böngésző.cím)
böngésző.Kilépés()

Ha elkészült, mentse el a Python parancsfájlt ex05.py .

Itt, a URL -ek lista megőrzi az egyes weboldalak URL -jét.

NAK NEK számára ciklus a iterálásra szolgál a URL -ek listaelemeket.

A Selenium minden iterációkor azt mondja a böngészőnek, hogy látogassa meg a url és megkapja a weboldal címét. Miután a szelén kinyerte a weboldal címét, kinyomtatja a konzolon.

Futtassa a Python szkriptet ex05.py , és látnia kell minden weboldal címét a URL -ek lista.

$ python3 ex05.py

Ez egy példa arra, hogy a Selenium hogyan tudja elvégezni ugyanazt a feladatot több weboldallal vagy webhellyel.

3. példa: Adatok kinyerése egy weboldalról

Ebben a példában megmutatom az adatok kinyerésének alapjait a weboldalakról a szelén használatával. Ezt webkaparásnak is nevezik.

Először látogasson el a Random.org link a Firefoxból. Az oldalnak véletlenszerű karakterláncot kell generálnia, amint az az alábbi képernyőképen látható.

A véletlen karakterlánc -adatok kinyeréséhez a szelén segítségével ismernie kell az adatok HTML -ábrázolását is.

Ha meg szeretné tekinteni, hogyan jelennek meg a véletlen karakterláncok adatai a HTML -ben, válassza ki a véletlen karakterlánc adatait, nyomja meg a jobb egérgombot (RMB), majd kattintson a Ellenőrizze az elemet (Q) , amint azt az alábbi képernyőkép is megjegyzi.

Az adatok HTML -ábrázolását a Ellenőr lapon, amint az az alábbi képernyőképen is látható.

A gombra is kattinthat Ellenőrzés ikon ( ) hogy ellenőrizze az oldalon található adatokat.

Kattintson az ellenőrzés ikonra (), és vigye az egérmutatót a kivonni kívánt véletlen karakterlánc -adatok fölé. Az adatok HTML -ábrázolását ugyanúgy kell megjeleníteni, mint korábban.

Mint látható, a véletlen karakterlánc -adatok HTML -be vannak csomagolva számára címkét, és tartalmazza az osztályt adat .

Most, hogy ismerjük a kinyerni kívánt adatok HTML -ábrázolását, létrehozunk egy Python -szkriptet az adatok kinyeréséhez a szelén segítségével.

Hozza létre az új Python -parancsfájlt ex06.py és írja be a következő kódsorokat a parancsfájlba

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok

böngésző=webmeghajtó.Firefox(futtatható_útvonal='./drivers/geckodriver')

böngésző.kap(„https://www.random.org/strings/?num=1&len=20&digits
= on & upperalpha = on & loweralpha = on & unique = on & format = html & rnd = new '
)

dataElement=böngésző.find_element_by_css_selector('pre.data')
nyomtatás(dataElement.szöveg)
böngésző.Kilépés()

Ha elkészült, mentse a ex06.py Python szkript.

Itt, a browser.get () módszer betölti a weboldalt a Firefox böngészőben.

Az browser.find_element_by_css_selector () metódus az oldal HTML -kódjában keres egy adott elemet, és visszaadja azt.

Ebben az esetben az elem az lenne pre.data , az számára címke, amely az osztály nevét tartalmazza adat .

Valami alatt pre.data elemet tárolta a dataElement változó.

A szkript ezután kinyomtatja a kiválasztott szöveg tartalmát pre.data elem.

Ha futtatja a ex06.py Python szkript, ki kell vonnia a véletlen karakterlánc adatait a weboldalról, amint az az alábbi képernyőképen látható.

$ python3 ex06.py

Mint látható, minden alkalommal, amikor futtatom a ex06.py Python szkript, más véletlen karakterlánc -adatokat von ki a weboldalról.

4. példa: Adatok listájának kinyerése a weboldalról

Az előző példa megmutatta, hogyan lehet kinyerni egyetlen adatelemet egy weboldalról a szelén használatával. Ebben a példában megmutatom, hogyan kell a szelént használni az adatok listájának kinyeréséhez egy weboldalról.

Először látogasson el a random-name-generator.info a Firefox webböngészőből. Ez a webhely tíz véletlenszerű nevet fog generálni minden alkalommal, amikor újból betölti az oldalt, amint az az alábbi képernyőképen is látható. Célunk, hogy ezeket a véletlenszerű neveket a szelén segítségével nyerjük ki.

Ha alaposabban megvizsgálja a névlistát, láthatja, hogy ez egy rendezett lista ( meghal címke). Az meghal címke tartalmazza az osztály nevét is névlista . Minden véletlenszerű név listaelemként jelenik meg ( a címke) belsejében meghal címke.

Ezen véletlenszerű nevek kinyeréséhez hozza létre az új Python -parancsfájlt ex07.py és írja be a következő kódsorokat a parancsfájlba.

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok

böngésző=webmeghajtó.Firefox(futtatható_útvonal='./drivers/geckodriver')

böngésző.kap('http://random-name-generator.info/')

névlista=böngésző.find_elements_by_css_selector('ol.nameList li')

számáranévban bennévlista:
nyomtatás(név.szöveg)

böngésző.Kilépés()

Ha elkészült, mentse a ex07.py Python szkript.

Itt, a browser.get () metódus betölti a véletlenszerű névgenerátor weboldalát a Firefox böngészőben.

Az browser.find_elements_by_css_selector () módszer a CSS választót használja ol.névLista li hogy megtalálja az összeset a elemek a meghal címke az osztály nevével névlista . Az összes kijelöltet tároltam a elemek a névlista változó.

NAK NEK számára ciklus a iterálásra szolgál a névlista listája a elemeket. Minden iterációban a a elem a konzolra van nyomtatva.

Ha futtatja a ex07.py Python szkript, lekér minden véletlenszerű nevet a weboldalról, és kinyomtatja a képernyőn, amint az az alábbi képernyőképen látható.

$ python3 ex07.py

Ha másodszor futtatja a szkriptet, akkor a véletlenszerű felhasználói nevek új listáját kell visszaadnia, amint az az alábbi képernyőképen látható.

5. példa: Űrlap elküldése - Keresés a DuckDuckGo -n

Ez a példa ugyanolyan egyszerű, mint az első példa. Ebben a példában meglátogatom a DuckDuckGo keresőmotort, és rákeresek a kifejezésre szelén hq szelén használatával.

Először is, látogasson el DuckDuckGo keresőmotor a Firefox webböngészőből.

Ha megvizsgálja a keresési beviteli mezőt, annak azonosítóval kell rendelkeznie search_form_input_homepage , amint az az alábbi képernyőképen is látható.

Most hozza létre az új Python -szkriptet ex08.py és írja be a következő kódsorokat a parancsfájlba.

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok
böngésző=webmeghajtó.Firefox(futtatható_útvonal='./drivers/geckodriver')
böngésző.kap('https://duckduckgo.com/')
searchInput=böngésző.find_element_by_id('search_form_input_homepage')
searchInput.send_keys('szelén hq'+ Kulcsok.BELÉP)

Ha elkészült, mentse a ex08.py Python szkript.

Itt, a browser.get () metódus betölti a DuckDuckGo keresőmotor honlapját a Firefox webböngészőben.

Az browser.find_element_by_id () metódus az azonosítójú bemeneti elemet választja ki search_form_input_homepage és tárolja a searchInput változó.

Az searchInput.send_keys () módszer a billentyűlenyomat adatok beviteli mezőbe történő elküldésére szolgál. Ebben a példában a karakterláncot küldi el szelén hq , és nyomja meg az Enter billentyűt a Kulcsok.ENTER állandó.

Amint a DuckDuckGo keresőmotor megkapja az Enter billentyűt, nyomja meg ( Kulcsok.ENTER ), megkeresi és megjeleníti az eredményt.

Futtassa a ex08.py Python -szkript, az alábbiak szerint:

$ python3 ex08.py

Mint látható, a Firefox webböngészője felkereste a DuckDuckGo keresőmotort.

Automatikusan gépelt szelén hq a keresőmezőben.

Amint a böngésző megkapta az Enter billentyűt, nyomja meg ( Kulcsok.ENTER ), megjelenítette a keresési eredményt.

6. példa: Űrlap elküldése a W3Schools.com webhelyen

Az 5. példában a DuckDuckGo keresőmotor űrlapjának beküldése egyszerű volt. Csak az Enter billentyűt kellett megnyomnia. De ez nem lesz minden űrlapbeadvány esetében. Ebben a példában összetettebb űrlapkezelést mutatok be.

Először látogasson el a A W3Schools.com HTML Űrlapok oldala a Firefox webböngészőből. Miután az oldal betöltődött, látnia kell egy példa űrlapot. Ebben a példában ezt a formát küldjük be.

Ha megvizsgálja az űrlapot, a Keresztnév a beviteli mezőben szerepelnie kell az azonosítónak f név , az Vezetéknév a beviteli mezőben szerepelnie kell az azonosítónak lname , és a Küldés gomb rendelkeznie kell a típus Beküldés , amint az az alábbi képernyőképen is látható.

Az űrlap Selenium használatával történő elküldéséhez hozza létre az új Python -szkriptet ex09.py és írja be a következő kódsorokat a parancsfájlba.

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok
böngésző=webmeghajtó.Firefox(futtatható_útvonal='./drivers/geckodriver')
böngésző.kap('https://www.w3schools.com/html/html_forms.asp')
f név=böngésző.find_element_by_id('f név')
f név.egyértelmű()
f név.send_keys('Shahriar')
lname=böngésző.find_element_by_id('név')
lname.egyértelmű()
lname.send_keys('Shovon')
submittedButton=böngésző.find_element_by_css_selector('input [type =' submitted ']')
submittedButton.send_keys(Kulcsok.BELÉP)

Ha elkészült, mentse a ex09.py Python szkript.

Itt, a browser.get () metódus megnyitja a W3schools HTML űrlapok oldalát a Firefox webböngészőben.

Az browser.find_element_by_id () metódus az azonosító alapján megkeresi a beviteli mezőket f név és lname és tárolja őket a f név és lname változók, ill.

Az fname.clear () és lname.clear () módszerek törlik az alapértelmezett utónevet (János) f név érték és vezetéknév (Doe) lname értéket a beviteli mezőkből.

Az fname.send_keys () és lname.send_keys () módszerek típusa Shahriar és Shovon ban,-ben Keresztnév és Vezetéknév beviteli mezők, ill.

Az browser.find_element_by_css_selector () módszer kiválasztja a Küldés gomb az űrlapot, és tárolja a submittedButton változó.

Az submittedButton.send_keys () A módszer elküldi az Enter billentyűt ( Kulcsok.ENTER ) hoz Küldés gomb a nyomtatványból. Ez a művelet elküldi az űrlapot.

Futtassa a ex09.py Python -szkript, az alábbiak szerint:

$ python3 ex09.py

Amint láthatja, az űrlapot automatikusan elküldték a megfelelő adatokkal.

Következtetés

Ez a cikk segítséget nyújt a Selenium böngésző tesztelésében, a web automatizálásában és a webes selejtező könyvtárak használatában a Python 3 -ban. További információért olvassa el a hivatalos Selenium Python dokumentáció .