Sobes.tech
Middle

Selenium'da birkaç bekleme türünden bahsedin.

sobes.tech yapay zeka

AI'dan gelen yanıt

Selenium Webdriver'da, betiklerin web sayfasının yüklenmesiyle senkronize olması için farklı bekleme türleri kullanılır.

  1. Gizli Bekleme (Implicit Wait): Selenium'un, sayfadaki bir elementi bulmaya çalışırken, NoSuchElementException hatası vermeden önce denemeye çalışacağı maksimum süreyi belirler. Bu, ayarlandıktan sonra tüm element arama işlemlerine küresel olarak uygulanır.

    from selenium import webdriver
    
    # Sürücü örneği oluşturma
    driver = webdriver.Chrome()
    
    # Gizli beklemeyi ayarla (10 saniye)
    driver.implicitly_wait(10)
    
    # Sonraki element arama işlemleri bu beklemeyi kullanacaktır
    # driver.get("http://example.com")
    # element = driver.find_element_by_id("some_id")
    
    # Sürücü kapatma
    # driver.quit()
    
  2. Açık Bekleme (Explicit Wait): Belirli bir koşulun sağlanması için maksimum süreyi tanımlar, aksi takdirde TimeoutException hatası verir. Bu, belirli bir element veya koşul için kullanılır. Kullanımı için WebDriverWait sınıfı ve önceden tanımlanmış veya özelleştirilmiş "beklenen koşullar" gerekir.

    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
    
    # Sürücü örneği oluşturma (gizli bekleme gerekmez, 
    # belirli elementler için açık bekleme kullanılır)
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Elementin varlığını kontrol etmek için açık bekleme (10 saniye)
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "some_id"))
        )
        # Elementle ilgili sonraki işlemler
        # element.click()
    except:
        # Element bulunamazsa hata yönetimi
        print("Element 10 saniye içinde bulunamadı")
    
    # Elementin tıklanabilir olmasını beklemek için açık bekleme
    try:
        clickable_element = WebDriverWait(driver, 15).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']"))
        )
        # clickable_element.click()
    except:
        print("Element 15 saniye içinde tıklanabilir hale gelmedi")
    
    # Sürücü kapatma
    # driver.quit()
    
  3. Akıcı Bekleme (Fluent Wait): Açık beklemeye benzer, maksimum bekleme süresi ve koşulu belirler. Ayrıca, koşulun kontrol edilmesi için polling aralığını ve beklerken atlanacak istisnaları da belirleyebilir.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import FluentWait
    from selenium.common.exceptions import NoSuchElementException
    
    # Sürücü örneği oluşturma
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Akıcı bekleme ayarla
    wait = FluentWait(driver, timeout=30, poll_frequency=5,
                      ignored_exceptions=[NoSuchElementException])
    
    try:
        element = wait.until(lambda driver: driver.find_element(By.ID, "some_id"))
        # Elementle ilgili sonraki işlemler
        # element.click()
    except:
        print("Akıcı bekleme ile element bulunamadı")
    
    # Sürücü kapatma
    # driver.quit()
    

Karşılaştırma:

Bekleme Türü Uygulama Koşul Esneklik Kullanım
Gizli Küresel Element arama Düşük (sadece zaman) Tüm elementler için basit ayar
Açık Belirli Belirli koşul Yüksek (zaman, koşul) Belirli element durumlarını bekleme
Akıcı Belirli Belirli koşul En yüksek (zaman, koşul, polling, atlanacak istisnalar) Karmaşık bekleme senaryoları ve hata yönetimi