Pastāstiet par dažādiem gaidīšanas veidiem Selenium.
sobes.tech AI
Atbilde no AI
Selenium Webdriver izmanto dažādus gaidīšanas veidus, lai sinhronizētu skripta darbības ar tīmekļa lapas ielādi:
-
Nopietns gaidīšanas veids (Implicit Wait): Nosaka maksimālo laiku, cik Selenium mēģinās atrast elementu lapā, pirms izmet
NoSuchElementException. Tas tiek piemērots visām elementu meklēšanas operācijām pēc tā iestatīšanas.from selenium import webdriver # Vadītāja objekta izveide driver = webdriver.Chrome() # Nopietns gaidīšanas veids (10 sekundes) driver.implicitly_wait(10) # Nākamās meklēšanas operācijas izmantos šo gaidīšanu # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Vadītāja aizvēršana # driver.quit() -
Skaidrs gaidīšanas veids (Explicit Wait): Nosaka maksimālo laiku, lai izpildītu noteiktu nosacījumu, pirms izmet
TimeoutException. Tas tiek piemērots konkrētam elementam vai nosacījumam. Tam nepieciešamsWebDriverWaitklases un viens no iepriekš definētiem vai pielāgotiem "gaidīšanas nosacījumiem" (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 # Vadītāja objekta izveide (šeit nav nepieciešama kopējā gaidīšana, # ja tiek izmantota skaidra gaidīšana konkrētiem elementiem) driver = webdriver.Chrome() # driver.get("http://example.com") # Skaidras gaidīšanas iestatīšana (10 sekundes) elementa klātbūtnei try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Turpmākās darbības ar elementu # element.click() except: # Izņēmuma apstrāde, ja elements netiek atrasts 10 sekundēs print("Elements netika atrasts 10 sekundēs") # Skaidras gaidīšanas iestatīšana (15 sekundes) klikšķējamībai try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Elements nav kļuvusi klikšķējama 15 sekundēs") # Vadītāja aizvēršana # driver.quit() -
Elastīga gaidīšana (Fluent Wait): Līdzīga skaidrai gaidīšanai, bet ļauj iestatīt maksimālo gaidīšanas laiku un nosacījumu. Papildus, var norādīt intervālu (polling interval) un izņēmumu sarakstu, kurus jāignorē gaidīšanas laikā:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Vadītāja objekta izveide driver = webdriver.Chrome() # driver.get("http://example.com") # Elastīgas gaidīšanas iestatīšana wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Turpmākās darbības ar elementu # element.click() except: print("Elastīga gaidīšana neatrada elementu") # Vadītāja aizvēršana # driver.quit()
Salīdzinājums:
| Gaidīšanas veids | Piemērošana | Nosacījums | Elastīgums | Lietošana |
|---|---|---|---|---|
| Nopietns | Globāls | Elementa meklēšana | Zems (tikai laiks) | Vienkārša konfigurācija visiem elementiem |
| Skaidrs | Konkrēts | Noteikts nosacījums | Augsts (laiks, nosacījums) | Gaidīšana uz konkrētām elementu stāvokļiem |
| Elastīgs | Konkrēts | Noteikts nosacījums | Visaugstākais (laiks, nosacījums, intervāls, ignorēt izņēmumus) | Sarežģīti gaidīšanas scenāriji ar kļūdu apstrādi |