Rääkige Seleniumis mitmest ootusetüübist.
sobes.tech AI
Vastus AI-lt
Selenium Webdriver kasutab erinevaid ootusetappe, et sünkroniseerida skripti tegevusi ja veebilehe laadimist:
-
Kaudne ooteaeg (Implicit Wait): Määrab maksimaalse aja, mille jooksul Selenium püüab leida elementi lehel, enne kui viskab välja
NoSuchElementException. See kehtib kõigile elementide otsinguoperatsioonidele pärast selle seadistamist.from selenium import webdriver # Draiveri objekti loomine driver = webdriver.Chrome() # Kaudse ooteaja seadistamine (10 sekundit) driver.implicitly_wait(10) # Järgmised elementide otsinguoperatsioonid kasutavad seda ootamist # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Draiveri sulgemine # driver.quit() -
Selge ooteaeg (Explicit Wait): Määrab maksimaalse aja, mille jooksul peab teatud tingimus täidetud olema, enne kui viskab välja
TimeoutException. See kehtib konkreetse elemendi või tingimuse kohta. Selleks kasutatakseWebDriverWaitklassi ja ühte eelnevalt määratletud või kohandatud "ootustingimust" (expected conditions).from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Draiveri objekti loomine (siin ei ole vaja üldist ootamist, # kui kasutatakse konkreetsete elementide jaoks selget ootamist) driver = webdriver.Chrome() # driver.get("http://example.com") # Selge ootamise seadistamine (10 sekundit) elemendi olemasolu kontrollimiseks try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Järgmised toimingud elemendiga # element.click() except: # Erandite töötlemine, kui element ei leidu 10 sekundiga print("Elementi ei leitud 10 sekundiga") # Selge ootamise seadistamine (15 sekundit) klikkimise võimaluse kontrollimiseks try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Element ei saanud klikkitavaks 15 sekundiga") # Draiveri sulgemine # driver.quit() -
Paindlik ooteaeg (Fluent Wait): Sarnaselt selgele ootamisele, võimaldab määrata maksimaalse ootamise aja ja tingimuse. Lisaks saab määrata kontrolli intervalli (polling interval) ja loendi eranditest, mida ootamise ajal ignoreerida.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Draiveri objekti loomine driver = webdriver.Chrome() # driver.get("http://example.com") # Paindliku ootamise seadistamine wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Järgmised toimingud elemendiga # element.click() except: print("Paindliku ootamise abil elementi ei leitud") # Draiveri sulgemine # driver.quit()
Võrdlus:
| Ootamise tüüp | Rakendus | Tingimus | Paindlikkus | Kasutus |
|---|---|---|---|---|
| Nõrk | Globaalne | Elementide otsing | Madal (ainult aeg) | Lihtne seadistada kõigile elementidele |
| Selge | Konkreetne | Määratletud tingimus | Kõrge (aeg, tingimus) | Konkreetsete elementide olekute ootamine |
| Paindlik | Konkreetne | Määratletud tingimus | Kõrgeim (aeg, tingimus, intervall, erandite ignoreerimine) | Keerukad ootese scenarid koos vigade käsitlemisega |