Kuidas oodata lehe laadimist seleeniga

How Wait Page Load With Selenium

Veebiautomaatika või veebi kraapimine koos seleeni veebidraiveriga võib teil tekkida probleeme, näiteks see, mida soovite valida, pole saadaval või nupp, mida soovite vajutada, pole klõpsamiseks valmis ja nii edasi.

Selle põhjuseks on asjaolu, et Selenium veebidraiver peab enne selle jaoks midagi tegema hakkamist veebilehe alla laadima ja lehe renderdamise lõpetama. Varem genereeris veebiserver veebisaidi sisu ning brauser lihtsalt laadis selle alla ja renderdas selle. Tänapäeval on meil palju ühelehelisi veebirakendusi, mis töötavad veidi teisiti. Ühe lehe veebirakendustes (SPA) teenindab veebiserver ainult kasutajaliidese koode. Kui kasutajaliidese kood on brauseris renderdatud, kasutab kasutajaliidese kood AJAX -i, et taotleda veebiserverilt API -andmeid. Kui kasutajaliides saab API andmed, renderdab need need brauserisse. Seega, kuigi brauser on veebilehe allalaadimise ja renderdamise lõpetanud, pole see siiski valmis. Peate ootama, kuni see saab API andmed ja need ka renderdatakse. Niisiis, selle probleemi lahendus on oodata, kuni andmed on kättesaadavad, enne kui me seleeniga midagi ette võtame.



Seleenis on kahte tüüpi ootusi:
1) Kaudne ootamine
2) Selge ootamine



1) Kaudne ootamine: Seda on kõige lihtsam rakendada. Kaudne ootamine käsib Selenium veebidraiveril oodata mitu sekundit, kuni DOM (dokumendi objekti mudel) on valmis (veebileht valmis).



2) Selge ootamine: See on natuke keerulisem kui kaudne ootamine. Selgesõnalise ootamise korral ütlete Selenium veebidraiverile, mida oodata. Selenium ootab selle eritingimuse täitmist. Kui see on täidetud, on Selenium veebidraiver valmis võtma vastu muid käske. Tavaliselt on selgesõnaline ooteaeg muutuv. See sõltub sellest, kui kiiresti tingimused on täidetud. Halvimal juhul ootab selgesõnaline ootamine sama kaua kui kaudne ootamine.

Selles artiklis näitan teile, kuidas oodata (kaudselt ja otseselt), kuni leht seleeniga laaditakse. Niisiis, alustame.

Eeltingimused:

Selle artikli käskude ja näidete proovimiseks peab teil olema,



1) Teie arvutisse installitud Linuxi distributsioon (eelistatavalt Ubuntu).
2) arvutisse installitud Python 3.
3) PIP 3 on teie arvutisse installitud.
4) Python virtualenv teie arvutisse installitud pakett.
5) arvutisse installitud Mozilla Firefoxi või Google Chrome'i veebibrauserid.
6) Peab teadma, kuidas Firefox Gecko draiverit või Chrome'i veebidraiverit installida.

Nõuete 4, 5 ja 6 täitmiseks lugege minu artiklit Sissejuhatus seleeni koos Pythoniga 3 saidil Linuxhint.com.

Teiste teemade kohta leiate palju artikleid LinuxHint.com . Kontrollige neid kindlasti, kui vajate abi.

Projekti kataloogi seadistamine:

Et kõik oleks korras, looge uus projektikataloog seleen-oota/ järgnevalt:

$mkdir -lkseleen-oodake/autojuhid

Liikuge lehele seleen-oota/ projekti kataloog järgmiselt:

$CDseleen-oodake/

Looge Pythoni virtuaalne keskkond projekti kataloogis järgmiselt.

$virtualenv .venv

Aktiveerige virtuaalne keskkond järgmiselt.

$allikas.venv/olen/aktiveerida

Paigaldage seleen PIP3 abil järgmiselt.

$ pip3 install seleen

Laadige alla ja installige kõik vajalikud veebidraiverid autojuhid/ projekti kataloog. Olen oma artiklis selgitanud veebidraiverite allalaadimise ja installimise protsessi Sissejuhatus seleeni koos Pythoniga 3 . Kui vajate abi, otsige LinuxHint.com selle artikli jaoks.

Kasutan selles artiklis tutvustamiseks Google Chrome'i veebibrauserit. Niisiis, ma kasutan kroomitud draiver binaarne alates autojuhid/ kataloogi.

Kaudse ootamisega katsetamiseks looge uus Pythoni skript ex01.py oma projekti kataloogis ja tippige sellesse faili järgmised koodiridad.

alatesseleenimportveebidraiver
alatesseleen.veebidraiver.levinud.võtmed importVõtmed
võimalusi=veebidraiver.ChromeOptions()
võimalusi.peata = Tõsi
brauser=veebidraiver.Chrome(käivitatav_tee='./drivers/chromedriver',võimalusi=võimalusi)
brauser.kaudselt_oota(10)
brauser.saada('https://www.unixtimestamp.com/')
ajatempel=brauser.find_element_by_xpath('// h3 [@] [1]')
printida('Praegune ajatempel: %s'%(ajatempel.teksti.lõhenema('')[0]))
brauser.Sulge()

Kui olete lõpetanud, salvestage ex01.py Pythoni skript.

1. ja 2. rida impordivad kõik vajalikud seleeni komponendid.

4. rida loob Chrome'i suvandite objekti.

Rida 5 lubab Chrome'i veebidraiverile peata režiimi.

Rida 7 loob Chrome'i brauseri objekti, kasutades kroomitud draiver binaarne alates autojuhid/ kataloogi.

Rida 8 kasutatakse seleenile käsuks ootama kaudselt 10 sekundit implicitly_wait () brauseri meetod.

Rida 10 laadib brauserisse www.unixtimestamp.com.

Rida 12 leiab ajatemplielemendi XPath -valija abil // h3 [@class = ’text-oht’] [1] ja salvestab selle kausta ajatempel muutuja.

Sain XPathi valija Chrome'i arendustööriistast. Nagu näete, on ajatempel esimeses h3 klassi nimega element tekst-oht . Neid on 2 h3 elemente koos klassiga tekst-oht .

Rida 13 prindib ainult ajatemplit elemendist, mille olen XPath valija abil valinud ja kausta salvestanud ajatempel muutuja.

14. rida sulgeb brauseri.

Kui olete lõpetanud, käivitage Pythoni skript ex01.py järgnevalt:

$ python3 ex01.py

Nagu näete, ekstraheeritakse praegune ajatempel saidilt unixtimestamp.com ja trükitakse konsoolile.

Selge ootamisega töötamine:

Selge ootamisega katsetamiseks looge uus Pythoni skript ex02.py oma projekti kataloogis ja tippige sellesse faili järgmised koodiridad.

alatesseleenimportveebidraiver
alatesseleen.veebidraiver.levinud.võtmed importVõtmed
alatesseleen.veebidraiver.levinud.kõrval importKõrval
alatesseleen.veebidraiver.toetus.sibul importWebDriverWait
alatesseleen.veebidraiver.toetus importeeldatavad_tingimused
võimalusi=veebidraiver.ChromeOptions()
võimalusi.peata = Tõsi
brauser=veebidraiver.Chrome(käivitatav_tee='./drivers/chromedriver',võimalusi=võimalusi)
brauser.saada('https://www.unixtimestamp.com/')
proovige:
ajatempel=WebDriverWait(brauser, 10).kuni(
eeldatavad_tingimused.kohaloleku_elemendi_asukoht((Kõrval.XPATH, '
// h3 [@] [1] '
))
)
printida('Praegune ajatempel: %s'%(ajatempel.teksti.lõhenema('')[0]))
lõpuks:
brauser.Sulge()

Kui olete lõpetanud, salvestage ex02.py Pythoni skript.

Rida 1-5 impordib seleeni teegist kõik vajalikud komponendid.

Rida 7 loob Chrome'i suvandite objekti.

Rida 8 lubab Chrome'i veebidraiverile peata režiimi.

Rida 10 loob Chrome'i brauseri objekti, kasutades kroomitud draiver binaarne alates autojuhid/ kataloogi.

Rida 12 laadib brauserisse www.unixtimestamp.com.

Selge ootamine on rakendatud proovimisviisi plokis (realt 14–20)

Rida 15-17 kasutab loomist WebDriverWait () objekti. Esimene argument WebDriverWait () on brauseri objekt ja teine ​​argument on maksimaalne lubatud aeg (halvim stsenaarium) tingimuse täitmiseks, mis on antud juhul 10 sekundit.

Aastal kuni () blokeerida, oodatud_tingimused.olemuse_elemendi_kohalolek () meetodit kasutatakse elemendi olemasolu kontrollimiseks enne selle valimist. Siin, Autor: XPATH kasutatakse ütlemiseks elemendi_kohaloleku asukoht () me kasutasime elemendi valimiseks XPathi valijat. XPathi valija on // h3 [@class = ’text-oht’] [1] .

Kui element on leitud, salvestatakse see kausta ajatempel muutuja.

Rida 18 prindib valitud elemendist ainult ajatempli.

Lõpuks sulgeb rida 19-20 brauseri.

Kui olete lõpetanud, käivitage ex02.py Pythoni skript järgmiselt:

$ python3 ex02.py

Nagu näete, trükitakse konsoolile praegune ajatempel saidilt unixtimestamp.com.

Elementide valimine selges ootuses:

Varasemas osas olen kasutanud Autor: XPATH elemendi valimiseks XPath -valija abil. Samuti saate elemente valida ID, märgendi nime, CSS -klassi nime, CSS -valija jne abil.

Toetatud valikumeetodid on toodud allpool:

Autor: XPATH - Valib elemendi/elemendid XPath -valija abil.

Autor: CLASS_NAME - Valib elemendi/elemendid, kasutades CSS klassi nime.

Autor: CSS_SELECTOR - Valib elemendi/elemendid CSS -valija abil.

Autor: ID - Valib elemendi ID järgi

Nimepidi - Valib elemendi/elemendid nime järgi.

Autor: TAG_NAME - Valib elemendi/elemendid HTML -sildi nime järgi.

Autor :LINK_TEXT - Valib elemendi/elemendid lingi teksti järgi et (ankur) HTML -silt.

Autor: PARTIAL_LINK_TEXT - Valib elemendi/elemendid osalise lingiteksti järgi et (ankur) HTML -silt.

Nende kohta lisateabe saamiseks külastage Pythoni Selenium API dokumentatsiooni leht .

Oodatavad tingimused selges ootuses:

Varasemas selgesõnalises ootamise näites olen kasutanud elemendi_kohaloleku asukoht () meetod eeldatavad_tingimused enne selget ootamistingimust veendumaks, et otsitud element eksisteerib enne selle valimist.

On ka teisi eeldatavad_tingimused saate kasutada selgesõnalise oote tingimusena. Mõned neist on:

title_is (pealkiri) - kontrollib, kas lehe pealkiri on tiitel .

title_contains (osaline_pealkiri) - kontrollib, kas lehe pealkiri sisaldab osa pealkirjast osaline_pealkiri .

visibility_of (element) - kontrollib, kas element on lehel, mis on elemendi laius ja kõrgus suurem kui 0.

visibility_of_element_location (lokaator) -

elemendi_kohaloleku asukoht (lokaator) - Veenduge, et element asub ( lokaator ) on lehel olemas. The lokaator on hulgaliselt (Autor, valija), nagu olen näidanud selges ootamise näites.

kõigi_elementide_kohalolek () - Veendub, et kõik elemendid vastavad lokaator on lehel olemas. The lokaator on (Autor, valija) tuple.

text_to_be_present_in_element (lokaator, tekst) - Kontrollib, kas teksti on elemendis, mis asub lokaator . The lokaator on (Autor, valija) tuple.

element_to_be_clickable (lokaator) - Kontrollib, kas element asub lokaator on nähtav ja klõpsatav. The lokaator on (Autor, valija) tuple.

element_to_be_selected (lokaator) - Kontrollib, kas element asub lokaator on valitud. The lokaator on (Autor, valija) tuple.

alert_is_present () - oodake, et lehel oleks hoiatusdialoog.

Neid on veel palju eeldatavad_tingimused teile kasutamiseks saadaval. Nende kohta lisateabe saamiseks külastage Pythoni Selenium API dokumentatsiooni leht .

Järeldus:

Selles artiklis olen arutanud seleeni kaudseid ja selgesõnalisi ootusi. Samuti olen näidanud teile, kuidas töötada kaudse ja selgesõnalise ootamisega. Peaksite oma seleeniprojektides alati kasutama selget ootamist, sest Selenium püüab ooteaega võimalikult vähendada. Sel moel ei pea te Seleniumi projektide käivitamisel ootama teatud arvu sekundeid. Selge ootamine peaks säästma palju sekundeid.

Seleeni ootuste kohta lisateabe saamiseks külastage ametlik Selenium Pythoni raamatukogu ootab dokumentatsiooni lehte .