Sobes.tech
Middle

Selenium-də bəzi gözləmə növlərindən danış.

sobes.tech Süni İntellekt

AI-dan cavab

Selenium Webdriver-də skriptin veb səhifənin yüklənməsi ilə əməliyyatların sinxronizasiyası üçün müxtəlif növ gözləmələr istifadə olunur.

  1. Qeyri-müəyyən Gözləmə (Implicit Wait): Selenium-un element tapmağa çalışdığı ən çox vaxtı təyin edir və NoSuchElementException istisnasını atır. Bu, bütün element axtarış əməliyyatlarına qlobal olaraq tətbiq olunur.

    from selenium import webdriver
    
    # Driver nümunəsi yaradın
    driver = webdriver.Chrome()
    
    # Qeyri-müəyyən gözləməni qurun (10 saniyə)
    driver.implicitly_wait(10)
    
    # Sonrakı element axtarış əməliyyatları bu gözləməni istifadə edəcək
    # driver.get("http://example.com")
    # element = driver.find_element_by_id("some_id")
    
    # Driver-i bağlayın
    # driver.quit()
    
  2. Aydın Gözləmə (Explicit Wait): Müəyyən bir şərtin yerinə yetirilməsi üçün ən çox vaxtı təyin edir və TimeoutException atır. Bu, konkret element və ya şərt üçün tətbiq olunur. Bunun üçün WebDriverWait sinfi və əvvəlcədən təyin olunmuş və ya özəlləşdirilmiş "gözləmə şərtləri" (expected conditions) istifadə olunur.

    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 nümunəsi yaradın (qeyri-müəyyən gözləmə lazım deyil, əgər aydın gözləmə istifadə olunursa)
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Aydın gözləməni qurun (10 saniyə) elementin mövcudluğu üçün
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "some_id"))
        )
        # Elementlə davam edin
        # element.click()
    except:
        # Element tapılmadıqda işləmə
        print("Element 10 saniyə ərzində tapılmadı")
    
    # Elementin kliklənə biləcəyini gözləyin (15 saniyə)
    try:
        clickable_element = WebDriverWait(driver, 15).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']"))
        )
        # clickable_element.click()
    except:
        print("Element 15 saniyə ərzində kliklənə bilmədi")
    
    # Driver-i bağlayın
    # driver.quit()
    
  3. Fleksibil Gözləmə (Fluent Wait): Aydın gözləməyə bənzəyir, lakin maksimum vaxt və şərt təyin etməyə imkan verir. Əlavə olaraq, yoxlama intervalını (polling interval) və gözləmə zamanı ignore ediləcək istisnaları göstərə bilər.

    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 nümunəsi yaradın
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Fleksibil gözləməni qurun
    wait = FluentWait(driver, timeout=30, poll_frequency=5,
                      ignored_exceptions=[NoSuchElementException])
    
    try:
        element = wait.until(lambda driver: driver.find_element(By.ID, "some_id"))
        # Elementlə davam edin
        # element.click()
    except:
        print("Fleksibil gözləmə ilə element tapılmadı")
    
    # Driver-i bağlayın
    # driver.quit()
    

Müqayisə:

Gözləmə növü Tətbiq sahəsi Şərt Elastiklik İstifadə
Qeyri-müəyyən Qlobal Element axtarışı Aşağı (yalnız vaxt) Sadə tənzimləmə bütün elementlər üçün
Aydın Xüsusi Müəyyən şərt Yüksək (vaxt, şərt) Elementlərin xüsusi vəziyyətlərini gözləmək
Fleksibil Xüsusi Müəyyən şərt Ən yüksək (vaxt, şərt, interval, istisnaları ignore etmək) Çətin gözləmə ssenariləri və səhv idarəetməsi