Selenium

Kā gaidīt lapas ielādi ar selēnu

Kā gaidīt lapas ielādi ar selēnu
Kamēr tīmekļa automatizācija vai tīmekļa nokasīšana ar Selenium tīmekļa draiveri var rasties problēmas, piemēram, elements, kuru vēlaties atlasīt, nav pieejams vai poga, kuru vēlaties nospiest, nav gatava noklikšķināšanai utt.

Iemesls tas notiek tāpēc, ka Selenium tīmekļa draiverim ir jālejupielādē vietne un jāpabeidz lapas renderēšana, pirms jūs varat tajā darīt jebko. Agrāk tīmekļa serveris ģenerēja vietnes saturu, un pārlūkprogramma to vienkārši lejupielādēja un atveidoja. Mūsdienās mums ir daudz vienas lapas tīmekļa lietotņu, kas darbojas mazliet savādāk. Vienas lapas tīmekļa lietotnēs (SPA) tīmekļa serveris apkalpo tikai priekšējās saskarnes kodus. Kad priekšgala kods ir renderēts pārlūkprogrammā, priekšgala kods izmanto AJAX, lai pieprasītu API datus tīmekļa serverim. Kad priekšgals saņem API datus, tie tiek renderēti pārlūkprogrammā. Tātad, kaut arī pārlūkprogramma ir pabeigusi tīmekļa lapas lejupielādi un renderēšanu, vietne joprojām nav gatava. Jums jāgaida, līdz tas saņem API datus un tos arī renderē. Tātad, šīs problēmas risinājums ir gaidīt, kamēr dati būs pieejami, pirms mēs kaut ko darīsim ar Selenium.

Selēnā ir divi gaidīšanas veidi:
1) Netieša gaidīšana
2) nepārprotama gaidīšana

1) Netieša gaidīšana: To ir visvieglāk īstenot. Netieša gaidīšana liek Selenium tīmekļa draiverim gaidīt vairākas sekundes, līdz DOM (dokumenta objekta modelis) ir gatavs (Web lapa ir gatava).

2) nepārprotama gaidīšana: Tas ir mazliet sarežģīts nekā netiešā gaidīšana. Nepārprotami gaidot, jūs norādāt Selenium tīmekļa draiverim, kas jāgaida. Selēns gaida šī īpašā nosacījuma izpildi. Kad tas būs izpildīts, Selenium tīmekļa draiveris būs gatavs veikt citas komandas. Parasti tiešais gaidīšanas laiks ir mainīgs. Tas ir atkarīgs no tā, cik ātri tiek izpildīti nosacījumi. Sliktākajā gadījumā nepārprotama gaidīšana gaidīs tik ilgi, kamēr netiešā gaidīšana.

Šajā rakstā es parādīšu, kā gaidīt (netiešu un nepārprotamu), līdz lapa tiek ielādēta ar selēnu. Tātad, sāksim darbu.

Priekšnosacījumi:

Lai izmēģinātu šī raksta komandas un piemērus, jums ir jābūt,

1) Linux izplatīšana (vēlams, Ubuntu), kas instalēta jūsu datorā.
2) Python 3 instalēts jūsu datorā.
3) PIP 3 instalēts jūsu datorā.
4) pitons virtualenv pakotne instalēta jūsu datorā.
5) datorā instalētas Mozilla Firefox vai Google Chrome tīmekļa pārlūkprogrammas.
6) Jāzina, kā instalēt Firefox Gecko draiveri vai Chrome tīmekļa draiveri.

Lai izpildītu 4., 5. un 6. prasību, izlasiet manu rakstu Iepazīšanās ar selēnu ar Python 3 pie Linuxhint.com.

Vietnē LinuxHint varat atrast daudz rakstu par citām tēmām.com. Noteikti pārbaudiet tos, ja jums nepieciešama palīdzība.

Projektu direktorijas iestatīšana:

Lai viss būtu sakārtots, izveidojiet jaunu projekta direktoriju selēns-pagaidiet / sekojoši:

$ mkdir -pv selenium-wait / draiveri

Pārejiet uz selēns-pagaidiet / projekta direktoriju šādi:

$ cd selēns-pagaidiet /

Izveidojiet Python virtuālo vidi projekta direktorijā šādi:

$ virtualenv .venv

Aktivizējiet virtuālo vidi šādi:

$ avots .venv / bin / aktivizēt

Instalējiet Selenium, izmantojot PIP3, šādi:

$ pip3 instalējiet selēnu

Lejupielādējiet un instalējiet visu nepieciešamo tīmekļa draiveri vadītāji / projekta direktoriju. Es savā rakstā esmu izskaidrojis tīmekļa draiveru lejupielādes un instalēšanas procesu Iepazīšanās ar selēnu ar Python 3. Ja jums nepieciešama palīdzība, meklējiet vietnē LinuxHint.com par to rakstu.

Šajā rakstā sniegtajai demonstrācijai es izmantoju Google Chrome tīmekļa pārlūku. Tātad, es izmantošu hromedriver binārs no vadītāji / direktorijā.

Darbs ar netiešu gaidīšanu:

Lai eksperimentētu ar netiešu gaidīšanu, izveidojiet jaunu Python skriptu ex01.py projekta direktorijā un ierakstiet šādas faila kodu rindas.

no selēna importa tīmekļa draivera
no selēna.tīmekļa draiveris.bieži.atslēgu importēšana
opcijas = tīmekļa draiveris.Chrome opcijas ()
iespējas.bez galvas = patiess
pārlūks = tīmekļa draiveris.Chrome (izpildāmā_ceļš = "./ draiveri / chromedriver ", opcijas = opcijas)
pārlūku.netieši_gaida (10)
pārlūku.get ("https: // www.unixtimestamp.com / ")
timestamp = pārlūks.find_element_by_xpath ("// h3 [@ class = 'text -anger'] [1]")
drukāt ('Pašreizējais laika zīmogs:% s'% (laika zīmogs.tekstu.sadalīt (") [0]))
pārlūku.aizvērt ()

Kad esat pabeidzis, saglabājiet ex01.py Python skripts.

1. un 2. rindā tiek importēti visi nepieciešamie selēna komponenti.

4. rinda izveido objektu Chrome opcijas.

5. līnija nodrošina Chrome tīmekļa draivera režīmu bez galvas.

7. Rindā tiek izveidots pārlūka Chrome objekts, izmantojot hromedriver binārs no vadītāji / direktorijā.

8. Rinda tiek izmantota, lai norādītu selēnam netieši gaidīt 10 sekundes, izmantojot implicit_wait () pārlūka metode.

10. rindā tiek ielādēta www.unixtimestamp.com pārlūkprogrammā.

12. rinda atrod laika zīmoga elementu, izmantojot XPath selektoru // h3 [@ class = 'teksta briesmas'] [1] un glabā to laika zīmogs mainīgais.

Es saņēmu XPath selektoru no Chrome izstrādātāja rīka. Kā redzat, laika zīmogs ir pirmajā h3 elements ar klases nosaukumu teksta briesmas. Ir 2 h3 elementi ar klasi teksta briesmas.

13. Rinda drukā tikai laika zīmogu no elementa, kuru esmu atlasījis, izmantojot selektoru XPath, un saglabājis laika zīmogs mainīgais.

14. rindiņa aizver pārlūku.

Kad esat pabeidzis, palaidiet Python skriptu ex01.py sekojoši:

$ python3 ex01.py

Kā redzat, pašreizējais laika zīmogs tiek iegūts no unixtimestamp.com un iespiests konsolē.

Darbs ar nepārprotamu gaidīšanu:

Lai eksperimentētu ar skaidru gaidīšanu, izveidojiet jaunu Python skriptu ex02.py projekta direktorijā un ierakstiet šādas faila kodu rindas.

no selēna importa tīmekļa draivera
no selēna.tīmekļa draiveris.bieži.atslēgu importēšana
no selēna.tīmekļa draiveris.bieži.pēc importa
no selēna.tīmekļa draiveris.atbalstu.ui importējiet WebDriverWait
no selēna.tīmekļa draiveris.atbalstīt importēšanu paredzamie nosacījumi
opcijas = tīmekļa draiveris.Chrome opcijas ()
iespējas.bez galvas = patiess
pārlūks = tīmekļa draiveris.Chrome (izpildāmā_ceļš = "./ draiveri / chromedriver ", opcijas = opcijas)
pārlūku.get ("https: // www.unixtimestamp.com / ")
mēģiniet:
timestamp = WebDriverWait (pārlūks, 10).līdz (
paredzamie_nosacījumi.klātbūtnes_elementa_atrašanās vieta ((Autors.XPATH "
// h3 [@ class = 'teksta briesmas'] [1] "))
)
drukāt ('Pašreizējais laika zīmogs:% s'% (laika zīmogs.tekstu.sadalīt (") [0]))
visbeidzot:
pārlūku.aizvērt ()

Kad esat pabeidzis, saglabājiet ex02.py Python skripts.

1.-5. Rinda importē visus nepieciešamos komponentus no Selenium bibliotēkas.

7. rinda izveido objektu Chrome opcijas.

8. līnija nodrošina Chrome tīmekļa draivera režīmu bez galvas.

10. Rindā tiek izveidots pārlūka Chrome objekts, izmantojot hromedriver binārs no vadītāji / direktorijā.

12. rindā tiek ielādēta www.unixtimestamp.com pārlūkprogrammā.

Skaidra gaidīšana tiek ieviesta mēģinājuma beigās blokā (no 14. līdz 20. rindiņai)

15. – 17. Rindas izmantošana rada WebDriverWait () objekts. Pirmais arguments WebDriverWait () ir pārlūkprogrammas objekts, un otrais arguments ir maksimālais atļautais laiks (sliktākajā gadījumā) nosacījuma izpildei, kas šajā gadījumā ir 10 sekundes.

Iekš līdz () bloķēt, paredzamie_nosacījumi.klātbūtnes_elementa_vieta () metode tiek izmantota, lai pārliecinātos, ka elements ir klāt, pirms mēģināt atlasīt elementu. Šeit, Autors.XPATH tiek izmantots, lai pastāstītu klātbūtnes_elementa_vieta () metodi, ka elementa izvēlei esam izmantojuši XPath selektoru. XPath selektors ir // h3 [@ class = 'teksta briesmas'] [1].

Kad elements ir atrasts, tas tiek saglabāts mapē laika zīmogs mainīgais.

18. rinda no izvēlētā elementa izdrukā tikai laika zīmogu.

Visbeidzot, 19.-20. Rinda aizver pārlūkprogrammu.

Kad esat pabeidzis, palaidiet ex02.py Python skripts šādi:

$ python3 ex02.py

Kā redzat, pašreizējais laika zīmogs no unixtimestamp.com ir iespiests konsolē.

Elementu atlase nepārprotamā gaidā:

Iepriekšējā sadaļā esmu izmantojis Autors.XPATH elementa izvēlei, izmantojot selektoru XPath. Varat arī atlasīt elementus, izmantojot ID, taga nosaukumu, CSS klases nosaukumu, CSS selektoru utt.

Atbalstītās atlases metodes ir norādītas zemāk:

Autors.XPATH - Atlasa elementu / elementus, izmantojot XPath selektoru.

Autors.CLASS_NAME - Atlasa elementu / elementus, izmantojot CSS klases nosaukumu.

Autors.CSS_SELECTOR - Atlasa elementu / elementus, izmantojot CSS selektoru.

Autors.ID - Atlasa elementu pēc ID

Autors.NAME - Atlasa elementu / elementus pēc nosaukuma.

Autors.TAG_NAME - Atlasa elementu / elementus pēc HTML taga nosaukuma.

Autors.LINK_TEXT - Atlasa elementu / elementus, izmantojot saites tekstu a (enkurs) HTML tags.

Autors.PARTIAL_LINK_TEXT - Atlasa elementu / elementus, izmantojot daļēju saites tekstu a (enkurs) HTML tags.

Lai iegūtu papildinformāciju par tiem, apmeklējiet Python Selenium API dokumentācijas lapu.

Paredzamie apstākļi skaidrā gaidā:

Iepriekšējā skaidrā gaidīšanas piemērā esmu izmantojis klātbūtnes_elementa_vieta () metode paredzamie_nosacījumi kā nepārprotams gaidīšanas nosacījums, lai pārliecinātos, ka meklētais elements pastāv, pirms to atlasāt.

Ir arī citi paredzamie_nosacījumi jūs varat izmantot kā skaidru gaidīšanas nosacījumu. Daži no tiem ir:

nosaukums_ ir (nosaukums) - pārbauda, ​​vai lapas nosaukums ir nosaukums.

title_contains (daļējs_nosaukums) - pārbauda, ​​vai lapas nosaukumā ir daļa no nosaukuma daļējs_nosaukums.

visibility_of (elements) - pārbauda, ​​vai elements ir redzams lapā, kuras elementa platums un augstums ir lielāks par 0.

visibility_of_element_located (lokators) -

klātbūtnes_elementa_vieta (lokators) - Pārliecinieties, vai elements atrodas (pie lokators) atrodas lapā. The lokators ir dubultā (Pēc atlasītāja), kā esmu parādījis skaidrā gaidīšanas piemērā.

visu_elementu_atrašanās_vieta () - Pārliecinās, vai visiem elementiem atbilst lokators atrodas lapā. The lokators ir (Pēc atlasītāja) dubultā.

text_to_be_present_in_element (lokators, teksts) - Pārbauda, ​​vai tekstu atrodas elementā, kas atrodas pie lokators. The lokators ir (Pēc atlasītāja) dubultā.

element_to_be_clickable (lokators) - Pārbauda, ​​vai elements atrodas pie lokators ir redzams un klikšķināms. The lokators ir (Pēc atlasītāja) dubultā.

element_to_be_selected (lokators) - Pārbauda, ​​vai elements atrodas pie lokators ir atlasīts. The lokators ir (Pēc atlasītāja) dubultā.

alert_is_present () - gaidiet, ka lapā būs brīdinājuma dialoglodziņš.

Ir daudz vairāk paredzamie_nosacījumi pieejams jums lietošanai. Lai iegūtu papildinformāciju par tiem, apmeklējiet Python Selenium API dokumentācijas lapu.

Secinājums:

Šajā rakstā es esmu apspriedis netiešo un nepārprotamo Selēna gaidīšanu. Es arī parādīju, kā strādāt ar netiešu un nepārprotamu gaidīšanu. Savos Selenium projektos vienmēr jācenšas izmantot skaidru gaidīšanu, jo Selenium centīsies pēc iespējas samazināt gaidīšanas laiku. Tādā veidā jums nebūs jāgaida noteikts sekunžu skaits katru reizi, kad izpildāt savus Selenium projektus. Skaidrai gaidīšanai vajadzētu ietaupīt daudz sekunžu.

Lai iegūtu papildinformāciju par selēna gaidīšanu, apmeklējiet oficiālo Selenium Python bibliotēkas gaidīšanas lapu.

Kā parādīt OSD pārklājumu pilnekrāna Linux lietotnēs un spēlēs
Spēlējot pilnekrāna spēles vai lietojot lietotnes bez atrautības pilnekrāna režīmā, jūs varat izslēgt no attiecīgās sistēmas informācijas, kas redzama...
Top 5 spēļu tveršanas kartes
Mēs visi esam redzējuši un mīlējuši straumēšanas spēles pakalpojumā YouTube. PewDiePie, Jakesepticye un Markiplier ir tikai daži no labākajiem spēlētā...
Kā izstrādāt spēli Linux
Pirms desmit gadiem maz Linux lietotāju varētu paredzēt, ka viņu iecienītā operētājsistēma kādu dienu būs populāra spēļu platforma komerciālām videosp...