Selenium

Kuidas oodata lehe laadimist seleeniga

Kuidas oodata lehe laadimist seleeniga
Kuigi veebiautomaatika või veebi kraapimine Selenium veebidraiveriga võib teil tekkida probleeme, nagu element, mida soovite valida, pole saadaval või nuppu, millele soovite vajutada, pole veel valmis klõpsama ja nii edasi.

Põhjus, miks see juhtub, on see, et Seleniumi veebidraiver peab enne sellel midagi tegema asumist veebilehe alla laadima ja lehe renderdamise lõpetama. Varem genereeris veebiserver veebisaidi sisu ning brauser selle lihtsalt alla laadis ja renderdas. Tänapäeval on meil palju ühe lehega veebirakendusi, mis töötavad natuke teistmoodi. Ühe lehe veebirakendustes (SPA) teenindab veebiserver ainult kasutajaliidese koode. Kui eesseadme kood on brauseris renderdatud, kasutab esipaneeli kood AJAX-i veebiserverile API-andmete taotlemiseks. Kui eesseade saab API andmed, renderdatakse need brauseris. Seega, kuigi brauser on veebilehe allalaadimise ja renderdamise lõpetanud, pole see siiski valmis. Peate ootama, kuni see API-andmed kätte saab ja need ka renderdab. Niisiis, selle probleemi lahendus on oodata, kuni andmed on saadaval, enne kui me midagi seleeniga teeme.

Seleenis on kahte tüüpi ooteaegu:
1) kaudne ootamine
2) Selgesõnaline ootamine

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

2) Selgesõnaline ootamine: See on natuke keeruline kui kaudne ootamine. Selgesõnalises ootuses ütlete Seleniumi veebidraiverile, mida oodata. Seleen ootab selle konkreetse tingimuse täitmist. Kui see on täidetud, on Seleniumi veebidraiver valmis võtma vastu muid käske. Tavaliselt on otsene 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 (kaudset ja selgesõnalist) lehe seleeniga laadimist. Alustame siis.

Eeldused:

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

1) teie arvutisse installitud Linuxi levitamine (eelistatult Ubuntu).
2) teie arvutisse installitud Python 3.
3) PIP 3 arvutisse installitud.
4) Python virtualenv arvutisse installitud pakett.
5) teie arvutisse installitud Mozilla Firefoxi või Google Chrome'i veebibrauserid.
6) Peab teadma, kuidas installida Firefox Gecko draiver või Chrome'i veebidraiver.

Nõuete 4, 5 ja 6 täitmiseks lugege minu artiklit Sissejuhatus seleeni koos Python 3-ga kell Linuxhint.com.

LinuxHintist leiate palju artikleid muudel teemadel.com. Kontrollige neid kindlasti, kui vajate abi.

Projektikataloogi seadistamine:

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

$ mkdir -pv selenium-wait / draiverid

Navigeerige lehele seleen-oot / projekti kataloog järgmiselt:

$ cd seleen-oot /

Looge projekti kataloogis Pythoni virtuaalne keskkond järgmiselt:

$ virtualenv .venv

Aktiveerige virtuaalne keskkond järgmiselt:

allikas $ .venv / bin / aktiveeri

Installige seleen PIP3 abil järgmiselt:

$ pip3 installige seleen

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

Selle artikli tutvustamiseks kasutan Google Chrome'i veebibrauserit. Niisiis, ma kasutan kromedriver binaarne autojuhid / kataloogi.

Kaudse ootega töötamine:

Kaudse ootega katsetamiseks looge uus Pythoni skript ex01.py oma projekti kataloogi ja tippige selle faili järgmised koodiread.

seleeni impordi veebidraiverilt
seleenist.veebidraiver.tavaline.võtmed impordivad võtmeid
valikud = veebidraiver.ChromeOptions ()
valikud.peata = tõsi
brauser = veebidraiver.Chrome (käivitatava_tee = "./ draiverid / chromedriver ", valikud = valikud)
brauser.implicitly_wait (10)
brauser.get ("https: // www.unixtimestamp.com / ")
ajatempel = brauser.find_element_by_xpath ("// h3 [@ class = 'text-veszély'] [1]")
print ('Praegune ajatempel:% s'% (ajatempel.teksti.jaotus (") [0]))
brauser.Sulge()

Kui olete valmis, salvestage ex01.py Pythoni skript.

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

4. rida loob objekti Chrome Options.

5. rida lubab Chrome'i veebidraiveril peata režiimi.

Rida 7 loob Chrome'i brauseri objekti, kasutades kromedriver binaarne autojuhid / kataloogi.

Rida 8 kasutatakse seleeni käskimiseks ootama kaudselt 10 sekundit, kasutades implicit_wait () brauseri meetod.

10. rida laadib www.unixtimestamp.com brauseris.

Rida 12 leiab ajatempli elemendi XPathi abil // h3 [@ class = 'tekst-oht'] [1] ja salvestab selle ajatempel muutuv.

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

Rida 13 prindib ainult ajatempli elemendist, mille olen valinud XPathi abil ja salvestanud kausta ajatempel muutuv.

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 unixtimestampist.com ja konsoolile trükitud.

Selgesõnalise ootega töötamine:

Selgesõnalise ootamise katsetamiseks looge uus Pythoni skript ex02.py oma projekti kataloogi ja tippige selle faili järgmised koodiread.

seleeni impordi veebidraiverilt
seleenist.veebidraiver.tavaline.võtmed impordivad võtmeid
seleenist.veebidraiver.tavaline.impordi teel
seleenist.veebidraiver.toetus.ui importige WebDriverWait
seleenist.veebidraiver.toeta importimist eeldatavad tingimused
valikud = veebidraiver.ChromeOptions ()
valikud.peata = tõsi
brauser = veebidraiver.Chrome (käivitatava_tee = "./ draiverid / chromedriver ", valikud = valikud)
brauser.get ("https: // www.unixtimestamp.com / ")
proovige:
ajatempel = WebDriverWait (brauser, 10).kuni (
oodatavad_tingimused.kohalolek_elemendi_koht ((Autor.XPATH "
// h3 [@ class = 'tekst-oht'] [1] "))
)
print ('Praegune ajatempel:% s'% (ajatempel.teksti.jaotus (") [0]))
lõpuks:
brauser.Sulge()

Kui olete valmis, salvestage ex02.py Pythoni skript.

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

7. rida loob objekti Chrome Options.

Rida 8 võimaldab Chrome'i veebidraiveril peata režiimi.

Rida 10 loob Chrome'i brauseri objekti, kasutades kromedriver binaarne autojuhid / kataloogi.

12. rida laadib www.unixtimestamp.com brauseris.

Selgesõnaline ootamine rakendatakse proovimisplokis (reast 14–20)

Rida 15-17 kasutab loob WebDriverWait () objekt. Aasta esimene argument WebDriverWait () on brauseri objekt ja teine ​​argument on tingimuse täitmise maksimaalne lubatud aeg (halvimal juhul), mis on antud juhul 10 sekundit.

Aastal kuni () blokeerida, oodatavad_tingimused.kohalolek_elemendi_koht () meetodit kasutatakse elemendi olemasolu kontrollimiseks enne elemendi valimise katset. Siin, Kõrval.XPATH kasutatakse selleks, et öelda kohalolek_elemendi_koht () meetodit, mille abil oleme elemendi valimiseks kasutanud XPathi valijat. XPathi valija on // h3 [@ class = 'tekst-oht'] [1].

Kui element on leitud, salvestatakse see kausta ajatempel muutuv.

Rida 18 prindib valitud elemendist ainult ajatempli.

Lõpuks sulgeb rida 19-20 brauseri.

Kui olete valmis, käivitage ex02.py Pythoni skript järgmiselt:

$ python3 ex02.py

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

Elementide valimine selgesõnalises ootuses:

Varasemas osas olen kasutanud Kõrval.XPATH elemendi valimiseks XPathi valija abil. Elemente saate valida ka ID, sildi nime, CSS klassi nime, CSS valija jne abil.

Toetatud valikumeetodid on toodud allpool:

Kõrval.XPATH - Valib elemendi / elemendid XPathi valija abil.

Kõrval.CLASS_NAME - Valib elemendi / elemendid CSS-i klassi nime abil.

Kõrval.CSS_SELECTOR - Valib elemendi / elemendid CSS-valija abil.

Kõrval.ID - Valib elemendi ID järgi

Kõrval.NAME - Valib elemendi / elemendid nime järgi.

Kõrval.TAG_NAME - Valib elemendi / elemendid HTML-märgendi nime järgi.

Kõrval.LINK_TEXT - Valib elemendi / elemendid lingi teksti järgi a (ankur) HTML-silt.

Kõrval.PARTIAL_LINK_TEXT - Valib elemendi / elemendid osalise lingi teksti järgi a (ankur) HTML-silt.

Nende kohta lisateabe saamiseks külastage Pythoni seleeni API dokumentatsiooni lehte.

Oodatavad tingimused selgesõnalistes ootustes:

Varasemas selgesõnalises ootamise näites olen kasutanud kohalolek_elemendi_koht () meetod oodatavad_tingimused kui selgesõnaline ootamistingimus veendumaks, et otsitud element on olemas enne selle valimist.

On ka teisi oodatavad_tingimused saate kasutada selgesõnalise ootetingimusena. Mõned neist on:

pealkiri_ on (pealkiri) - kontrollib, kas lehe pealkiri on pealkiri.

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

visibility_of (element) - kontrollib, kas element on nähtav lehel, mille elemendi laius ja kõrgus on suuremad kui 0.

visibility_of_element_located (lokaator) -

kohalolek_elemendi_asukoht (lokaator) - Veenduge, et element asub ( lokaator) on lehel olemas. The lokaator on kahekordne (Autor, valija), nagu selgesõnalises ootenäites näitasin.

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

text_to_be_present_in_element (lokaator, tekst) - Kontrollib, kas teksti on elemendi juures asuvas elemendis lokaator. The lokaator on (Autor, valija) kahekordne.

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

element_to_be_selected (lokaator) - Kontrollib, kas lokaator on valitud. The lokaator on (Autor, valija) kahekordne.

alert_is_present () - eeldage, et lehel on hoiatusdialoog.

Neid on palju rohkem oodatavad_tingimused saadaval. Nende kohta lisateabe saamiseks külastage Pythoni seleeni API dokumentatsiooni lehte.

Järeldus:

Selles artiklis olen käsitlenud seleeni kaudseid ja otseseid ootusi. Samuti olen teile näidanud, kuidas töötada kaudse ja otsese ootega. Seleeni projektides peaksite alati proovima kasutada selget ootamist, kuna seleen püüab ooteaega võimalikult palju vähendada. Nii ei pea te iga kord, kui oma seleeniprojekte käivitate, ootama konkreetset sekundite arvu. Selgesõnaline ootamine peaks säästma palju sekundeid.

Seleeniootuste kohta lisateabe saamiseks külastage ametlikku Selenium Pythoni raamatukogu ootete dokumentatsiooni lehte.

Kuidas kuvada OSD ülekatet täisekraanil Linuxi rakendustes ja mängudes
Täisekraaniga mängude mängimine või rakenduste kasutamine häireteta täisekraanirežiimis võib teid paneelil või tegumiribal kuvatavast asjakohasest süs...
Viis parimat mängu püüdmise kaarti
Me kõik oleme YouTube'is voogesituse mänge näinud ja armastanud. PewDiePie, Jakesepticye ja Markiplier on vaid mõned tipptasemel mängijatest, kes on t...
Kuidas mängu Linuxis arendada
Kümme aastat tagasi ei osanud paljud Linuxi kasutajad ennustada, et nende lemmikoperatsioonisüsteem on ühel päeval populaarne kommertsvideomängude män...