Selenium

Kaip laukti, kol puslapis bus įkeltas su selenu

Kaip laukti, kol puslapis bus įkeltas su selenu
Nors žiniatinklio automatizavimas ar žiniatinklio grandymas naudojant „Selenium“ žiniatinklio tvarkyklę gali kilti problemų, pvz., Elementas, kurį norite pasirinkti, nėra arba mygtukas, kurį norite paspausti, neparengtas spustelėti ir pan.

Priežastis, kad taip atsitinka, yra ta, kad „Selenium“ žiniatinklio tvarkyklė turi atsisiųsti tinklalapį ir užbaigti puslapio pateikimą, kad galėtumėte ką nors jame padaryti. Anksčiau žiniatinklio serveris generavo svetainės turinį, o naršyklė jį tiesiog atsisiuntė ir pateikė. Šiais laikais turime daug vieno puslapio interneto programų, kurios veikia šiek tiek kitaip. Vieno puslapio žiniatinklio programose (SPA) žiniatinklio serveris aptarnauja tik frontendo kodus. Kai naršyklėje bus pateiktas „frontend“ kodas, išorinis kodas naudos AJAX, kad paprašytų API duomenų žiniatinklio serveriui. Kai frontendas gauna API duomenis, jie pateikiami naršyklėje. Taigi, nors naršyklė baigė atsisiųsti ir pateikti tinklalapį, tinklalapis vis dar nėra paruoštas. Turite palaukti, kol gaus API duomenis ir juos taip pat atkurti. Taigi, šios problemos sprendimas yra palaukti, kol duomenys bus prieinami, kol nieko nepadarysime su „Selenium“.

Selene yra 2 rūšių laukimai:
1) Numanomas laukimas
2) Aiškus laukimas

1) Numanomas laukimas: Tai lengviausia įgyvendinti. Netiesioginis laukimas nurodo „Selenium“ žiniatinklio tvarkyklę keletą sekundžių palaukti, kol DOM (dokumento objekto modelis) bus parengtas (tinklalapis bus paruoštas).

2) Aiškus laukimas: Tai yra šiek tiek sudėtinga nei numanomas laukimas. Aiškiai laukdami, „Selenium“ žiniatinklio tvarkyklei nurodykite, ko laukti. Selenas laukia, kol bus įvykdyta ši konkreti sąlyga. Kai tai bus įvykdyta, „Selenium“ žiniatinklio tvarkyklė bus pasirengusi priimti kitas komandas. Paprastai aiškus laukimo laikas yra kintamas. Tai priklauso nuo to, kaip greitai bus įvykdytos sąlygos. Blogiausiu atveju aiškus laukimas laukia tiek, kiek numanomas laukimas.

Šiame straipsnyje aš jums parodysiu, kaip laukti (numanomo ir aiškaus), kol puslapis bus įkeltas su „Selenium“. Taigi, pradėkime.

Būtinos sąlygos:

Norėdami išbandyti šio straipsnio komandas ir pavyzdžius, turite,

1) „Linux“ paskirstymas (pageidautina „Ubuntu“), įdiegtas jūsų kompiuteryje.
2) „Python 3“ įdiegtas jūsų kompiuteryje.
3) PIP 3 įdiegtas jūsų kompiuteryje.
4) „Python“ virtualenv paketą, įdiegtą jūsų kompiuteryje.
5) „Mozilla Firefox“ arba „Google Chrome“ žiniatinklio naršyklės, įdiegtos jūsų kompiuteryje.
6) Turi žinoti, kaip įdiegti „Firefox Gecko“ tvarkyklę arba „Chrome“ žiniatinklio tvarkyklę.

Norėdami įvykdyti 4, 5 ir 6 reikalavimus, perskaitykite mano straipsnį Įvadas į seleną su „Python 3“ „Linuxhint“.com.

„LinuxHint“ galite rasti daug straipsnių kitomis temomis.com. Jei jums reikia pagalbos, būtinai patikrinkite juos.

Projektų katalogo nustatymas:

Kad viskas būtų tvarkinga, sukurkite naują projekto katalogą selenas-palauk / taip:

$ mkdir -pv selenium-wait / tvarkyklės

Eikite į selenas-palauk / projekto katalogą taip:

$ cd selenas - laukti /

Projekto kataloge sukurkite virtualią „Python“ aplinką taip:

$ virtualenv .venv

Suaktyvinkite virtualią aplinką taip:

$ šaltinis .venv / bin / aktyvuoti

Įdiekite „Selenium“ naudodami PIP3 taip:

$ pip3 įdiekite seleną

Atsisiųskite ir įdiekite visą reikiamą žiniatinklio tvarkyklę vairuotojai / projekto katalogas. Savo straipsnyje paaiškinau žiniatinklio tvarkyklių atsisiuntimo ir diegimo procesą Įvadas į seleną su „Python 3“. Jei jums reikia pagalbos, ieškokite toliau „LinuxHint“.com už tą straipsnį.

Šiame straipsnyje demonstravimui naudosiu „Google Chrome“ žiniatinklio naršyklę. Taigi, aš naudosiu chromedriver dvejetainis iš vairuotojai / kataloge.

Darbas su numanomu laukimu:

Norėdami eksperimentuoti su numanomu laukimu, sukurkite naują „Python“ scenarijų ex01.py projekto kataloge ir įveskite toliau nurodytas to failo kodų eilutes.

iš seleno importo žiniatinklio tvarkyklės
iš seleno.žiniatinklio tvarkyklė.paplitęs.raktai importuoja raktus
parinktys = žiniatinklio tvarkyklė.„Chrome“ parinktys ()
galimybės.be galvos = Tiesa
naršyklė = žiniatinklio tvarkyklė.„Chrome“ (vykdomojo_ kelias = "./ tvarkyklės / chromedriver ", parinktys = parinktys)
naršyklė.netiesiogiai_palauk (10)
naršyklė.gauti ("https: // www.unixtimestamp.com / ")
laiko žymė = naršyklė.find_element_by_xpath ("// h3 [@ class = 'text-veszély'] [1]")
spausdinti ('Dabartinė laiko žymė:% s'% (laiko žymė.teksto.padalinti (") [0]))
naršyklė.Uždaryti()

Kai baigsite, išsaugokite ex01.py „Python“ scenarijus.

1 ir 2 eilutėse importuojami visi reikalingi seleno komponentai.

4 eilutė sukuria „Chrome“ parinkčių objektą.

5 eilutėje įgalinamas „Chrome“ žiniatinklio tvarkyklės režimas be galvos.

7 eilutėje sukuriamas naršyklės „Chrome“ objektas naudojant chromedriver dvejetainis iš vairuotojai / kataloge.

8 eilutė naudojama nurodant Selenui netiesiogiai palaukti 10 sekundžių naudojant implicit_wait () naršyklės metodas.

10 eilutė įkelia www.unixtimestamp.com naršyklėje.

12 eilutė suranda laiko žymos elementą naudodama XPath selektorių // h3 [@ class = 'text-veszély'] [1] ir saugo jį laiko žyma kintamasis.

„XPath“ selektorių gavau iš „Chrome“ kūrėjų įrankio. Kaip matote, laiko žyma yra pirmoji h3 elementas su klasės pavadinimu tekstas-pavojus. Yra 2 h3 elementai su klase tekstas-pavojus.

13 eilutėje atspausdinama tik laiko žymė iš elemento, kurį pasirinkau naudodamas XPath selektorių ir kurį išsaugojau laiko žyma kintamasis.

14 eilutė uždaro naršyklę.

Baigę paleiskite „Python“ scenarijų ex01.py taip:

$ python3 ex01.py

Kaip matote, dabartinė laiko žymė ištraukiama iš „unixtimestamp“.com ir atspausdinta ant konsolės.

Darbas su aiškiu laukimu:

Norėdami eksperimentuoti su tiesioginiu laukimu, sukurkite naują „Python“ scenarijų ex02.py projekto kataloge ir įveskite toliau nurodytas to failo kodų eilutes.

iš seleno importo žiniatinklio tvarkyklės
iš seleno.žiniatinklio tvarkyklė.paplitęs.raktai importuoja raktus
iš seleno.žiniatinklio tvarkyklė.paplitęs.importuojant Iki
iš seleno.žiniatinklio tvarkyklė.parama.ui importuoti „WebDriverWait“
iš seleno.žiniatinklio tvarkyklė.palaikyti importą tikėtinos_ sąlygos
parinktys = žiniatinklio tvarkyklė.„Chrome“ parinktys ()
galimybės.be galvos = Tiesa
naršyklė = žiniatinklio tvarkyklė.„Chrome“ (vykdomojo_ kelias = "./ tvarkyklės / chromedriver ", parinktys = parinktys)
naršyklė.gauti ("https: // www.unixtimestamp.com / ")
bandyti:
laiko žymė = WebDriverWait (naršyklė, 10).iki (
tikėtinos_ sąlygos.buvimo_elementas_vieta ((Autorius.XPATH "
// h3 [@ class = 'text-veszély'] [1] "))
)
spausdinti ('Dabartinė laiko žymė:% s'% (laiko žymė.teksto.padalinti (") [0]))
pagaliau:
naršyklė.Uždaryti()

Kai baigsite, išsaugokite ex02.py „Python“ scenarijus.

1-5 eilutėje visi reikalingi komponentai importuojami iš „Selenium“ bibliotekos.

7 eilutė sukuria „Chrome“ parinkčių objektą.

8 eilutėje įgalinamas „Chrome“ žiniatinklio tvarkyklės režimas be galvos.

10 eilutėje sukuriamas naršyklės „Chrome“ objektas naudojant chromedriver dvejetainis iš vairuotojai / kataloge.

12 eilutė įkelia www.unixtimestamp.com naršyklėje.

Aiškus laukimas įgyvendinamas bandymo pagaliau (iš 14–20 eilutės)

15–17 eilutės naudoja „WebDriverWait“ () objektas. Pirmasis „WebDriverWait“ () yra naršyklės objektas, o antrasis argumentas yra maksimalus leistinas laikas (blogiausiu atveju) įvykdyti sąlygą, kuris šiuo atveju yra 10 sekundžių.

Viduje konors iki () blokuoti, tikėtinos_ sąlygos.buvimo_elemento_vieta () metodas naudojamas įsitikinti, ar elementas yra prieš bandant pasirinkti elementą. Čia, Iki.XPATH yra naudojamas pasakyti buvimo_elemento_vieta () metodas, kurį pasirinkome elementui pasirinkti XPath selektorių. XPath parinkiklis yra // h3 [@ class = 'text-veszély'] [1].

Suradus elementą, jis saugomas laiko žyma kintamasis.

18 eilutė atspausdina tik laiko žymę iš pasirinkto elemento.

Galiausiai 19–20 eilutė uždaro naršyklę.

Kai baigsite, paleiskite ex02.py „Python“ scenarijus taip:

$ python3 ex02.py

Kaip matote, dabartinė laiko žymė iš „unixtimestamp“.com yra atspausdinta ant konsolės.

Elementų pasirinkimas aiškiame laukime:

Ankstesniame skyriuje aš naudoju Iki.XPATH elementui pasirinkti naudojant XPath selektorių. Elementus taip pat galite pasirinkti naudodami ID, žymos pavadinimą, CSS klasės pavadinimą, CSS selektorių ir kt.

Palaikomi atrankos metodai pateikti žemiau:

Iki.XPATH - Elementą / elementus parenka naudodamas „XPath“ selektorių.

Iki.CLASS_NAME - Pasirenka elementą / elementus naudodamas CSS klasės pavadinimą.

Iki.CSS_SELECTOR - Elementą / elementus parenka naudodamas CSS selektorių.

Iki.ID - Parenka elementą pagal ID

Iki.VARDAS - Parenka elementą / elementus pagal pavadinimą.

Iki.„TAG_NAME“ - Parenka elementą / elementus pagal HTML žymos pavadinimą.

Iki.LINK_TEXT - Pasirenka elementą / elementus pagal nuorodos tekstą a (inkaro) HTML žyma.

Iki.PARTIAL_LINK_TEXT - Pasirenka elementą / elementus pagal dalinį nuorodos tekstą a (inkaro) HTML žyma.

Norėdami gauti daugiau informacijos apie tai, apsilankykite „Python Selenium“ API dokumentacijos puslapyje.

Numatomos sąlygos aiškiame laukime:

Ankstesniame aiškiame laukimo pavyzdyje aš naudojau buvimo_elemento_vieta () metodas tikėtinos_ sąlygos kaip aiški laukimo sąlyga, norint įsitikinti, kad elementas, kurio ieškojau, egzistuoja prieš jį pasirenkant.

Yra ir kitų tikėtinos_ sąlygos galite naudoti kaip aiškią laukimo sąlygą. Kai kurie iš jų yra:

title_is (pavadinimas) - patikrina, ar puslapio pavadinimas yra pavadinimas.

title_contains (dalinis_pavadinimas) - patikrina, ar puslapio pavadinime yra dalis pavadinimo dalinis_pavadinimas.

Visibility_of (elementas) - patikrina, ar elementas yra matomas puslapyje, kurio elemento plotis ir aukštis yra didesni nei 0.

visibility_of_element_located (lokatorius) -

buvimo_elemento_vieta (lokatorius) - Įsitikinkite, kad elementas, esantis (prie lokatorius) yra puslapyje. The lokatorius yra dvigubas (Autorius, selektorius), kaip aš parodžiau aiškiame laukimo pavyzdyje.

all_el_element_located buvimas () - Įsitikina, kad visi elementai atitinka lokatorius yra puslapyje. The lokatorius yra (Autorius, selektorius) dvipusis.

text_to_be_present_in_element (lokatorius, tekstas) - Tikrina, ar teksto yra elemente, esančiame lokatorius. The lokatorius yra (Autorius, selektorius) dvipusis.

element_to_be_clickable (lokatorius) - Tikrina, ar elementas yra prie lokatorius yra matomas ir spustelėjamas. The lokatorius yra (Autorius, selektorius) dvipusis.

element_to_be_selected (lokatorius) - Tikrina, ar elementas yra prie lokatorius yra pasirinktas. The lokatorius yra (Autorius, selektorius) dvipusis.

alert_is_present () - tikėtis, kad puslapyje bus įspėjimo dialogo langas.

Jų yra daug daugiau tikėtinos_ sąlygos galima naudoti. Norėdami gauti daugiau informacijos apie tai, apsilankykite „Python Selenium“ API dokumentacijos puslapyje.

Išvada:

Šiame straipsnyje aptariau numanomą ir aiškų Seleno laukimą. Aš taip pat parodžiau, kaip dirbti su numanomu ir aiškiu laukimu. Savo „Selenium“ projektuose visada turėtumėte pabandyti naudoti aiškų laukimą, nes „Selenium“ stengsis kiek įmanoma sumažinti laukimo laiką. Tokiu būdu jums nereikės laukti konkretaus sekundžių skaičiaus kiekvieną kartą vykdant „Selenium“ projektus. Aiškus laukimas turėtų sutaupyti daug sekundžių.

Norėdami gauti daugiau informacijos apie „Selenium“ laukimus, apsilankykite oficialiame „Selenium Python“ bibliotekos laukimo dokumentacijos puslapyje.

Kaip pakeisti pelės ir jutiklinių plokščių slinkimo kryptį sistemoje „Windows 10“
Pelė ir Jutiklinė dalisTai ne tik palengvina skaičiavimus, bet ir efektyvesnį bei mažiau laiko reikalaujantį. Mes neįsivaizduojame gyvenimo be šių pri...
Kaip pakeisti pelės žymeklio ir žymeklio dydį, spalvą ir schemą sistemoje „Windows 10“
„Windows 10“ pelės žymeklis ir žymeklis yra labai svarbūs operacinės sistemos aspektai. Tai galima pasakyti ir apie kitas operacines sistemas, taigi, ...
Nemokami ir atvirojo kodo žaidimų varikliai, skirti kurti „Linux“ žaidimus
Šiame straipsnyje bus pateiktas nemokamų ir atvirojo kodo žaidimų variklių, kurie gali būti naudojami kuriant 2D ir 3D žaidimus „Linux“, sąrašas. Toki...