Papaskinkite apie keletą laukimo tipų Selenium.
sobes.tech AI
Atsakymas iš AI
Selenium Webdriver naudojami įvairūs laukimo būdai, siekiant sinchronizuoti skripto veiksmus su tinklalapio įkėlimu:
-
Numatytasis laukimas (Implicit Wait): Nustato maksimalų laiką, kurį Selenium bandys rasti elementą puslapyje, prieš išmetant
NoSuchElementException. Tai taikoma visiems elementų paieškos veiksmams po nustatymo.from selenium import webdriver # Tvarkyklės objekto sukūrimas driver = webdriver.Chrome() # Numatytasis laukimas (10 sekundžių) driver.implicitly_wait(10) # Tolimesni elementų paieškos veiksmai naudosis šiuo laukimu # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Tvarkyklės uždarymas # driver.quit() -
Aiškus laukimas (Explicit Wait): Nustato maksimalų laiką, per kurį turi būti įvykdyta tam tikra sąlyga, prieš išmetant
TimeoutException. Taikoma konkrečiam elementui ar sąlygai. Tam reikalingasWebDriverWaitklasė ir vienas iš iš anksto apibrėžtų arba pritaikomų "laukimo sąlygų" (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 # Tvarkyklės objekto sukūrimas (čia nereikalingas numatytasis laukimas, # jei naudojamas aiškus laukimas konkretiems elementams) driver = webdriver.Chrome() # driver.get("http://example.com") # Aiškaus laukimo nustatymas (10 sekundžių) elemento buvimo patikrinimui try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Tolimesni veiksmai su elementu # element.click() except: # Išimtis apdorojimas, jei elementas nerandamas per 10 sekundžių print("Elementas nerastas per 10 sekundžių") # Aiškaus laukimo nustatymas (15 sekundžių) paspaudžiamumo patikrinimui try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Elementas nepasidarė paspaudžiamas per 15 sekundžių") # Tvarkyklės uždarymas # driver.quit() -
Lankstus laukimas (Fluent Wait): Panašus į aiškų laukimą, leidžia nustatyti maksimalų laukimo laiką ir sąlygą. Taip pat galima nurodyti patikrinimo intervalą (polling interval) ir išimtis, kurias reikia ignoruoti laukimo metu.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Tvarkyklės objekto sukūrimas driver = webdriver.Chrome() # driver.get("http://example.com") # Lankstaus laukimo nustatymas wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Tolimesni veiksmai su elementu # element.click() except: print("Lankstaus laukimo pagalba elementas nerastas") # Tvarkyklės uždarymas # driver.quit()
Palyginimas:
| Laukimo tipas | Taikymas | Sąlyga | Lankstumas | Naudojimas |
|---|---|---|---|---|
| Numatytasis | Globalus | Elemento paieška | Žemas (tik laikas) | Paprasta konfigūracija visiems elementams |
| Aiškus | Konkrečiai | Nustatyta sąlyga | Aukštas (laikas, sąlyga) | Konkretūs elementų būsenų laukimai |
| Lankstus | Konkrečiai | Nustatyta sąlyga | Aukščiausias (laikas, sąlyga, intervalas, ignoruoti išimtis) | Sudėtingi laukimo scenarijai su klaidų valdymu |