Selenium

Kako pričekati da se stranica učita selenom

Kako pričekati da se stranica učita selenom
Dok automatizacija weba ili struganje weba pomoću web-upravljačkog programa Selenium, možete se suočiti s problemima poput elementa koji želite odabrati nije dostupan ili gumb koji želite pritisnuti nije spreman za klik i tako dalje.

Razlog zašto se to događa je taj što mrežni upravljački program Selenium mora preuzeti web stranicu i završiti prikazivanje stranice prije nego što na njoj možete bilo što učiniti. U prošlosti je web poslužitelj generirao sadržaj web stranice, a preglednik ga je samo preuzeo i prikazao. U današnje vrijeme imamo mnogo web stranica s jednom stranicom koje rade malo drugačije. U web-aplikacijama s jednom stranicom (SPA-ovi) web-poslužitelj poslužuje samo prednje kodove. Jednom kada se kôd sučelja generira u pregledniku, prednji kôd koristi AJAX za traženje API podataka web poslužitelju. Nakon što frontend primi API podatke, prikazuje ih u pregledniku. Dakle, iako je preglednik završio preuzimanje i prikaz web stranice, web stranica još uvijek nije spremna. Morate pričekati da primi API podatke i također ih generirati. Dakle, rješenje ovog problema je pričekati da podaci postanu dostupni prije nego što poduzmemo bilo šta sa Selenijem.

U selenu postoje 2 vrste čekanja:
1) Implicitno čekanje
2) Eksplicitno čekanje

1) Implicitno čekanje: Ovo je najlakše provesti. Implicitno čekanje govori mrežnom pokretačkom programu Selenium da pričeka nekoliko sekundi da DOM (objektni model dokumenta) bude spreman (web stranica treba biti spremna).

2) Eksplicitno čekanje: Ovo je malo složeno od implicitnog čekanja. Izričitim čekanjem kažete upravljačkom programu Selenium što treba čekati. Selen čeka da se ispuni taj specifični uvjet. Nakon što se ispuni, mrežni upravljački program Selenium bit će spreman za primanje drugih naredbi. Obično je eksplicitno vrijeme čekanja varijabilno. Ovisi o tome koliko brzo se zadovoljavaju uvjeti. U najgorem slučaju, izričito čekanje čekat će koliko i implicitno čekanje.

U ovom članku pokazat ću vam kako pričekati (implicitno i eksplicitno) da se stranica učita selenom. Pa, krenimo.

Preduvjeti:

Da biste isprobali naredbe i primjere ovog članka, morate ih imati,

1) Linux distribucija (po mogućnosti Ubuntu) instalirana na vašem računalu.
2) Python 3 instaliran na vašem računalu.
3) PIP 3 instaliran na vašem računalu.
4) Python virtualenv paket instaliran na vašem računalu.
5) Mozilla Firefox ili Google Chrome web preglednici instalirani na vašem računalu.
6) Morate znati kako instalirati Firefox Gecko Driver ili Chrome Web Driver.

Za ispunjavanje zahtjeva 4, 5 i 6 pročitajte moj članak Uvod u selenij s Pythonom 3 na Linuxhintu.com.

Na LinuxHintu možete pronaći mnogo članaka o ostalim temama.com. Svakako ih pregledajte ako trebate pomoć.

Postavljanje direktorija projekta:

Da biste sve organizirali, stvorite novi direktorij projekata selen-čekaj / kako slijedi:

$ mkdir -pv selen-pričekaj / upravljački programi

Idite na selen-čekaj / direktorij projekta kako slijedi:

$ cd selena-pričekaj /

Stvorite Python virtualno okruženje u direktoriju projekta kako slijedi:

$ virtualenv .venv

Aktivirajte virtualno okruženje na sljedeći način:

$ izvor .venv / bin / aktivirati

Instalirajte selen pomoću PIP3 na sljedeći način:

$ pip3 instaliraj selen

Preuzmite i instalirajte sve potrebne upravljačke programe u vozači / direktorij projekta. U svom sam članku objasnio postupak preuzimanja i instaliranja web upravljačkih programa Uvod u selenij s Pythonom 3. Ako trebate pomoć, potražite LinuxHint.com za taj članak.

Za demonstraciju u ovom članku koristit ću web preglednik Google Chrome. Dakle, koristit ću kromedriver binarni iz vozači / imenik.

Rad s implicitnim čekanjem:

Da biste eksperimentirali s implicitnim čekanjem, stvorite novu Python skriptu ex01.py u direktorij vašeg projekta i unesite sljedeće retke kodova u tu datoteku.

s selena za uvoz webdrivera
od selena.mrežni pogonitelj.uobičajen.tipke uvoz ključeva
options = webdriver.ChromeOptions ()
mogućnosti.bez glave = Istina
preglednik = webdriver.Chrome (izvršna_puta = "./ drivers / chromedriver ", options = options)
preglednik.implicitno_čekaj (10)
preglednik.get ("https: // www.unixtimestamp.com / ")
vremenska oznaka = preglednik.find_element_by_xpath ("// h3 [@ class = 'text-danger'] [1]")
print ('Trenutna vremenska oznaka:% s'% (vremenska oznaka.tekst.podijeliti (") [0]))
preglednik.Zatvoriti()

Kad završite, spremite ex01.py Python skripta.

Linija 1 i 2 uvozi sve potrebne komponente selena.

Redak 4 stvara objekt Chrome opcija.

Linija 5 omogućuje bezglavi način rada za web-upravljački program Chrome.

Redak 7 stvara objekt preglednika Chrome pomoću kromedriver binarni iz vozači / imenik.

Redak 8 koristi se kako bi Seleniju rekao da implicitno pričeka 10 sekundi koristeći implicitno_čekajte () metoda preglednika.

Redak 10 učitava www.unixtimestamp.com u pregledniku.

Redak 12 pronalazi element vremenske oznake pomoću selektora XPath // h3 [@ class = 'tekst-opasnost'] [1] i pohranjuje u vremenska oznaka varijabilna.

Dohvatio sam selektor XPath iz alata Chrome Developer Tool. Kao što vidite, vremenska je oznaka prva h3 element s nazivom klase tekst-opasnost. Postoje 2 h3 elementi s razredom tekst-opasnost.

Redak 13 ispisuje samo vremensku oznaku iz elementa koji sam odabrao pomoću XPath selektora i pohranio u vremenska oznaka varijabilna.

Redak 14 zatvara preglednik.

Kada završite, pokrenite Python skriptu ex01.py kako slijedi:

$ python3 ex01.py

Kao što vidite, trenutna vremenska oznaka izdvaja se iz unixtimestamp-a.com i otisnuto na konzoli.

Rad s eksplicitnim čekanjem:

Da biste eksperimentirali s eksplicitnim čekanjem, stvorite novu Python skriptu ex02.py u direktorij vašeg projekta i unesite sljedeće retke kodova u tu datoteku.

s selena za uvoz webdrivera
od selena.mrežni pogonitelj.uobičajen.tipke uvoz ključeva
od selena.mrežni pogonitelj.uobičajen.uvozom By
od selena.mrežni pogonitelj.podrška.ui import WebDriverWait
od selena.mrežni pogonitelj.podrška uvoz očekivani_uvjeti
options = webdriver.ChromeOptions ()
mogućnosti.bez glave = Istina
preglednik = webdriver.Chrome (izvršna_puta = "./ drivers / chromedriver ", options = options)
preglednik.get ("https: // www.unixtimestamp.com / ")
probati:
timestamp = WebDriverWait (preglednik, 10).do(
očekivani_uvjeti.prisutnost_elementa_locirano ((Autor.XPATH, "
// h3 [@ class = 'text-danger'] [1] "))
)
print ('Trenutna vremenska oznaka:% s'% (vremenska oznaka.tekst.podijeliti (") [0]))
konačno:
preglednik.Zatvoriti()

Kad završite, spremite ex02.py Python skripta.

Redak 1-5 uvozi sve potrebne komponente iz biblioteke Selenium.

Redak 7 stvara objekt Chrome opcija.

Linija 8 omogućuje bezglavi način rada za web-upravljački program Chrome.

Redak 10 stvara objekt preglednika Chrome pomoću kromedriver binarni iz vozači / imenik.

Redak 12 učitava www.unixtimestamp.com u pregledniku.

Eksplicitno čekanje implementirano je u blok try-konačno (od retka 14-20)

Linija 15-17 koristi stvara WebDriverWait () objekt. Prvi argument WebDriverWait () je objekt preglednika, a drugi argument je maksimalno dopušteno vrijeme (najgori scenarij) za ispunjavanje uvjeta, što je u ovom slučaju 10 sekundi.

U do() blok, očekivani_uvjeti.prisutnost_elementa_locirano () metoda koristi se kako bi se osiguralo da je element prisutan prije pokušaja odabira elementa. Ovdje, Po.XPATH koristi se za kazivanje prisutnost_elementa_locirano () metodu kojom smo koristili XPath selektor za odabir elementa. Selektor XPath je // h3 [@ class = 'tekst-opasnost'] [1].

Jednom kada je element pronađen, on se pohranjuje u vremenska oznaka varijabilna.

Redak 18 ispisuje samo vremensku oznaku iz odabranog elementa.

Konačno, redak 19-20 zatvara preglednik.

Kad završite, pokrenite ex02.py Python skripta kako slijedi:

$ python3 ex02.py

Kao što vidite, trenutna vremenska oznaka od unixtimestamp.com otisnut je na konzoli.

Odabir elemenata u eksplicitnim čekanjima:

U prethodnom odjeljku sam koristio Po.XPATH za odabir elementa pomoću XPath selektora. Elemente možete odabrati i pomoću ID-a, naziva oznake, naziva CSS klase, CSS selektora itd.

Podržane metode odabira dane su u nastavku:

Po.XPATH - Odabire element / elemente pomoću XPath selektora.

Po.CLASS_NAME - Odabire element / elemente pomoću naziva CSS klase.

Po.CSS_SELECTOR - Odabire element / elemente pomoću CSS selektora.

Po.iskaznica - Odabir elementa prema ID-u

Po.IME - Odabire element / elemente po imenu.

Po.TAG_NAME - Odabire element / elemente prema nazivu HTML oznake.

Po.LINK_TEXT - Odabire element / elemente tekstom veze na a (sidro) HTML oznaka.

Po.PARTIAL_LINK_TEXT - Odabire element / elemente djelomičnim tekstom veze od a (sidro) HTML oznaka.

Za više informacija o njima posjetite stranicu dokumentacije API-ja Python Selenium.

Očekivani uvjeti u eksplicitnim čekanjima:

U ranijem primjeru eksplicitnog čekanja koristio sam prisutnost_elementa_locirano () metoda očekivani_uvjeti kao izričiti uvjet čekanja kako bih bio siguran da element koji sam tražio postoji prije nego što ga odaberem.

Postoje i drugi očekivani_uvjeti možete koristiti kao izričit uvjet čekanja. Neki od njih su:

naslov_je (naslov) - provjerava je li naslov stranice titula.

naslov_ sadrži (djelomični_naslov) - provjerava sadrži li naslov stranice dio naslova djelomični_naslov.

vidljivost_elementa (elementa) - provjerava je li element vidljiv je na stranici koja je element ima širinu i visinu veću od 0.

vidljivost_datoteke_locirano (lokator) -

prisutnost_datoteke_locirano (lokator) - Provjerite je li element koji se nalazi ( lokator) je prisutan na stranici. The lokator je korpa od (Napisao, selektor), kao što sam pokazao u eksplicitnom primjeru čekanja.

prisutnost_sve_elementa_locirane () - Osigurava da svi elementi odgovaraju lokator je prisutan na stranici. The lokator je (Napisao, selektor) korijen.

text_to_be_present_in_element (lokator, tekst) - Provjerava je li tekst je prisutan u elementu smještenom u lokator. The lokator je (Napisao, selektor) korijen.

element_to_be_clickable (lokator) - Provjerava je li element smješten uz lokator je vidljiv i na njega se može kliknuti. The lokator je (Napisao, selektor) korijen.

element_to_be_selected (lokator) - Provjerava je li element smješten uz lokator je odabran. The lokator je (Napisao, selektor) korijen.

alert_is_present () - očekujte da će dijaloški okvir upozorenja biti prisutan na stranici.

Ima ih još mnogo očekivani_uvjeti dostupan za upotrebu. Za više informacija o njima posjetite stranicu dokumentacije API-ja Python Selenium.

Zaključak:

U ovom sam članku raspravljao o implicitnim i eksplicitnim selenijskim čekanjima. Također sam vam pokazao kako raditi s implicitnim i eksplicitnim čekanjem. Uvijek biste trebali pokušati koristiti eksplicitno čekanje u svojim projektima Selenium jer će Selenium pokušati smanjiti vrijeme čekanja što je više moguće. Na ovaj način nećete morati čekati određeni broj sekundi svaki put kada pokrenete svoje projekte Selenium. Izričito čekanje trebalo bi uštedjeti puno sekundi.

Za više informacija o selenijskim čekanjima posjetite službenu stranicu Dokumentacija o čekanju u knjižnici Selenium Python.

Najbolji emulatori igraće konzole za Linux
Ovaj će članak navesti popularni softver za emulaciju igraće konzole dostupan za Linux. Emulacija je sloj kompatibilnosti softvera koji oponaša hardve...
Najbolji Linux Distros za igre na sreću 2021. godine
Linux operativni sustav daleko je prevalio svoj izvorni, jednostavni izgled zasnovan na poslužitelju. Ovaj se OS posljednjih godina izuzetno poboljšao...
Kako snimiti i struji svoju igraću sesiju na Linuxu
U prošlosti se igranje igara smatralo samo hobijem, ali s vremenom je igračka industrija zabilježila ogroman rast u pogledu tehnologije i broja igrača...