Ennek oka az, hogy a Selenium webillesztőprogramnak le kell töltenie a weboldalt és be kell fejeznie az oldal renderelését, mielőtt bármit megtehetne rajta. A múltban a webszerver generálta a weboldal 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 webalkalmazásokban (SPA) a webszerver csak a kezelőfelület kódjait szolgálja ki. Amint a kezelőfelület kódja megjelenik a böngészőben, a kezelői kód az AJAX segítségével API-adatokat kér a webszerverhez. Amint a kezelőfelület megkapja az API-adatokat, azokat megjeleníti a böngészőben. Tehát annak ellenére, hogy a böngésző befejezte a weboldal letöltését és megjelenítését, a weboldal még mindig nincs kész. Meg kell várni, amíg megkapja az API-adatokat, és azokat is rendereli. Tehát a probléma megoldása az, hogy 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: Ez a legkönnyebben megvalósítható. Az implicit várakozás azt mondja a Selenium webillesztő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 összetett, mint az implicit várakozás. Kifejezett várakozásban megmondja a Selenium webillesztőprogramnak, mire kell várnia. A szelén megvárja az adott feltétel teljesülését. Amint teljesül, a Selenium web-illesztőprogram készen áll más parancsok fogadására. Általában a kifejezett 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 mindaddig vár, amíg az implicit várakozás.
Ebben a cikkben bemutatom, hogyan várhat (implicit és explicit) egy oldal betöltésére a szelénnel. Tehát kezdjük.
Elő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) A Python 3 telepítve van a számítógépére.
3) A PIP 3 telepítve van a számítógépére.
4) Python virtualenv számítógépre telepített csomagot.
5) A számítógépre telepített Mozilla Firefox vagy Google Chrome böngészők.
6) Tudnia kell, hogyan kell telepíteni a Firefox Gecko illesztőprogramot vagy a Chrome internetes 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 alkalmazással a Linuxhintnél.com.
Számos cikket talál a LinuxHint egyéb témáiról.com. Ügyeljen arra, hogy ellenőrizze ő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 -pv selenium-wait / meghajtók
Navigáljon a szelén-várakozás / projekt könyvtár az alábbiak szerint:
$ cd selenium-wait /
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 / bin / aktiválás
Telepítse a Seleniumot a PIP3 segítségével 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 járművezetők / a projekt könyvtárát. Cikkemben ismertettem a webes illesztőprogramok letöltésének és telepítésének folyamatát Bevezetés a szelénbe a Python 3 alkalmazással. Ha segítségre van szüksége, keressen rá LinuxHint.com ahhoz a cikkhez.
A cikk bemutatásához a Google Chrome böngészőt fogom használni. Tehát a következőt fogom használni chromedriver bináris a járművezetők / Könyvtár.
Az implicit várakozás használata:
Az implicit várakozással való kísérletezéshez hozzon létre egy új Python parancsfájlt ex01.py a projektkönyvtárban, és írja be a fájl következő kódsorait.
a szelénimport-meghajtórólszelénből.web meghajtó.gyakori.kulcsok importálása kulcsok
opciók = webdriver.ChromeOptions ()
opciók.fejetlen = Igaz
böngésző = webdriver.Chrome (végrehajtható_útvonal = "./ driver / chromedriver ", opciók = opciók)
böngésző.implicit_wait (10)
böngésző.get ("https: // www.unixtimestamp.com / ")
időbélyeg = böngésző.find_element_by_xpath ("// h3 [@ class = 'text-veszély'] [1]")
nyomtatás ('Aktuális időbélyeg:% s'% (időbélyeg.szöveg.felosztás (") [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 komponenst.
A 4. sor létrehoz egy Chrome Options objektumot.
Az 5. vonal fej nélküli módot engedélyez a Chrome webillesztő számára.
A 7. sor létrehoz egy Chrome böngészőobjektumot a chromedriver bináris a járművezetők / Könyvtár.
A 8. sor arra szólítja fel a Szelént, hogy implicit módon várjon 10 másodpercet a implicit_wait () böngésző módszer.
A 10. sor betölti a www-t.unixtimestamp.com a böngészőben.
A 12. sor megtalálja az időbélyegző elemet az XPath választóval // h3 [@ class = 'szövegveszély'] [1] és tárolja a időbélyeg változó.
Az XPath választót a Chrome Developer Tool-ból kaptam. Amint láthatja, az időbélyeg az első 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 kiválasztottam az XPath választóval és az időbélyeg változó.
A 14. sor bezárja a böngészőt.
Ha végzett, futtassa a Python szkriptet ex01.py alábbiak szerint:
$ python3 ex01.py
Amint láthatja, az aktuális időbélyeget kivonja az unixtimestamp bélyegből.com és a konzolra nyomtatva.
Kifejezett várakozás használata:
Az explicit 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.
a szelénimport-meghajtórólszelénből.web meghajtó.gyakori.kulcsok importálása kulcsok
szelénből.web meghajtó.gyakori.behozatal által
szelénből.web meghajtó.támogatás.ui WebDriverWait importálása
szelénből.web meghajtó.az import várható_feltételek támogatása
opciók = webdriver.ChromeOptions ()
opciók.fejetlen = Igaz
böngésző = webdriver.Chrome (végrehajtható_útvonal = "./ driver / chromedriver ", opciók = opciók)
böngésző.get ("https: // www.unixtimestamp.com / ")
próbáld ki:
időbélyeg = WebDriverWait (böngésző, 10).amíg(
várható_feltételek.jelenléte_eleme_helye ((.XPATH "
// h3 [@ class = 'text-veszély'] [1] "))
)
nyomtatás ('Aktuális időbélyeg:% s'% (időbélyeg.szöveg.felosztás (") [0]))
végül:
böngésző.Bezárás()
Ha elkészült, mentse a ex02.py Python szkript.
Az 1-5. Sor az összes szükséges komponenst importálja a Szelén könyvtárból.
A 7. sor létrehoz egy Chrome Options objektumot.
A 8. sor fej nélküli módot engedélyez a Chrome webillesztő számára.
A 10. sor létrehoz egy Chrome böngészőobjektumot a chromedriver bináris a járművezetők / Könyvtár.
A 12. sor betölti a www-t.unixtimestamp.com a böngészőben.
Az explicit várakozás a try-last blokkban valósul meg (a 14-20. Sortól)
A 15–17. Sor felhasználása létrehoz WebDriverWait () tárgy. A. Első érve WebDriverWait () a böngészőobjektum, a második argumentum pedig a feltétel teljesítésének maximálisan engedélyezett ideje (legrosszabb eset), amely ebben az esetben 10 másodperc.
Ban,-ben amíg() Blokk, várható_feltételek.jelenléte_elem_helye () metódus segítségével ellenőrizzük, hogy az elem jelen van-e, mielőtt megkísérelnénk kiválasztani az elemet. Itt, Által.XPATH arra használják, hogy elmondja a jelenléte_elem_helye () módszer, hogy az elem kiválasztásához XPath választót használtunk. Az XPath választó az // h3 [@ class = 'szövegveszély'] [1].
Miután az elem megtalálható, a időbélyeg változó.
A 18. sor csak az időbélyeget nyomtatja ki a kiválasztott elemből.
Végül a 19-20 sor bezárja a böngészőt.
Ha elkészült, futtassa a ex02.py Python szkript az alábbiak szerint:
$ python3 ex02.py
Amint láthatja, az aktuális időbélyeg az unixtimestamp-ból.com a konzolra van nyomtatva.
Elemek kiválasztása explicit várakozásokban:
A korábbi részben használtam Által.XPATH az elem kiválasztásához az XPath választóval. Az elemeket kiválaszthatja az azonosító, a címke neve, a CSS osztály neve, a CSS választója stb. Használatával is.
A támogatott kiválasztási módszereket az alábbiakban adjuk meg:
Által.XPATH - Az elemet / elemeket kiválasztja az XPath választóval.
Által.OSZTÁLY NÉV - Az elemet / elemeket CSS osztálynévvel választja ki.
Által.CSS_SELECTOR - Elem / elemek kiválasztása a CSS választóval.
Által.ID - Az elemet azonosító szerint választja ki
Által.NÉV - Az elemet / elemeket név szerint választja ki.
Által.TAG_NAME - Az elemet / elemeket HTML címke neve alapján választja ki.
Által.LINK_TEXT - Az elemet / elemeket a (z) link szövege alapján választja ki a (horgony) HTML tag.
Által.PARTIAL_LINK_TEXT - Az elemet / elemeket a (z) részleges hivatkozási szövege alapján választja ki a (horgony) HTML tag.
Ezekről további információt a Python Selenium API dokumentációs oldalán talál.
Az explicit várakozások várható körülményei:
A korábbi kifejezett várakozási példában a jelenléte_elem_helye () a metódusa várható_feltételek mint kifejezett várakozási feltétel annak biztosítására, hogy a keresett elem létezzen, mielőtt kiválasztanám.
Vannak más várható_feltételek kifejezett 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-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.
láthatóság_of (elem) - ellenőrzi, hogy a elem látható azon az oldalon, amelynek az elem szélessége és magassága nagyobb, mint 0.
láthatóság_of_element_located (lokátor) -
jelenléte_elem_helye (lokátor) - Győződjön meg arról, hogy az elem (a lokátor) jelen van az oldalon. A lokátor egy duplája (By, választó), amint azt a kifejezett várakozási példában bemutattam.
all_el_element_located jelenléte () - Gondoskodik arról, hogy minden elem megfeleljen a lokátor jelen van az oldalon. A lokátor egy (By, választó) kettős.
text_to_be_present_in_element (lokátor, szöveg) - Ellenőrzi, hogy a szöveg az elem mellett található lokátor. A lokátor egy (By, választó) kettős.
element_to_be_clickable (lokátor) - Ellenőrzi, hogy a lokátor látható és kattintható. A lokátor egy (By, választó) kettős.
element_to_be_selected (lokátor) - Ellenőrzi, hogy a lokátor van kiválasztva. A lokátor egy (By, választó) kettős.
alert_is_present () - számíthat arra, hogy egy riasztási párbeszédpanel jelen lesz az oldalon.
Sokkal többen vannak várható_feltételek az Ön számára használható. Ezekről további információt a Python Selenium API dokumentációs oldalán talál.
Következtetés:
Ebben a cikkben a szelén implicit és explicit várakozásait tárgyaltam. Megmutattam azt is, hogyan kell implicit és explicit várakozással dolgozni. Mindig próbáljon kifejezetten várakozni a szelén projektjeiben, mivel a szelén megpróbálja a lehető legnagyobb mértékben csökkenteni a várakozási időt. Így nem kell várnia egy adott másodpercet minden alkalommal, amikor a Szelén-projekteket futtatja. A kifejezett várakozásnak sok másodpercet kell megtakarítania.
A szelén várakozásokkal kapcsolatos további információkért látogasson el a Selenium Python Könyvtár hivatalos dokumentációs oldalára.