Sobes.tech
Middle

Selenium'da bir nechta kutish turlarini haqida gapiring.

sobes.tech AI

AIdan javob

No Selenium Webdriver, turli xil kutish turlari ishlatiladi, bu skript harakatlarini veb-sahifa yuklanishi bilan sinxronlashtirish uchun.

  1. Noaniq kutish (Implicit Wait): Selenium sahifada elementni topishga harakat qilayotgan vaqtni maksimal belgilaydi, undan oldin NoSuchElementException xatosi chiqariladi. Bu barcha element qidiruv operatsiyalariga global tarzda ta'sir qiladi.

    from selenium import webdriver
    
    # Driver nusxasini yaratish
    driver = webdriver.Chrome()
    
    # Noaniq kutishni sozlash (10 sekund)
    driver.implicitly_wait(10)
    
    # Keyingi element qidiruv operatsiyalari bu kutishni ishlatadi
    # driver.get("http://example.com")
    # element = driver.find_element_by_id("some_id")
    
    # Driverni yopish
    # driver.quit()
    
  2. Aniq kutish (Explicit Wait): Ma'lum bir shart bajarilishini kutish uchun maksimal vaqt belgilaydi, aks holda TimeoutException xatosi chiqariladi. Bu faqat ma'lum element yoki shart uchun ishlatiladi. Buning uchun WebDriverWait sinfi va oldindan belgilangan yoki sozlangan "kutish shartlari" (expected conditions) kerak.

    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 nusxasini yaratish (noaniq kutish bu yerda kerak emas, 
    # agar faqat ma'lum elementlar uchun aniq kutish ishlatilsa)
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Elementning mavjudligini kutish (10 sekund)
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "some_id"))
        )
        # Keyingi amal
        # element.click()
    except:
        # Xatoni boshqarish, agar element 10 sekund ichida topilmasa
        print("Element 10 sekund ichida topilmadi")
    
    # Elementga bosish mumkinligini kutish (15 sekund)
    try:
        clickable_element = WebDriverWait(driver, 15).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']"))
        )
        # clickable_element.click()
    except:
        print("Element 15 sekund ichida bosish mumkin bo'lmadi")
    
    # Driverni yopish
    # driver.quit()
    
  3. Yumshoq kutish (Fluent Wait): Aniq kutishga o'xshash, maksimal kutish vaqtini va shartni belgilash imkonini beradi. Shuningdek, shartni tekshirish uchun polling interval va kutish davomida e'tibordan chetlatilishi kerak bo'lgan istisnalar ro'yxatini belgilash mumkin.

    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 nusxasini yaratish
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Yumshoq kutishni sozlash
    wait = FluentWait(driver, timeout=30, poll_frequency=5,
                      ignored_exceptions=[NoSuchElementException])
    
    try:
        element = wait.until(lambda driver: driver.find_element(By.ID, "some_id"))
        # Keyingi amal
        # element.click()
    except:
        print("Yumshoq kutish bilan element topilmadi")
    
    # Driverni yopish
    # driver.quit()
    

Taqqoslash:

Kutish turi Qo'llanilishi Shart Moslashuvchanlik Foydalanish
Noaniq Global Element qidirish Past (faqat vaqt) Barcha elementlar uchun oddiy sozlash
Aniq Maxsus Belirli shartlar Yuqori (vaqt, shart) Maxsus element holatlarini kutish
Yumshoq Maxsus Belirli shartlar Eng yuqori (vaqt, shart, interval, e'tibordan chetlatish) Murakkab kutish ssenariylari va xato boshqaruvi