Selén

Ako čakať na načítanie stránky selénom

Ako čakať na načítanie stránky selénom
Pri automatizácii webu alebo škrabaní webu pomocou webového ovládača Selenium sa môžete stretnúť s problémami, ako je prvok, ktorý chcete vybrať, nie je k dispozícii alebo tlačidlo, ktoré chcete stlačiť, nie je pripravené na kliknutie atď.

Dôvod, prečo sa to stane, je ten, že webový ovládač selénu musí stiahnuť webovú stránku a dokončiť vykreslenie stránky skôr, ako na nej budete môcť čokoľvek urobiť. V minulosti webový server generoval obsah webovej stránky a prehliadač ju iba stiahol a vykreslil. V dnešnej dobe máme veľa jednostránkových webových aplikácií, ktoré fungujú trochu inak. V jednostránkových webových aplikáciách (SPA) poskytuje webový server iba kódy frontendu. Po vykreslení kódu rozhrania v prehliadači použije kód rozhrania AJAX na vyžiadanie údajov API pre webový server. Hneď ako klientske rozhranie prijme údaje API, vykreslí ich v prehliadači. Takže aj keď prehliadač dokončil sťahovanie a vykreslenie webovej stránky, webová stránka stále nie je pripravená. Musíte počkať, kým prijme údaje API a tiež ich vykreslí. Riešením tohto problému je teda čakať na dostupnosť údajov, až potom urobíme čokoľvek so selénom.

V seléne existujú 2 typy čakania:
1) Implicitné čakanie
2) Explicitné čakanie

1) Implicitné čakanie: Toto je najjednoduchšie implementovať. Implicitné čakanie povie webovému ovládaču selénu, aby počkal niekoľko sekúnd, kým bude pripravený DOM (dokumentový objektový model) (pripravená webová stránka).

2) Explicitné čakanie: Je to trochu zložitejšie ako implicitné čakanie. Pri explicitnom čakaní poviete webovému ovládaču Selenium, na čo má čakať. Selén čaká na splnenie tejto konkrétnej podmienky. Po jeho splnení bude webový ovládač selénu pripravený prijímať ďalšie príkazy. Explicitná čakacia doba je zvyčajne variabilná. Závisí to od toho, ako rýchlo sú podmienky splnené. V najhoršom scenári bude explicitné čakanie čakať rovnako dlho ako implicitné čakanie.

V tomto článku vám ukážem, ako čakať (implicitne a explicitne) na načítanie stránky so selénom. Takže poďme na to.

Predpoklady:

Ak chcete vyskúšať príkazy a príklady tohto článku, musíte mať,

1) Vo vašom počítači je nainštalovaná distribúcia Linuxu (najlepšie Ubuntu).
2) Vo vašom počítači je nainštalovaný Python 3.
3) Vo vašom počítači je nainštalovaný program PIP 3.
4) Python virtualenv balík nainštalovaný vo vašom počítači.
5) Vo vašom počítači sú nainštalované webové prehľadávače Mozilla Firefox alebo Google Chrome.
6) Musíte vedieť, ako nainštalovať ovládač Firefox Gecko alebo webový ovládač Chrome.

Pre splnenie požiadaviek 4, 5 a 6 si prečítajte môj článok Úvod do selénu v Pythone 3 v Linuxhint.com.

Mnoho článkov o ďalších témach nájdete na stránkach LinuxHint.com. Ak potrebujete pomoc, nezabudnite ich skontrolovať.

Nastavenie adresára projektu:

Ak chcete mať všetko usporiadané, vytvorte nový adresár projektu selén čakať / nasledovne:

$ mkdir -pv selenium-wait / ovládače

Prejdite na ikonu selén čakať / adresár projektu nasledovne:

$ cd selén čakať /

Vytvorte virtuálne prostredie Pythonu v adresári projektu takto:

$ virtualenv .venv

Aktivujte virtuálne prostredie nasledovne:

$ zdroj .venv / bin / aktivovať

Nainštalujte selén pomocou PIP3 nasledovne:

$ pip3 nainštalujte selén

Stiahnite a nainštalujte všetky požadované webové ovládače v vodiči / adresár projektu. V mojom článku som vysvetlil proces sťahovania a inštalácie webových ovládačov Úvod do selénu v Pythone 3. Ak potrebujete pomoc, hľadajte ďalej LinuxHint.com pre ten clanok.

Na demonštráciu v tomto článku budem používať webový prehliadač Google Chrome. Takže budem používať chromedriver binárne z vodiči / adresár.

Práca s implicitným čakaním:

Ak chcete experimentovať s implicitným čakaním, vytvorte nový skript v jazyku Python ex01.py do adresára projektu a zadajte nasledujúce riadky kódov do tohto súboru.

z webového ovládača na selén na import
zo selénu.webdriver.bežné.kľúče na import kľúčov
options = webdriver.ChromeOptions ()
možnosti.bezhlavý = Pravda
prehliadač = webdriver.Chrome (executable_path = "./ drivers / chromedriver ", možnosti = možnosti)
prehliadač.implicitne_wait (10)
prehliadač.get ("https: // www.unixtimestamp.com / ")
timestamp = prehliadač.find_element_by_xpath ("// h3 [@ class = 'text-danger'] [1]")
print ('Aktuálna časová známka:% s'% (časová známka.text.split (") [0]))
prehliadač.Zavrieť()

Po dokončení uložte súbor ex01.py Skript v jazyku Python.

Riadok 1 a 2 importuje všetky požadované komponenty selénu.

Riadok 4 vytvára objekt Možnosti prehliadača Chrome.

Riadok 5 umožňuje bezhlavý režim pre webový ovládač Chrome.

Riadok 7 vytvára objekt prehliadača Chrome pomocou chromedriver binárne z vodiči / adresár.

Riadok 8 slúži na informovanie selénu, aby implicitne čakal 10 sekúnd pomocou implicitne_wait () metóda prehliadača.

Riadok 10 načíta www.unixtimestamp.sk v prehliadači.

Riadok 12 vyhľadáva prvok časovej pečiatky pomocou selektora XPath // h3 [@ class = 'text-danger'] [1] a uloží ho do časová značka premenná.

Selektor XPath som dostal z nástroja Chrome Developer Tool. Ako vidíte, časová značka je v prvej h3 prvok s názvom triedy textové nebezpečenstvo. K dispozícii sú 2 h3 prvky s triedou textové nebezpečenstvo.

Riadok 13 vytlačí iba časovú značku z prvku, ktorý som vybral pomocou selektora XPath a uložil do priečinka časová značka premenná.

Riadok 14 zavrie prehliadač.

Po dokončení spustite skript v jazyku Python ex01.py nasledovne:

$ python3 ex01.py

Ako vidíte, aktuálna časová pečiatka sa extrahuje z unixtimestamp.com a vytlačené na konzole.

Práca s Explicit Wait:

Ak chcete experimentovať s explicitným čakaním, vytvorte nový skript v jazyku Python ex02.py do adresára projektu a zadajte nasledujúce riadky kódov do tohto súboru.

z webového ovládača na selén na import
zo selénu.webdriver.bežné.kľúče na import kľúčov
zo selénu.webdriver.bežné.importom do
zo selénu.webdriver.podpora.ui import WebDriverWait
zo selénu.webdriver.podpora importu očakáva_podmienky
options = webdriver.ChromeOptions ()
možnosti.bezhlavý = Pravda
prehliadač = webdriver.Chrome (executable_path = "./ drivers / chromedriver ", možnosti = možnosti)
prehliadač.get ("https: // www.unixtimestamp.com / ")
skúste:
timestamp = WebDriverWait (prehliadač, 10).do (
očakávané_podmienky.prítomnosť_prvku_lokácie ((podľa.XPATH, “
// h3 [@ class = 'text-danger'] [1] "))
)
print ('Aktuálna časová známka:% s'% (časová známka.text.split (") [0]))
nakoniec:
prehliadač.Zavrieť()

Po dokončení uložte súbor ex02.py Skript v jazyku Python.

Riadok 1-5 importuje všetky požadované komponenty z knižnice selénu.

Riadok 7 vytvára objekt Možnosti prehliadača Chrome.

Riadok 8 umožňuje bezhlavý režim pre webový ovládač Chrome.

Riadok 10 vytvorí objekt prehliadača Chrome pomocou chromedriver binárne z vodiči / adresár.

Riadok 12 načíta www.unixtimestamp.sk v prehliadači.

Explicitné čakanie je implementované v bloku try-konečne (od riadku 14-20)

Riadok 15-17 používa vytvára WebDriverWait () objekt. Prvý argument z WebDriverWait () je objekt prehliadača a druhým argumentom je maximálny povolený čas (najhorší scenár) na splnenie podmienky, ktorý je v tomto prípade 10 sekúnd.

V do () blokovať, očakávané_podmienky.prítomnosť_prvku_miestnené () metóda sa používa na zabezpečenie prítomnosti prvku pred pokusom o výber prvku. Tu, Autor:.XPATH sa používa na označenie prítomnosť_prvku_miestnené () metóda, ktorú sme na výber prvku použili selektor XPath. Selektor XPath je // h3 [@ class = 'text-danger'] [1].

Akonáhle je prvok nájdený, je uložený v časová značka premenná.

Na riadku 18 sa vytlačí iba časová značka z vybraného prvku.

Nakoniec riadok 19-20 zavrie prehliadač.

Po dokončení spustite príkaz ex02.py Skript v jazyku Python takto:

$ python3 ex02.py

Ako vidíte, aktuálna časová pečiatka od unixtimestamp.com je vytlačený na konzole.

Výber prvkov v explicitných čakaniach:

V predchádzajúcej časti som použil Autor:.XPATH na výber prvku pomocou selektora XPath. Môžete tiež vybrať prvky pomocou ID, názvu značky, názvu triedy CSS, selektora CSS atď.

Podporované metódy výberu sú uvedené nižšie:

Autor:.XPATH - Vyberá prvok / prvky pomocou selektora XPath.

Autor:.TRIEDA_NAME - Vyberá prvky pomocou názvu triedy CSS.

Autor:.CSS_SELECTOR - Vyberá prvky pomocou selektora CSS.

Autor:.ID - Vyberie prvok podľa ID

Autor:.NÁZOV - Vyberá prvok / prvky podľa názvu.

Autor:.TAG_NAME - Vyberá prvky podľa názvu značky HTML.

Autor:.LINK_TEXT - Vyberie prvok / prvky podľa textu odkazu z a (kotva) značka HTML.

Autor:.PARTIAL_LINK_TEXT - Vyberie prvok / prvky podľa čiastočného textu odkazu z a (kotva) značka HTML.

Viac informácií o nich nájdete na stránke dokumentácie rozhrania API Python Selenium.

Očakávané podmienky pri výslovnom čakaní:

V predchádzajúcom explicitnom príklade čakania som použil znak prítomnosť_prvku_miestnené () metóda očakávané_podmienky ako podmienka výslovného čakania, aby som sa ubezpečil, že hľadaný prvok existuje pred jeho výberom.

Existujú aj iné očakávané_podmienky môžete použiť ako výslovnú podmienku čakania. Niektoré z nich sú:

title_is (názov) - skontroluje, či je názov stránky titul.

title_contains (čiastočný_titul) - skontroluje, či nadpis stránky obsahuje časť nadpisu čiastočný_názov.

visibility_of (element) - skontroluje, či element je viditeľný na stránke, ktorá je prvkom, ktorého šírka a výška je väčšia ako 0.

visibility_of_element_located (lokátor) -

prítomnosť_prvku_lokalizovaný (lokátor) - Uistite sa, že sa prvok nachádza (pri lokátor) sa nachádza na stránke. The lokátor je n-tica z (Podľa, selektor), ako som ukázal v explicitnom príklade čakania.

prítomnosť_všetkých_prvky_lokácie () - Zaisťuje, aby sa všetky prvky zhodovali s lokátor je na stránke. The lokátor je a (Podľa, selektor) násobný.

text_to_be_present_in_element (lokátor, text) - Kontroluje, či text je prítomný v prvku umiestnenom pri lokátor. The lokátor je a (Podľa, selektor) násobný.

element_to_be_clickable (lokátor) - Skontroluje, či je prvok umiestnený pri lokátor je viditeľný a dá sa na neho kliknúť. The lokátor je a (Podľa, selektor) násobný.

element_to_be_selected (lokátor) - Skontroluje, či je prvok umiestnený pri lokátor je vybratá. The lokátor je a (Podľa, selektor) násobný.

alert_is_present () - Očakávajte, že na stránke bude výstražný dialóg.

Je ich oveľa viac očakávané_podmienky k dispozícii na použitie. Viac informácií o nich nájdete na stránke dokumentácie rozhrania API Python Selenium.

Záver:

V tomto článku som diskutoval o implicitných a explicitných čakaniach selénu. Tiež som vám ukázal, ako pracovať s implicitným a explicitným čakaním. Vo svojich selénových projektoch by ste sa mali vždy pokúsiť použiť explicitné čakanie, pretože selén sa bude snažiť čo najviac skrátiť čakaciu dobu. Týmto spôsobom nebudete musieť čakať na konkrétny počet sekúnd pri každom spustení svojich projektov selénu. Výslovné čakanie by malo ušetriť veľa sekúnd.

Viac informácií o čakaní na selén nájdete na oficiálnej stránke dokumentácie o čakaní na selén Python Library.

Hry Najlepšie linuxové distribúcie pre hry v roku 2021
Najlepšie linuxové distribúcie pre hry v roku 2021
Operačný systém Linux prešiel dlhou cestou od svojho originálneho, jednoduchého serverového vzhľadu. Tento OS sa za posledné roky nesmierne vylepšil a...
Hry Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
V minulosti sa hranie hier považovalo iba za hobby, ale časom došlo v hernom priemysle k obrovskému nárastu z hľadiska technológie i počtu hráčov. Her...
Hry Najlepšie hry na hranie s ručným sledovaním
Najlepšie hry na hranie s ručným sledovaním
Oculus Quest nedávno predstavil skvelú myšlienku ručného sledovania bez ovládačov. Vďaka stále sa zvyšujúcemu počtu hier a aktivít, ktoré vykonávajú p...