Selen

Kako počakati, da se stran naloži s selenom

Kako počakati, da se stran naloži s selenom
Medtem ko spletna avtomatizacija ali strganje spleta s spletnim gonilnikom Selenium naletite na težave, kot je element, ki ga želite izbrati, ni na voljo ali gumb, ki ga želite pritisniti, ni pripravljen na klik in tako naprej.

Razlog za to je, da mora spletni gonilnik Selenium prenesti spletno stran in dokončati upodabljanje strani, preden lahko na njej kar koli naredite. V preteklosti je spletni strežnik ustvarjal vsebino spletnega mesta, brskalnik pa jo je le prenesel in upodobil. Danes imamo veliko spletnih strani z eno stranjo, ki delujejo nekoliko drugače. V spletnih straneh z eno stranjo (SPA) spletni strežnik streže samo kode čelne strani. Ko je v brskalniku upodobljena koda čelne strani, ta uporablja AJAX, da spletnemu strežniku zahteva podatke API. Ko vmesnik prejme podatke API, jih upodobi v brskalniku. Torej, čeprav je brskalnik končal s prenosom in upodabljanjem spletne strani, spletna stran še vedno ni pripravljena. Počakati morate, da prejme podatke API in jih tudi upodobi. Rešitev te težave je torej počakati, da bodo podatki na voljo, preden bomo karkoli storili s selenom.

V selenu obstajajo dve vrsti čakanja:
1) Implicitno čakanje
2) Izrecno čakanje

1) Implicitno čakanje: To je najlažje izvesti. Implicitno čakanje pove spletnemu gonilniku Selenium, naj počaka nekaj sekund, da bo DOM (objektni model dokumenta) pripravljen (spletna stran mora biti pripravljena).

2) Izrecno čakanje: To je nekoliko zapleteno kot implicitno čakanje. Z izrecnim čakanjem povejte spletnemu gonilniku Selenium, kaj naj čaka. Selen čaka, da bo izpolnjen ta posebni pogoj. Ko bo izpolnjen, bo spletni gonilnik Selenium pripravljen sprejeti druge ukaze. Običajno je izrecni čas čakanja spremenljiv. Odvisno od tega, kako hitro so pogoji izpolnjeni. V najslabšem primeru bo izrecno čakanje čakalo tako dolgo kot implicitno čakanje.

V tem članku vam bom pokazal, kako čakati (implicitno in eksplicitno), da se stran naloži s selenom. Torej, začnimo.

Pogoji:

Če želite preizkusiti ukaze in primere tega članka, jih morate imeti,

1) V računalniku nameščena distribucija Linuxa (po možnosti Ubuntu).
2) Python 3, nameščen v vašem računalniku.
3) PIP 3, nameščen v vašem računalniku.
4) Python virtualenv paket, nameščen v računalniku.
5) Spletni brskalniki Mozilla Firefox ali Google Chrome, nameščeni v vašem računalniku.
6) Morate vedeti, kako namestiti gonilnik Firefox Gecko ali spletni gonilnik Chrome.

Za izpolnjevanje zahtev 4, 5 in 6 preberite moj članek Uvod v selen s Pythonom 3 na Linuxhint.com.

V LinuxHintu lahko najdete veliko člankov o drugih temah.com. Ne pozabite jih preveriti, če potrebujete pomoč.

Nastavitev imenika projektov:

Če želite vse organizirati, ustvarite nov imenik projektov selen-počakaj / kot sledi:

$ mkdir -pv selenium-wait / gonilniki

Pomaknite se do selen-počakaj / imenik projekta, kot sledi:

$ cd selena-počakaj /

Ustvarite navidezno okolje Python v imeniku projekta, kot sledi:

$ virtualenv .venv

Aktivirajte navidezno okolje na naslednji način:

$ vir .venv / bin / aktiviraj

Namestite selen s pomočjo PIP3, kot sledi:

$ pip3 namesti selen

Prenesite in namestite ves potrebni spletni gonilnik v vozniki / imenik projekta. V članku sem razložil postopek prenosa in namestitve spletnih gonilnikov Uvod v selen s Pythonom 3. Če potrebujete pomoč, poiščite LinuxHint.com za ta članek.

Za predstavitev v tem članku bom uporabil spletni brskalnik Google Chrome. Torej, uporabil bom kromedriver binarni iz vozniki / imenik.

Delo z implicitnim čakanjem:

Če želite preizkusiti implicitno čakanje, ustvarite nov skript Python ex01.py v imenik vašega projekta in v to datoteko vnesite naslednje vrstice kod.

iz spletnega pogona za uvoz selena
iz selena.spletni pogon.običajni.tipke za uvoz ključev
options = spletni pogon.Možnosti Chrome ()
opcije.brezglava = Res
brskalnik = spletni voznik.Chrome (izvršljiva_pot = "./ drivers / chromedriver ", možnosti = možnosti)
brskalnik.implicitno_počakajte (10)
brskalnik.get ("https: // www.unixtimestamp.com / ")
timestamp = brskalnik.find_element_by_xpath ("// h3 [@ class = 'text-danger'] [1]")
print ('Trenutni časovni žig:% s'% (časovni žig.besedilo.split (") [0]))
brskalnik.zapri ()

Ko končate, shranite ex01.py Python skript.

Vrstici 1 in 2 uvozita vse zahtevane komponente selena.

Vrstica 4 ustvari predmet Chrome Options.

Vrstica 5 omogoča brezglavi način za spletni gonilnik Chrome.

Vrstica 7 ustvari objekt brskalnika Chrome z uporabo kromedriver binarni iz vozniki / imenik.

Vrstica 8 se uporablja za zaporedje Seleniju, da implicitno počaka 10 sekund z uporabo implicitno_cait () brskalniška metoda.

Vrstica 10 naloži www.unixtimestamp.com v brskalniku.

Vrstica 12 poišče element časovnega žiga z izbirnikom XPath // h3 [@ class = 'besedilo-nevarnost'] [1] in ga shrani v časovni žig spremenljivka.

Izbirnik XPath sem dobil v Chromovem orodju za razvijalce. Kot vidite, je časovni žig v prvem h3 element z imenom razreda besedilo-nevarnost. Obstajata 2 h3 elementi z razredom besedilo-nevarnost.

Vrstica 13 natisne samo časovni žig iz elementa, ki sem ga izbral s pomočjo izbirnika XPath in shranil v časovni žig spremenljivka.

Vrstica 14 zapre brskalnik.

Ko končate, zaženite skript Python ex01.py kot sledi:

$ python3 ex01.py

Kot lahko vidite, je trenutni časovni žig izvlečen iz unixtimestamp.com in natisnjeno na konzoli.

Delo z eksplicitnim čakanjem:

Če želite preizkusiti eksplicitno čakanje, ustvarite nov skript Python ex02.py v imenik vašega projekta in v to datoteko vnesite naslednje vrstice kod.

iz spletnega pogona za uvoz selena
iz selena.spletni pogon.običajni.tipke za uvoz ključev
iz selena.spletni pogon.običajni.z uvozom Avtor
iz selena.spletni pogon.podporo.ui import WebDriverWait
iz selena.spletni pogon.podpora uvozu pričakovani_pogoji
options = spletni pogon.Možnosti Chrome ()
opcije.brezglava = Res
brskalnik = spletni voznik.Chrome (izvršljiva_pot = "./ drivers / chromedriver ", možnosti = možnosti)
brskalnik.get ("https: // www.unixtimestamp.com / ")
poskusite:
timestamp = WebDriverWait (brskalnik, 10).dokler (
pričakovani_pogoji.prisotnost_elementa_locirano ((avtor.XPATH, "
// h3 [@ class = 'text-danger'] [1] "))
)
print ('Trenutni časovni žig:% s'% (časovni žig.besedilo.split (") [0]))
končno:
brskalnik.zapri ()

Ko končate, shranite ex02.py Python skript.

Vrstica 1-5 uvozi vse zahtevane komponente iz knjižnice Selenium.

V vrstici 7 se ustvari objekt Chrome Options.

Vrstica 8 omogoča brezglavi način za spletni gonilnik Chrome.

Vrstica 10 ustvari objekt brskalnika Chrome z uporabo kromedriver binarni iz vozniki / imenik.

Vrstica 12 naloži www.unixtimestamp.com v brskalniku.

Izrecno čakanje je izvedeno v bloku poskusi končno (od vrstice 14-20)

Vrstica 15-17 uporablja ustvarja WebDriverWait () predmet. Prvi argument WebDriverWait () je objekt brskalnika, drugi argument pa je največji dovoljeni čas (najslabši scenarij) za izpolnitev pogoja, ki je v tem primeru 10 sekund.

V dokler () blok, pričakovani_pogoji.prisotnost_elementa_locirano () metoda se uporablja za zagotovitev, da je element prisoten, preden poskusite izbrati element. Tukaj, Avtor.XPATH se uporablja za sporočanje prisotnost_elementa_locirano () metoda, da smo za izbiro elementa uporabili izbirnik XPath. Izbirnik XPath je // h3 [@ class = 'besedilo-nevarnost'] [1].

Ko je element najden, se shrani v datoteko časovni žig spremenljivka.

Vrstica 18 natisne samo časovni žig iz izbranega elementa.

Na koncu vrstica 19-20 zapre brskalnik.

Ko končate, zaženite ex02.py Python skript, kot sledi:

$ python3 ex02.py

Kot lahko vidite, je trenutni časovni žig iz unixtimestamp.com je natisnjen na konzoli.

Izbira elementov v eksplicitnem čakanju:

V prejšnjem poglavju sem uporabil Avtor.XPATH za izbiro elementa s pomočjo izbirnika XPath. Elemente lahko izberete tudi z ID-jem, imenom oznake, imenom razreda CSS, izbirnikom CSS itd.

Podprte izbirne metode so navedene spodaj:

Avtor.XPATH - Izbere element / elemente s pomočjo izbirnika XPath.

Avtor.CLASS_NAME - Izbere element / elemente z uporabo imena razreda CSS.

Avtor.CSS_SELECTOR - Izbere element / elemente s pomočjo izbirnika CSS.

Avtor.ID - Izbere element po ID-ju

Avtor.NAME - Izbere element / elemente po imenu.

Avtor.TAG_NAME - Izbere element / elemente po imenu oznake HTML.

Avtor.LINK_TEXT - Izbere element / elemente z besedilom povezave a (sidro) HTML oznaka.

Avtor.PARTIAL_LINK_TEXT - Izbere element / elemente z delnim besedilom povezave a (sidro) oznaka HTML.

Za več informacij o njih obiščite stran z dokumentacijo API-ja Python Selenium.

Pričakovani pogoji v eksplicitnih čakanjih:

V prejšnjem eksplicitnem primeru čakanja sem uporabil prisotnost_elementa_locirano () metoda pričakovani_pogoji kot izrecni pogoj čakanja, da se prepričam, da element, ki sem ga iskal, obstaja, preden ga izberem.

Obstajajo tudi drugi pričakovani_pogoji lahko uporabite kot izrecni pogoj čakanja. Nekateri med njimi so:

naslov_is (naslov) - preveri, ali je naslov strani naslov.

naslov_ vsebuje (delni_naslov) - preveri, ali naslov strani vsebuje del naslova delni_naslov.

visibility_of (element) - preveri, ali je element je viden na strani, ki ima element širino in višino večjo od 0.

vidnost_elementa_locirano (lokator) -

prisotnost_elementa_locirano (lokator) - Prepričajte se, da je element, ki se nahaja (z lokator) je prisoten na strani. The lokator je nekaj (Avtor, izbirnik), kot sem pokazal v izrecnem primeru čakanja.

prisotnost_ vseh_elementov_lociranih () - Prepriča se, da se vsi elementi ujemajo z lokator je prisoten na strani. The lokator je (Avtor, izbirnik) tuple.

text_to_be_present_in_element (lokator, besedilo) - Preveri, ali je besedilo je prisoten v elementu, ki ga nahaja lokator. The lokator je (Avtor, izbirnik) tuple.

element_to_be_clickable (lokator) - Preveri, ali je element, ki se nahaja v lokator je viden in klikljiv. The lokator je (Avtor, izbirnik) tuple.

element_to_be_selected (lokator) - Preveri, ali je element, ki se nahaja v lokator je izbrano. The lokator je (Avtor, izbirnik) tuple.

alert_is_present () - pričakujte, da bo na strani prisotno pogovorno okno.

Obstaja še veliko več pričakovani_pogoji na voljo za uporabo. Za več informacij o njih obiščite stran z dokumentacijo API-ja Python Selenium.

Zaključek:

V tem članku sem razpravljal o implicitnih in eksplicitnih čakanjih selena. Pokazal sem vam tudi, kako delati z implicitnim in eksplicitnim čakanjem. Vedno poskusite uporabiti eksplicitno čakanje v svojih projektih Selenium, saj bo Selenium skušal čim bolj skrajšati čas čakanja. Tako vam ne bo treba čakati točno določenega števila sekund vsakič, ko zaženete svoje projekte Selenium. Izrecno čakanje bi moralo prihraniti veliko sekund.

Za več informacij o čakanju Selenium obiščite uradno stran Dokumentacija čakajoče knjižnice Selenium Python.

Kako obrniti smer drsenja miške in sledilne ploščice v sistemu Windows 10
Miška in Sledilna ploščicaRačunalništvo ni samo enostavno, ampak bolj učinkovito in manj zamudno. Življenja brez teh naprav si ne moremo predstavljati...
Kako spremeniti miškin kazalec in velikost, barvo in shemo kazalca v sistemu Windows 10
Kazalec miške in kazalec v operacijskem sistemu Windows 10 sta zelo pomembna vidika operacijskega sistema. To lahko rečemo tudi za druge operacijske s...
Brezplačni in odprtokodni igralni mehanizmi za razvoj iger Linux
Ta članek bo zajemal seznam brezplačnih in odprtokodnih igralnih mehanizmov, ki jih je mogoče uporabiti za razvoj 2D in 3D iger v Linuxu. Obstaja veli...