Szelén

Hogyan lehet megvárni, amíg egy oldal betöltődik a szelénnel

Hogyan lehet megvárni, amíg egy oldal betöltődik a szelénnel
Míg a web-automatizálás vagy a web-súrolás a Selenium web-illesztőprogrammal szembesül, olyan problémákkal szembesülhet, hogy a kiválasztani kívánt elem nem érhető el, vagy a megnyomni kívánt gomb nem áll készen kattintásra stb.

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ól
szelé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ól
szelé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.

A legjobb Gamepad Mapping alkalmazások Linuxhoz
Ha egy tipikus billentyűzet és egér beviteli rendszer helyett szeretnél játékokat játszani Linuxon egy játékvezérlővel, van néhány hasznos alkalmazás ...
Hasznos eszközök Linux játékosok számára
Ha szeretsz Linuxon játszani, akkor valószínű, hogy olyan alkalmazásokat és segédprogramokat használtál, mint a Wine, a Lutris és az OBS Studio a játé...
HD Remastered Games for Linux, amelyeknek soha nem volt korábban Linux kiadásuk
Számos játékfejlesztő és kiadó a régi játékok HD remasterjével áll elő a franchise élettartamának meghosszabbítása érdekében. Kérjük, hogy a rajongók ...