Seleniumдеги күтүүнүн бир нече түрлөрү жөнүндө айтыңыз.
sobes.tech AI
AIден жооп
Selenium Webdriver-те ар кандай күтүүлөр түрлөрү колдонулат, скрипттин аракеттерин жана веб-баракчанын жүктөлүшүн синхрондоштуруу үчүн:
-
Жалпысынан күтүү (Implicit Wait): Selenium баракчадагы элементти табууга аракет кылган максималдуу убакытты белгилейт, ал эми
NoSuchElementExceptionисключениеси чыгат. Бул бардык издөө операцияларына глобалдуу колдонулат:from selenium import webdriver # Драйвердин экземплярин түзүү driver = webdriver.Chrome() # Жалпысынан күтүүнү орнотуу (10 секунд) driver.implicitly_wait(10) # Кийинки издөө операциялары ушул күтүүнү колдонуп жүргүзүлөт # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Драйверди жабуу # driver.quit() -
Ачык күтүү (Explicit Wait): Белгилүү бир шарт аткарылгандан кийин, ал шарт 10 секунд ичинде аткарылбаса,
TimeoutExceptionчыгат. Бул конкреттүү элемент же шарт үчүн колдонулат. Анын үчүнWebDriverWaitклассы жана алдын ала аныкталган же ыңгайлаштырылган "күтүүлөр" (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 # Драйвердин экземплярин түзүү (бул жерде жалпысынан күтүү керек эмес, # эгер конкреттүү элементтер үчүн ачык күтүү колдонулса) driver = webdriver.Chrome() # driver.get("http://example.com") # Ачык күтүүнү орнотуу (10 секунд) элементтин болушу үчүн try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Элемент менен кийинки аракеттер # element.click() except: # Элемент табылбаса, иштетүү print("Элемент 10 секунд ичинде табылган жок") # Кликке даяр элемент үчүн ачык күтүүнү орнотуу try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Элемент 15 секунд ичинде клик кылууга даяр болбой калды") # Драйверди жабуу # driver.quit() -
Ийкемдүү күтүү (Fluent Wait): Ачык күтүүгө окшош, бирок максималдуу күтүүнү жана шартты белгилөөгө мүмкүндүк берет. Ошондой эле, интервалды (polling interval) жана игнордоо керек болгон исключениелердин тизмесин көрсөтүүгө болот:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Драйвердин экземплярин түзүү driver = webdriver.Chrome() # driver.get("http://example.com") # Ийкемдүү күтүүнү орнотуу wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Элемент менен кийинки аракеттер # element.click() except: print("Ийкемдүү күтүү менен элемент табылган жок") # Драйверди жабуу # driver.quit()
Салыштыруу:
| Күтүү түрү | Колдонуу | Шарт | Ийкемдүүлүк | Колдонуу |
|---|---|---|---|---|
| Жалпысынан | Глобалдуу | Элемент издөө | Төмөн (уақыт гана) | Бардык элементтер үчүн жөнөкөй орнотуу |
| Ачык | Конкреттүү | Белгилүү шарт | Жогорку (убакыт, шарт) | Конкреттүү шарттарга күтүү |
| Ийкемдүү | Конкреттүү | Белгилүү шарт | Жогорку (убакыт, шарт, интервал, исключениелерди көзөмөлдөө) | Кыйын сценарийлер үчүн күтүүлөр |