Sobes.tech
Middle

Seleniumдеги күтүүнүн бир нече түрлөрү жөнүндө айтыңыз.

sobes.tech AI

AIден жооп

Selenium Webdriver-те ар кандай күтүүлөр түрлөрү колдонулат, скрипттин аракеттерин жана веб-баракчанын жүктөлүшүн синхрондоштуруу үчүн:

  1. Жалпысынан күтүү (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()
    
  2. Ачык күтүү (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()
    
  3. Ийкемдүү күтүү (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()
    

Салыштыруу:

Күтүү түрү Колдонуу Шарт Ийкемдүүлүк Колдонуу
Жалпысынан Глобалдуу Элемент издөө Төмөн (уақыт гана) Бардык элементтер үчүн жөнөкөй орнотуу
Ачык Конкреттүү Белгилүү шарт Жогорку (убакыт, шарт) Конкреттүү шарттарга күтүү
Ийкемдүү Конкреттүү Белгилүү шарт Жогорку (убакыт, шарт, интервал, исключениелерди көзөмөлдөө) Кыйын сценарийлер үчүн күтүүлөр