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

How Wait Page Load With Selenium



Kamēr tīmekļa automatizācija vai tīmekļa nokasīšana, izmantojot Selēna 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 tam ir tas, ka Selēna tīmekļa draiverim ir jālejupielādē tīmekļa lapa un jāpabeidz lapas atveidošana, pirms varat kaut ko darīt. 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 nedaudz savādāk. Vienas lapas tīmekļa lietotnēs (SPA) tīmekļa serveris apkalpo tikai priekšpuses kodus. Kad priekšpuses kods ir atveidots pārlūkprogrammā, priekšpuses kods izmanto AJAX, lai pieprasītu API datus tīmekļa serverim. Kad priekšpuse saņem API datus, tā tos renderē pārlūkprogrammā. Tātad, pat ja pārlūkprogramma ir pabeigusi tīmekļa lapas lejupielādi un atveidošanu, tā joprojām nav gatava. Jums jāgaida, līdz tas saņems API datus, kā arī tie tiks atveidoti. Tātad šīs problēmas risinājums ir gaidīt, līdz dati būs pieejami, pirms mēs kaut ko darām ar selēnu.







Selēnā ir divu veidu gaidīšanas:
1) Netieša gaidīšana
2) Skaidra gaidīšana



1) Netieša gaidīšana: Tas ir visvieglāk īstenojams. Netieša gaidīšana liek Selēna tīmekļa draiverim gaidīt vairākas sekundes, līdz DOM (dokumenta objekta modelis) būs gatavs (tīmekļa lapa būs gatava).



2) Skaidra gaidīšana: Tas ir nedaudz sarežģītāk nekā netiešā gaidīšana. Skaidri gaidot, jūs pasakāt Selēna tīmekļa draiverim, kas jāgaida. Selēns gaida, kad tiks izpildīts šis īpašais nosacījums. Kad tas ir izpildīts, Selēna tīmekļa draiveris būs gatavs pieņemt citas komandas. Parasti nepārprotams gaidīšanas laiks ir mainīgs. Tas ir atkarīgs no tā, cik ātri nosacījumi tiek izpildīti. Sliktākajā gadījumā skaidra gaidīšana gaidīs tik ilgi, kamēr netiešā gaidīšana.





Šajā rakstā es jums parādīšu, kā gaidīt (netieši un skaidri), lai lapa tiktu ielādēta ar selēnu. Tātad, sāksim.

Priekšnosacījumi:

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



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

Lai izpildītu 4., 5. un 6. prasības, izlasiet manu rakstu Ievads selēnā, izmantojot Python 3 vietnē Linuxhint.com.

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

Projekta direktorija iestatīšana:

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

$mkdir -pvselēns-pagaidiet/šoferi

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

$CDselēns-pagaidiet/

Projekta direktorijā izveidojiet Python virtuālo vidi šādi:

$virtualenv .venv

Aktivizējiet virtuālo vidi šādi:

$avots.venv/esmu/aktivizēt

Instalējiet selēnu, izmantojot PIP3, šādi:

$ pip3 instalēt selēnu

Lejupielādējiet un instalējiet visu nepieciešamo tīmekļa draiveri šoferi/ projekta direktoriju. Savā rakstā esmu izskaidrojis tīmekļa draiveru lejupielādes un instalēšanas procesu Ievads selēnā, izmantojot Python 3 . Ja jums nepieciešama palīdzība, meklējiet LinuxHint.com par to rakstu.

Šajā rakstā demonstrēšanai izmantošu tīmekļa pārlūkprogrammu Google Chrome. Tātad, es izmantošu hromodriveris binārs no šoferi/ direktoriju.

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

noselēnsimportēttīmekļa draiveris
noselēns.tīmekļa draiveris.bieži.atslēgas importētAtslēgas
iespējas=tīmekļa draiveris.ChromeOptions()
iespējas.bez galvas = Taisnība
pārlūkprogrammā=tīmekļa draiveris.Chrome(izpildāms_ceļš='./drivers/chromedriver',iespējas=iespējas)
pārlūkprogrammā.netieši_gaidi(10)
pārlūkprogrammā.gūt('https://www.unixtimestamp.com/')
laika zīmogs=pārlūkprogrammā.find_element_by_xpath('// h3 [@] [1]')
drukāt('Pašreizējais laikspiedols: %s'%(laika zīmogs.teksts.sadalīt('')[0]))
pārlūkprogrammā.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. rindā tiek izveidots Chrome opciju objekts.

5. rindā tiek iespējots režīms bez galvas Chrome tīmekļa draiverim.

7. rindā tiek izveidots pārlūka Chrome objekts, izmantojot hromodriveris binārs no šoferi/ direktoriju.

8. rindiņa tiek izmantota, lai Selēnam teiktu, ka viņš netieši jāgaida 10 sekundes, izmantojot implicitly_wait () pārlūka metode.

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

12. rinda atrod laika zīmoga elementu, izmantojot XPath atlasītāju // h3 [@class = ’text-risks’] [1] un uzglabā to laika zīmogs mainīgais.

Es ieguvu XPath atlasītāju no Chrome izstrādātāja rīka. Kā redzat, laika zīmogs ir pirmajā h3 elements ar klases nosaukumu teksts-briesmas . Ir 2 h3 elementi kopā ar klasi teksts-briesmas .

13. rindā tiek izdrukāts tikai laika zīmogs no elementa, kuru esmu izvēlējies, izmantojot XPath atlasītāju un saglabājis laika zīmogs mainīgais.

14. rinda aizver pārlūkprogrammu.

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 izdrukāts konsolē.

Darbs ar skaidru gaidīšanu:

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

noselēnsimportēttīmekļa draiveris
noselēns.tīmekļa draiveris.bieži.atslēgas importētAtslēgas
noselēns.tīmekļa draiveris.bieži.pēc importētAutors
noselēns.tīmekļa draiveris.atbalstu.sīpols importētWebDriverWait
noselēns.tīmekļa draiveris.atbalstu importētparedzamie_nosacījumi
iespējas=tīmekļa draiveris.ChromeOptions()
iespējas.bez galvas = Taisnība
pārlūkprogrammā=tīmekļa draiveris.Chrome(izpildāms_ceļš='./drivers/chromedriver',iespējas=iespējas)
pārlūkprogrammā.gūt('https://www.unixtimestamp.com/')
pamēģini:
laika zīmogs=WebDriverWait(pārlūkprogrammā, 10).līdz(
paredzamie_nosacījumi.elementa_atrašanās vieta((Autors.XPATH, '
// h3 [@] [1] '
))
)
drukāt('Pašreizējais laikspiedols: %s'%(laika zīmogs.teksts.sadalīt('')[0]))
beidzot:
pārlūkprogrammā.aizvērt()

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

1.-5. Rindiņa importē visus nepieciešamos komponentus no selēna bibliotēkas.

7. rindā tiek izveidots Chrome opciju objekts.

8. rindā tiek iespējots režīms bez galvas Chrome tīmekļa draiverim.

10. rindā tiek izveidots pārlūka Chrome objekts, izmantojot hromodriveris binārs no šoferi/ direktoriju.

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

Skaidra gaidīšana tiek ieviesta mēģinājuma galīgajā blokā (no 14. līdz 20. rindai)

Līnija 15-17 izmanto izveido WebDriverWait () objekts. Pirmais arguments WebDriverWait () ir pārlūkprogrammas objekts, un otrs arguments ir maksimālais atļautais laiks (sliktākais scenārijs) nosacījuma izpildei, kas šajā gadījumā ir 10 sekundes.

Iekš līdz () bloķēt, gaidāmie_nosacījumi.pastāvība_elementa_vietai () 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 pateiktu elementu_atrašanās_vieta () metode, ko mēs izmantojām, lai atlasītu elementu XPath. XPath atlasītājs ir // h3 [@class = ’text-risks’] [1] .

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

18. rindā tiek izdrukāts tikai laika zīmogs no atlasītā elementa.

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

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

$ python3 ex02.py

Kā redzat, pašreizējais laika zīmogs no unixtimestamp.com tiek izdrukāts uz konsoles.

Elementu izvēle skaidrā gaidīšanā:

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

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

Autors: XPATH - Atlasa elementu/elementus, izmantojot XPath atlasītāju.

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

Autors.CSS_SELECTOR - Atlasa elementu/elementus, izmantojot CSS atlasītāju.

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 pēc saites teksta uz (enkurs) HTML tags.

Autors.PARTIAL_LINK_TEXT - Atlasa elementu/elementus pēc daļējas saites teksta uz (enkurs) HTML tags.

Lai iegūtu plašāku informāciju par tiem, apmeklējiet Python Selēna API dokumentācijas lapa .

Paredzamie nosacījumi nepārprotamā gaidīšanā:

Iepriekšējā skaidrā gaidīšanas piemērā esmu izmantojis elementu_atrašanās_vieta () metode paredzamie_nosacījumi kā skaidru gaidīšanas nosacījumu, lai pārliecinātos, ka meklētais elements pastāv, pirms to atlasāt.

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

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

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ā, kurā ir elementa platums un augstums lielāks par 0.

visibility_of_element_located (vietrādis) -

elementu_loka klātbūtne (lokators) - Pārliecinieties, vai elements atrodas (pie lokators ) ir lapā. The lokators ir kopa no (Autors, atlasītājs), kā esmu parādījis skaidrā gaidīšanas piemērā.

visu_elementu_loka klātbūtne () - Pārliecinās, ka visi elementi atbilst lokators ir lapā. The lokators ir (Autors, atlasītājs) tuple.

text_to_be_present_in_element (meklētājs, teksts) - Pārbauda, ​​vai teksts atrodas elementā, kas atrodas pie lokators . The lokators ir (Autors, atlasītājs) tuple.

element_to_be_clickable (vietrādis) - Pārbauda, ​​vai elements atrodas pie lokators ir redzams un noklikšķināms. The lokators ir (Autors, atlasītājs) tuple.

element_to_be_selected (lokators) - Pārbauda, ​​vai elements atrodas pie lokators ir izvēlēts. The lokators ir (Autors, atlasītājs) tuple.

alert_is_present () - gaidiet, ka lapā tiks parādīts brīdinājuma dialoglodziņš.

Ir vēl daudzi citi paredzamie_nosacījumi pieejams lietošanai. Lai iegūtu plašāku informāciju par tiem, apmeklējiet Python Selēna API dokumentācijas lapa .

Secinājums:

Šajā rakstā esmu apspriedis Selēna netiešās un nepārprotamās gaidīšanas. Esmu arī parādījis, kā strādāt ar netiešu un nepārprotamu gaidīšanu. Jums vienmēr jāmēģina izmantot skaidru gaidīšanu savos Selēna projektos, jo Selēns 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 vadīsit savus selēna projektus. Skaidrai gaidīšanai vajadzētu ietaupīt daudz sekunžu.

Lai iegūtu vairāk informācijas par selēna gaidīšanu, apmeklējiet oficiālā Selēna Python bibliotēka gaida dokumentācijas lapu .