Kuinka odottaa sivun lataamista seleenillä

How Wait Page Load With Selenium

Vaikka verkkoautomaatio tai web -kaavinta Selenium -verkko -ohjaimella voi kohdata ongelmia, kuten haluamasi elementti ei ole käytettävissä tai painettava painike ei ole valmis napsautettavaksi ja niin edelleen.

Tämä johtuu siitä, että Selenium -verkko -ohjaimen on ladattava verkkosivu ja lopetettava sivun hahmontaminen ennen kuin voit tehdä mitään sillä. Aiemmin verkkopalvelin loi verkkosivuston sisällön, ja selain vain ladasi sen ja renderoi sen. Nykyään meillä on monia yhden sivun verkkosovelluksia, jotka toimivat hieman eri tavalla. Yhden sivun verkkosovelluksissa (SPA) verkkopalvelin palvelee vain käyttöliittymäkoodeja. Kun käyttöliittymäkoodi on hahmoteltu selaimessa, käyttöliittymäkoodi pyytää AJAX: ää pyytämään API -tietoja verkkopalvelimelle. Kun käyttöliittymä vastaanottaa API -tiedot, se hahmottaa ne selaimessa. Joten vaikka selain on lopettanut verkkosivun lataamisen ja hahmontamisen, verkkosivu ei ole vielä valmis. Sinun on odotettava, että se vastaanottaa sovellusliittymän tiedot ja renderöi ne myös. Ratkaisu tähän ongelmaan on siis odottaa tietojen saatavuutta ennen kuin teemme mitään Seleniumilla.



Seleniumissa on kahdenlaisia ​​odotuksia:
1) Epäsuora odotus
2) Selkeä odotus



1) Epäsuora odotus: Tämä on helpoin toteuttaa. Epäsuora odotus kehottaa Selenium -verkko -ohjainta odottamaan useita sekunteja, kunnes DOM (asiakirjaobjektimalli) on valmis (verkkosivu on valmis).



2) Selkeä odotus: Tämä on hieman monimutkaisempaa kuin epäsuora odotus. Selkeässä odottamisessa kerrot Selenium -verkko -ohjaimelle, mitä odottaa. Selenium odottaa, että kyseinen edellytys täyttyy. Kun se on täytetty, Selenium -verkko -ohjain on valmis ottamaan muita komentoja. Yleensä tarkka odotusaika vaihtelee. Se riippuu siitä, kuinka nopeasti ehdot täyttyvät. Pahimmassa tapauksessa eksplisiittinen odotus odottaa yhtä kauan kuin implisiittinen odotus.

Tässä artikkelissa aion näyttää sinulle, kuinka odottaa (implisiittistä ja eksplisiittistä), että sivu latautuu seleenillä. Aloitetaan siis.

Edellytykset:

Jotta voit kokeilla tämän artikkelin komentoja ja esimerkkejä, sinulla on oltava



1) Tietokoneeseesi asennettu Linux -jakelu (mieluiten Ubuntu).
2) Python 3 asennettu tietokoneellesi.
3) PIP 3 asennettuna tietokoneellesi.
4) Python virtualenv tietokoneeseen asennettu paketti.
5) Tietokoneeseesi asennetut Mozilla Firefox- tai Google Chrome -selaimet.
6) Pitää osata asentaa Firefox Gecko -ohjain tai Chrome -verkko -ohjain.

Jos haluat täyttää vaatimukset 4, 5 ja 6, lue artikkelini Johdatus seleeniin Python 3: lla osoitteessa Linuxhint.com.

Löydät monia artikkeleita muista aiheista LinuxHint.com . Muista tarkistaa ne, jos tarvitset apua.

Projektihakemiston määrittäminen:

Jos haluat pitää kaiken järjestyksessä, luo uusi projektihakemisto seleeni-odota/ seuraavasti:

$mkdir -pvseleeni-odota/Kuljettajat

Siirry kohtaan seleeni-odota/ projektihakemisto seuraavasti:

$CDseleeni-odota/

Luo Python -virtuaalinen ympäristö projektihakemistoon seuraavasti:

$virtualenv .venv

Aktivoi virtuaalinen ympäristö seuraavasti:

$lähde.venv/olen/aktivoida

Asenna seleeni PIP3: n avulla seuraavasti:

$ pip3 asenna seleeni

Lataa ja asenna kaikki tarvittavat web -ohjaimet Kuljettajat/ hankkeen hakemisto. Olen selittänyt artikkelissani web -ohjainten lataamisen ja asentamisen Johdatus seleeniin Python 3: lla . Jos tarvitset apua, etsi LinuxHint.com tuota artikkelia varten.

Käytän Google Chrome -selainta tämän artikkelin esittelyyn. Aion siis käyttää kromiohjain binaarinen Kuljettajat/ hakemistoon.

Jos haluat kokeilla implisiittistä odottamista, luo uusi Python -komentosarja ex01.py projektihakemistoosi ja kirjoita seuraavat koodirivit kyseiseen tiedostoon.

alkaenseleenituontiWeb -ajuri
alkaenseleeni.Web -ajuri.yleinen.näppäimiä tuontiAvaimet
vaihtoehtoja=Web -ajuri.ChromeOptions()
vaihtoehtoja.päätön = Totta
selaimen=Web -ajuri.Kromi(suoritettava_polku='./drivers/chromedriver',vaihtoehtoja=vaihtoehtoja)
selaimen.implisiittisesti_ odota(10)
selaimen.saada('https://www.unixtimestamp.com/')
aikaleima=selaimen.find_element_by_xpath('// h3 [@] [1]')
Tulosta('Nykyinen aikaleima: %s'%(aikaleima.teksti.jakaa('')[0]))
selaimen.kiinni()

Kun olet valmis, tallenna ex01.py Python -käsikirjoitus.

Rivit 1 ja 2 tuovat kaikki tarvittavat seleenikomponentit.

Rivi 4 luo Chrome -asetukset -objektin.

Linja 5 ottaa käyttöön päätön tilan Chrome -verkko -ohjaimelle.

Rivi 7 luo Chrome -selainobjektin käyttämällä kromiohjain binaarinen Kuljettajat/ hakemistoon.

Riviä 8 käytetään kertomaan seleenille odottamaan epäsuorasti 10 sekuntia käyttämällä implicitly_wait () selaimen menetelmä.

Rivi 10 lataa www.unixtimestamp.com selaimeen.

Rivi 12 löytää aikaleimaelementin XPath -valitsimella // h3 [@class = ’text-risks’] [1] ja tallentaa sen aikaleima muuttuja.

Sain XPath -valitsimen Chrome -kehittäjätyökalusta. Kuten näette, aikaleima on ensimmäisessä h3 elementti luokan nimellä teksti-vaara . Niitä on 2 h3 elementtejä luokan kanssa teksti-vaara .

Rivi 13 tulostaa vain aikaleiman elementistä, jonka olen valinnut XPath -valitsimella ja tallentanut aikaleima muuttuja.

Rivi 14 sulkee selaimen.

Kun olet valmis, suorita Python -komentosarja ex01.py seuraavasti:

$ python3 ex01.py

Kuten näet, nykyinen aikaleima puretaan osoitteesta unixtimestamp.com ja tulostetaan konsoliin.

Työskentely Explicit Waitin kanssa:

Luo uusi Python -komentosarja kokeillaksesi nimenomaista odottamista ex02.py projektihakemistoosi ja kirjoita seuraavat koodirivit kyseiseen tiedostoon.

alkaenseleenituontiWeb -ajuri
alkaenseleeni.Web -ajuri.yleinen.näppäimiä tuontiAvaimet
alkaenseleeni.Web -ajuri.yleinen.käyttäjältä tuontiLähettäjä
alkaenseleeni.Web -ajuri.tuki.sipuli tuontiWebDriverOdota
alkaenseleeni.Web -ajuri.tuki tuontiodotetut_ehdot
vaihtoehtoja=Web -ajuri.ChromeOptions()
vaihtoehtoja.päätön = Totta
selaimen=Web -ajuri.Kromi(suoritettava_polku='./drivers/chromedriver',vaihtoehtoja=vaihtoehtoja)
selaimen.saada('https://www.unixtimestamp.com/')
yrittää:
aikaleima=WebDriverOdota(selaimen, 10).siihen asti kun(
odotetut_ehdot.läsnäolo_elementin_sijainti((Lähettäjä.XPATH, ''
// h3 [@] [1] '
))
)
Tulosta('Nykyinen aikaleima: %s'%(aikaleima.teksti.jakaa('')[0]))
vihdoin:
selaimen.kiinni()

Kun olet valmis, tallenna ex02.py Python -käsikirjoitus.

Rivi 1-5 tuo kaikki tarvittavat komponentit seleenikirjastosta.

Rivi 7 luo Chrome -asetukset -objektin.

Linja 8 ottaa käyttöön päätön tilan Chrome -verkko -ohjaimelle.

Rivi 10 luo Chrome -selainobjektin käyttämällä kromiohjain binaarinen Kuljettajat/ hakemistoon.

Rivi 12 lataa www.unixtimestamp.com selaimeen.

Ehdoton odotus toteutetaan viimeisen kokeilun lohkossa (riviltä 14-20)

Rivi 15-17 käyttää luomista WebDriverWait () esine. Ensimmäinen argumentti WebDriverWait () on selainobjekti, ja toinen argumentti on ehdon täyttämisen suurin sallittu aika (pahin tapaus), joka on tässä tapauksessa 10 sekuntia.

Kohteessa siihen asti kun() lohko, odotetut_ehdot.esityksen_elementti_sijainti () -menetelmää käytetään elementin läsnäolon varmistamiseen ennen elementin valitsemista. Tässä, Kirjailija: XPATH käytetään kertomaan läsnäolo_elementtien_sijainti () menetelmä, jonka avulla olemme valinneet elementin XPath -valitsimella. XPath -valitsin on // h3 [@class = ’text-risks’] [1] .

Kun elementti on löydetty, se tallennetaan aikaleima muuttuja.

Rivi 18 tulostaa vain valitun elementin aikaleiman.

Lopuksi rivi 19-20 sulkee selaimen.

Kun olet valmis, suorita ex02.py Python -skripti seuraavasti:

$ python3 ex02.py

Kuten näette, nykyinen aikaleima osoitteesta unixtimestamp.com tulostetaan konsoliin.

Elementtien valitseminen nimenomaisissa odotuksissa:

Aikaisemmassa osassa olen käyttänyt Kirjailija: XPATH elementin valitsemiseksi XPath -valitsimella. Voit myös valita elementtejä käyttämällä tunnusta, tunnisteen nimeä, CSS -luokan nimeä, CSS -valitsinta jne.

Tuetut valintamenetelmät on esitetty alla:

Kirjailija: XPATH - Valitsee elementin/elementit XPath -valitsimella.

Tekijä: CLASS_NAME - Valitsee elementin/elementit CSS -luokan nimen avulla.

Tekijä.CSS_SELECTOR - Valitsee elementin/elementit CSS -valitsimella.

By.ID - Valitsee elementin tunnuksen mukaan

Nimeltä - Valitsee elementin/elementit nimen perusteella.

Tekijä: TAG_NAME - Valitsee elementin/elementit HTML -tagin nimen perusteella.

Tekijä :LINK_TEXT - Valitsee elementin/elementit linkin tekstin perusteella kohteeseen (ankkuri) HTML -tagi.

Tekijä.PARTIAL_LINK_TEXT - Valitsee elementin/elementit osittaisen linkkitekstin perusteella kohteeseen (ankkuri) HTML -tagi.

Lisätietoja näistä on osoitteessa Python Selenium -sovellusliittymän dokumentaatiosivu .

Odotetut olosuhteet nimenomaisissa odotuksissa:

Aikaisemmassa nimenomaisessa odotusesimerkissä olen käyttänyt läsnäolo_elementtien_sijainti () menetelmä odotetut_ehdot ennen kuin valitset nimenomaisen odotusedellytyksen sen varmistamiseksi, että etsimäni elementti on olemassa.

On muitakin odotetut_ehdot voit käyttää nimenomaisena odotusehtona. Jotkut niistä ovat:

title_is (otsikko) - tarkistaa, onko sivun otsikko otsikko .

title_contains (osittainen_nimi) - tarkistaa, sisältääkö sivun otsikko osan otsikosta osittainen_nimi .

visibility_of (elementti) - tarkistaa, onko elementti näkyy sivulla, joka on elementin leveys ja korkeus yli 0.

visibility_of_element_located (paikannin) -

läsnäolo_elementtien_sijainti (paikannin) - Varmista, että elementti sijaitsee ( paikannin ) on sivulla. The paikannin on joukko (Valitsija), kuten olen osoittanut nimenomaisessa odotusesimerkissä.

läsnäolo_kaikkien_elementtien_sijainti () - Varmista, että kaikki elementit vastaavat paikannin on sivulla. The paikannin on (Valitsija) tuple.

text_to_be_present_in_element (paikannin, teksti) - Tarkistaa onko teksti on läsnä elementissä, joka sijaitsee paikannin . The paikannin on (Valitsija) tuple.

element_to_be_clickable (paikannin) - Tarkistaa, onko elementti paikannin on näkyvissä ja napsautettavissa. The paikannin on (Valitsija) tuple.

element_to_be_selected (paikannin) - Tarkistaa, onko elementti paikannin on valittu. The paikannin on (Valitsija) tuple.

alert_is_present () - odota, että sivulla on hälytysikkuna.

On monia muitakin odotetut_ehdot käytettävissäsi. Lisätietoja näistä on osoitteessa Python Selenium -sovellusliittymän dokumentaatiosivu .

Johtopäätös:

Tässä artikkelissa olen keskustellut Seleniumin implisiittisistä ja nimenomaisista odotuksista. Olen myös näyttänyt sinulle, kuinka työskennellä epäsuoran ja eksplisiittisen odottamisen kanssa. Sinun tulisi aina yrittää käyttää nimenomaista odotusta seleeni -projekteissasi, koska Selenium yrittää lyhentää odotusaikaa mahdollisimman paljon. Näin sinun ei tarvitse odottaa tiettyä sekuntia joka kerta, kun suoritat Selenium -projekteja. Selvän odottamisen pitäisi säästää paljon sekunteja.

Lisätietoja seleeni -odotuksista on osoitteessa virallinen Selenium Python -kirjasto odottaa dokumentaatiosivua .