Vertel over enkele soorten wachten in Selenium.
sobes.tech AI
Antwoord van AI
In Selenium Webdriver worden verschillende soorten wachttijden gebruikt om de acties van het script te synchroniseren met het laden van de webpagina.
-
Impliciete wacht (Implicit Wait): Stelt de maximale tijd in dat Selenium probeert een element op de pagina te vinden voordat het een
NoSuchElementExceptiongooit. Het wordt globaal toegepast op alle zoekoperaties na het instellen.from selenium import webdriver # Maak een driver instantie driver = webdriver.Chrome() # Stel impliciete wacht in (10 seconden) driver.implicitly_wait(10) # Verdere zoekoperaties gebruiken deze wacht # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Sluit de driver # driver.quit() -
Expliciete wacht (Explicit Wait): Stelt de maximale tijd in voor het uitvoeren van een bepaalde voorwaarde voordat een
TimeoutExceptionwordt gegooid. Het wordt toegepast op een specifiek element of voorwaarde. Hiervoor wordt de klasseWebDriverWaiten een van de vooraf gedefinieerde of aangepaste "verwachte voorwaarden" (expected conditions) gebruikt.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 # Maak een driver instantie (geen impliciete wacht nodig als expliciet wordt gebruikt) driver = webdriver.Chrome() # driver.get("http://example.com") # Stel expliciete wacht in (10 seconden) voor aanwezigheid van element try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Verdere acties met het element # element.click() except: # Verwerking als het element niet binnen 10 seconden wordt gevonden print("Element niet gevonden binnen 10 seconden") # Stel expliciete wacht in voor klikbaarheid van het element try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Element werd niet klikbaar binnen 15 seconden") # Sluit de driver # driver.quit() -
Flexibele wacht (Fluent Wait): Vergelijkbaar met expliciete wacht, stelt de maximale wachttijd en voorwaarde in. Daarnaast kan het interval (polling interval) worden ingesteld voor het controleren van de voorwaarde en een lijst van uitzonderingen die genegeerd moeten worden tijdens het wachten.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Maak een driver instantie driver = webdriver.Chrome() # driver.get("http://example.com") # Stel flexibele wacht in wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Verdere acties met het element # element.click() except: print("Element niet gevonden met behulp van flexibele wacht") # Sluit de driver # driver.quit()
Vergelijking:
| Soort wacht | Toepassing | Voorwaarde | Flexibiliteit | Gebruik |
|---|---|---|---|---|
| Impliciet | Globaal | Element zoeken | Laag (alleen tijd) | Eenvoudige instelling voor alle elementen |
| Expliciet | Specifiek | Bepaalde voorwaarde | Hoog (tijd, voorwaarde) | Wachten op specifieke toestanden van elementen |
| Flexibel | Specifiek | Bepaalde voorwaarde | Hoogst (tijd, voorwaarde, interval, negeren van uitzonderingen) | Complexe wachtscenario's met foutafhandeling |