Hogyan kell várni, hogy az oldal betöltődjön szelénnel

How Wait Page Load With Selenium



Míg a webautomatizálás vagy a webkaparás a Selenium webes illesztőprogrammal, olyan problémákkal szembesülhet, mint például a kiválasztani kívánt elem nem érhető el, vagy a megnyomni kívánt gomb nem áll készen a kattintásra stb.

Ennek oka az, hogy a Selenium webes illesztőprogramnak le kell töltenie a weboldalt, és be kell fejeznie az oldal renderelését, mielőtt bármit tehetne rajta. Régebben a webszerver létrehozta egy webhely tartalmát, a böngésző pedig csak letöltötte és megjelenítette. Manapság sok egyoldalas webalkalmazásunk van, amelyek kicsit másképp működnek. Az egyoldalas webes alkalmazásokban (SPA) a webszerver csak a frontend kódokat szolgálja ki. Miután a kezelőfelület kódja megjelenik a böngészőben, a frontend kód AJAX használatával kér API adatokat a webszerverhez. Miután a kezelőfelület megkapta az API -adatokat, megjeleníti azokat a böngészőben. Tehát, bár a böngésző befejezte a weboldal letöltését és megjelenítését, a weboldal még mindig nem áll készen. Meg kell várnia, amíg megkapja az API -adatokat, és azokat is rendereli. Tehát a megoldás erre a problémára az, ha megvárjuk az adatok rendelkezésre állását, mielőtt bármit is tennénk a szelénnel.







A szelénben kétféle várakozás létezik:
1) Implicit várakozás
2) Kifejezett várakozás



1) Implicit várakozás: Ezt a legegyszerűbb megvalósítani. Az implicit várakozás azt mondja a Selenium webes illesztőprogramnak, hogy várjon néhány másodpercet, amíg a DOM (dokumentumobjektum -modell) készen áll (a weboldal készen áll).



2) Kifejezett várakozás: Ez egy kicsit bonyolultabb, mint az implicit várakozás. Kifejezett várakozás esetén megmondja a Selenium webes illesztőprogramnak, mire kell várnia. A szelén várja, hogy az adott feltétel teljesüljön. Ha ez teljesül, a Selenium webes illesztőprogram készen áll más parancsok fogadására. Általában az explicit várakozási idő változó. Attól függ, milyen gyorsan teljesülnek a feltételek. A legrosszabb esetben az explicit várakozás addig vár, amíg az implicit várakozás.





Ebben a cikkben megmutatom, hogyan kell várni (implicit és explicit), amíg egy oldal betöltődik a szelénnel. Szóval, kezdjük.

Feltételek:

A cikk parancsainak és példáinak kipróbálásához rendelkeznie kell:



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) Python virtualenv csomag telepítve van a számítógépre.
5) Mozilla Firefox vagy Google Chrome webböngészők telepítve a számítógépre.
6) Tudnia kell, hogyan kell telepíteni a Firefox Gecko illesztőprogramot vagy a Chrome webes illesztőprogramot.

A 4., 5. és 6. követelmény teljesítéséhez olvassa el cikkemet Bevezetés a szelénbe a Python 3 segítségével a Linuxhint.com oldalon.

A többi témában számos cikket talál LinuxHint.com . Feltétlenül nézze meg őket, ha segítségre van szüksége.

Projektkönyvtár beállítása:

Ha mindent rendben szeretne tartani, hozzon létre egy új projektkönyvtárat szelén-várakozás/ alábbiak szerint:

$mkdir -pvszelén-várakozás/járművezetők

Navigáljon a szelén-várakozás/ projekt könyvtára az alábbiak szerint:

$CDszelén-várakozás/

Hozzon létre egy Python virtuális környezetet a projektkönyvtárban az alábbiak szerint:

$virtualenv .venv

Aktiválja a virtuális környezetet az alábbiak szerint:

$forrás.venv/am/aktiválja

Telepítse a szelént a PIP3 használatával az alábbiak szerint:

$ pip3 telepítse a szelént

Töltse le és telepítse az összes szükséges webes illesztőprogramot a sofőrök/ projekt könyvtára. Cikkemben elmagyaráztam a webes illesztőprogramok letöltésének és telepítésének folyamatát Bevezetés a szelénbe a Python 3 segítségével . Ha segítségre van szüksége, keressen tovább LinuxHint.com ahhoz a cikkhez.

Ebben a cikkben a bemutatóhoz a Google Chrome böngészőt fogom használni. Szóval használni fogom a chromedriver bináris a sofőrök/ Könyvtár.

Az implicit várakozás kísérletezéséhez hozzon létre egy új Python -szkriptet ex01.py a projektkönyvtárban, és írja be a fájl következő kódsorait.

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok
lehetőségek=webmeghajtó.ChromeOptions()
lehetőségek.fejetlen = Igaz
böngésző=webmeghajtó.Króm(futtatható_útvonal='./drivers/chromedriver',lehetőségek=lehetőségek)
böngésző.implicitly_wait(10)
böngésző.kap('https://www.unixtimestamp.com/')
időbélyeg=böngésző.find_element_by_xpath('// h3 [@] [1]')
nyomtatás('Jelenlegi időbélyeg: %s'%(időbélyeg.szöveg.hasított('')[0]))
böngésző.Bezárás()

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

Az 1. és 2. sor importálja az összes szükséges szelén összetevőt.

A 4. sor létrehoz egy Chrome -beállítások objektumot.

Az 5. sor lehetővé teszi a fej nélküli módot a Chrome webes illesztőprogram számára.

A 7. sor létrehoz egy Chrome böngészőobjektumot a chromedriver bináris a sofőrök/ Könyvtár.

A 8. sort arra használják, hogy a szelén azt mondja, hogy 10 másodpercig implicit módon várjon implicitly_wait () böngésző módszer.

A 10. sor betölti a www.unixtimestamp.com címet a böngészőben.

A 12. sor megtalálja az időbélyegző elemet az XPath választó segítségével // h3 [@class = ’text-veszély’] [1] és tárolja a időbélyeg változó.

Az XPath választót a Chrome fejlesztői eszközből szereztem be. Mint látható, az időbélyeg az elsőben található h3 elem az osztály nevével szövegveszély . 2 van h3 elemeket az osztállyal szövegveszély .

A 13. sor csak az időbélyeget nyomtatja ki az elemből, amelyet az XPath választó segítségével kiválasztottam és a időbélyeg változó.

A 14. sor bezárja a böngészőt.

Ha elkészült, futtassa a Python szkriptet ex01.py alábbiak szerint:

$ python3 ex01.py

Amint láthatja, az aktuális időbélyegzőt a unixtimestamp.com webhelyről vonják ki, és kinyomtatják a konzolon.

Explicit Wait használata:

A kifejezett várakozással való kísérletezéshez hozzon létre egy új Python -szkriptet ex02.py a projektkönyvtárban, és írja be a fájl következő kódsorait.

tól tőlszelénimportwebmeghajtó
tól tőlszelén.webmeghajtó.gyakori.kulcsok importKulcsok
tól tőlszelén.webmeghajtó.gyakori.által importÁltal
tól tőlszelén.webmeghajtó.támogatás.hagyma importWebDriverWait
tól tőlszelén.webmeghajtó.támogatás importvárható_feltételek
lehetőségek=webmeghajtó.ChromeOptions()
lehetőségek.fejetlen = Igaz
böngésző=webmeghajtó.Króm(futtatható_útvonal='./drivers/chromedriver',lehetőségek=lehetőségek)
böngésző.kap('https://www.unixtimestamp.com/')
próbáld ki:
időbélyeg=WebDriverWait(böngésző, 10).amíg(
várható_feltételek.elem_azonosítója((Által.XPATH, '
// h3 [@] [1] '
))
)
nyomtatás('Jelenlegi időbélyeg: %s'%(időbélyeg.szöveg.hasított('')[0]))
végül:
böngésző.Bezárás()

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

Az 1-5. Sor importálja a szükséges összetevőket a szelénkönyvtárból.

A 7. sor létrehoz egy Chrome -beállítások objektumot.

A 8. sor lehetővé teszi a fej nélküli módot a Chrome webes illesztőprogram számára.

A 10. sor létrehoz egy Chrome böngészőobjektumot a chromedriver bináris a sofőrök/ Könyvtár.

A 12. sor betölti a www.unixtimestamp.com címet a böngészőben.

Az explicit várakozás a try-végül blokkban valósul meg (a 14-20. Sorból)

A 15-17-es sor a létrehozásokat használja WebDriverWait () tárgy. Az első érv WebDriverWait () a böngésző objektum, a második érv pedig a feltétel teljesítésének maximális megengedett ideje (legrosszabb eset), ami ebben az esetben 10 másodperc.

Ban,-ben amíg() Blokk, ood_conditions.presence_of_element_located () metódus segítségével győződjön meg arról, hogy az elem jelen van, mielőtt megpróbálja kiválasztani az elemet. Itt, Szerző: XPATH elmondására használják eleme_lehetősége () módszerrel XPath választót használtunk az elem kiválasztásához. Az XPath választó az // h3 [@class = ’text-veszély’] [1] .

Miután megtalálta az elemet, tárolja a időbélyeg változó.

A 18. sor csak a kijelölt elem időbélyegét nyomtatja ki.

Végül a 19-20 sor bezárja a böngészőt.

Ha elkészült, futtassa a ex02.py A Python szkriptje a következő:

$ python3 ex02.py

Amint láthatja, az unixtimestamp.com webhelyről származó aktuális időbélyegző nyomtatásra kerül a konzolon.

Elemek kiválasztása explicit várakozásokban:

Az előző részben használtam Szerző: XPATH az elem kiválasztásához az XPath választó segítségével. Az elemeket az azonosító, a címke neve, a CSS osztály neve, a CSS választó stb. Segítségével is kiválaszthatja.

A támogatott kiválasztási módszerek az alábbiakban találhatók:

Szerző: XPATH - Kiválasztja az elemet/elemeket az XPath választó segítségével.

Szerző: CLASS_NAME - Kiválasztja az elemet/elemeket a CSS osztálynév használatával.

Szerző: CSS_SELECTOR - Kiválasztja az elemet/elemeket a CSS választó segítségével.

By.ID - Az elemet azonosító alapján választja ki

Név szerint - Kiválasztja az elemet/elemeket név szerint.

Szerző: TAG_NAME - Kiválasztja az elemet/elemeket a HTML címke neve alapján.

Szerző :LINK_TEXT - Kiválasztja az elemet/elemeket a link szövege alapján nak nek (horgony) HTML -címke.

Szerző: PARTIAL_LINK_TEXT - Kiválasztja az elemet/elemeket a részleges link szövege alapján nak nek (horgony) HTML -címke.

Ezekről további információkért látogasson el a Python Selenium API dokumentációs oldal .

Várható feltételek kifejezett várakozásokban:

A korábbi explicit várakozási példában a eleme_lehetősége () a metódusa várható_feltételek explicit várakozási feltételként annak kiválasztása előtt, hogy a keresett elem létezik -e.

Vannak más is várható_feltételek explicit várakozási feltételként használhatja. Néhány közülük:

title_is (cím) - ellenőrzi, hogy az oldal címe megfelelő -e cím .

title_contains (részleges_cím) - ellenőrzi, hogy az oldal címe tartalmazza -e a cím egy részét részleges_cím .

visibility_of (elem) - ellenőrzi, hogy a elem látható azon az oldalon, amelyen az elem szélessége és magassága nagyobb, mint 0.

visibility_of_element_located (lokátor) -

elem_helye jelenléte (lokátor) - Győződjön meg arról, hogy az elem (a lokátor ) van jelen az oldalon. Az lokátor egy sor (Írta: választó), amint azt a kifejezett várakozási példában is mutattam.

jelenlét_a_ összes_element_helye () - Biztosítja, hogy az összes elem illeszkedjen a lokátor jelen van az oldalon. Az lokátor egy (Írta: választó) tuple.

text_to_be_present_in_element (lokátor, szöveg) - Ellenőrzi, hogy a szöveg van jelen az elemben található elemben lokátor . Az lokátor egy (Írta: választó) tuple.

element_to_be_clickable (lokátor) - Ellenőrzi, hogy az elem a lokátor látható és kattintható. Az lokátor egy (Írta: választó) tuple.

element_to_be_selected (lokátor) - Ellenőrzi, hogy az elem a lokátor van kiválasztva. Az lokátor egy (Írta: választó) tuple.

alert_is_present () - várjon egy riasztási párbeszédablakot az oldalon.

Sokkal többen vannak várható_feltételek használhatók. Ezekről további információkért látogasson el a Python Selenium API dokumentációs oldal .

Következtetés:

Ebben a cikkben a szelén implicit és explicit várakozásairól beszéltem. Megmutattam azt is, hogyan kell implicit és explicit várakozással dolgozni. Mindig próbáljon explicit várakozást használni a szelén projektjeiben, mivel a szelén megpróbálja a lehető legrövidebb időn belül csökkenteni a várakozási időt. Így nem kell egy bizonyos másodpercet várnia minden egyes alkalommal, amikor Selenium projektjeit futtatja. A kifejezett várakozás sok másodpercet takaríthat meg.

A szelénvárakozással kapcsolatos további információkért látogasson el a weboldalra a hivatalos Selenium Python Library várja a Dokumentáció oldalt .