Sobes.tech
Middle

Beszélj néhány várakozási típusról a Selenium-ban.

sobes.tech MI

Válasz az MI-től

A Selenium Webdriver különböző típusú várakozásokat használ a szkript műveleteinek szinkronizálására a weboldal betöltésével.

  1. Beágyazott várakozás (Implicit Wait): Meghatározza a maximális időt, ameddig a Selenium megpróbál egy elemet megtalálni az oldalon, mielőtt NoSuchElementException kivételt dobna. Ez globálisan alkalmazandó minden elemkeresési műveletre a beállítás után.

    from selenium import webdriver
    
    # Driver példány létrehozása
    driver = webdriver.Chrome()
    
    # Beágyazott várakozás beállítása (10 másodperc)
    driver.implicitly_wait(10)
    
    # A további elemkeresési műveletek ezt a várakozást fogják használni
    # driver.get("http://example.com")
    # element = driver.find_element_by_id("some_id")
    
    # Driver bezárása
    # driver.quit()
    
  2. Kifejezett várakozás (Explicit Wait): Meghatározza a maximális időt egy adott feltétel végrehajtására, mielőtt TimeoutException-t dobna. Ez egy adott elem vagy feltétel esetén alkalmazható. Ehhez a WebDriverWait osztályt és egy előre definiált vagy testreszabott "várakozási feltételeket" (expected conditions) használunk.

    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 példány létrehozása (nem szükséges beágyazott várakozás, ha explicit várakozást használunk)
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Kifejezett várakozás beállítása (10 másodperc) az elem jelenlétéhez
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "some_id"))
        )
        # További műveletek az elemmel
        # element.click()
    except:
        # Kivétel kezelése, ha az elem nem található 10 másodpercen belül
        print("Az elem nem található 10 másodpercen belül")
    
    # Kifejezett várakozás az elem kattinthatóságára (15 másodperc)
    try:
        clickable_element = WebDriverWait(driver, 15).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']"))
        )
        # clickable_element.click()
    except:
        print("Az elem nem lett kattintható 15 másodpercen belül")
    
    # Driver bezárása
    # driver.quit()
    
  3. Rugalmas várakozás (Fluent Wait): Hasonló a kifejezett várakozáshoz, de lehetővé teszi a maximális várakozási idő és a feltétel megadását. Továbbá lehetővé teszi a polling intervallum megadását és az ignorálandó kivételek listáját.

    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 példány létrehozása
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Rugalmas várakozás beállítása
    wait = FluentWait(driver, timeout=30, poll_frequency=5,
                      ignored_exceptions=[NoSuchElementException])
    
    try:
        element = wait.until(lambda driver: driver.find_element(By.ID, "some_id"))
        # További műveletek az elemmel
        # element.click()
    except:
        print("Rugalmas várakozás nem találta meg az elemet")
    
    # Driver bezárása
    # driver.quit()
    

Összehasonlítás:

Várakozási típus Alkalmazás Feltétel Rugalmasság Használat
Beágyazott Globális Elem keresése Alacsony (csak idő) Egyszerű beállítás minden elemhez
Kifejezett Konkrét Meghatározott feltétel Magas (idő, feltétel) Várakozás konkrét állapotokra
Rugalmas Konkrét Meghatározott feltétel Legmagasabb (idő, feltétel, intervallum, kivételek ignorálása) Komplex várakozási forgatókönyvek hibakezeléssel