Habla sobre algunos tipos de espera en Selenium.
sobes.tech AI
Respuesta de la IA
En Selenium Webdriver se utilizan diferentes tipos de esperas para sincronizar las acciones del script con la carga de la página web.
-
Espera implícita (Implicit Wait): Establece el tiempo máximo durante el cual Selenium intentará encontrar un elemento en la página antes de lanzar una excepción
NoSuchElementException. Se aplica globalmente a todas las operaciones de búsqueda de elementos después de su configuración.from selenium import webdriver # Crear una instancia del driver driver = webdriver.Chrome() # Establecer espera implícita (10 segundos) driver.implicitly_wait(10) # Las operaciones de búsqueda de elementos posteriores usarán esta espera # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Cerrar el driver # driver.quit() -
Espera explícita (Explicit Wait): Define el tiempo máximo para cumplir una condición específica antes de lanzar una excepción
TimeoutException. Se aplica a un elemento o condición concreta. Para usarla, se necesita la claseWebDriverWaity una de las "condiciones esperadas" predefinidas o personalizadas.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 # Crear una instancia del driver (no es necesaria espera implícita aquí, # si se usa explícita para elementos específicos) driver = webdriver.Chrome() # driver.get("http://example.com") # Establecer espera explícita (10 segundos) para la presencia del elemento try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Acciones posteriores con el elemento # element.click() except: # Manejar la excepción si el elemento no se encontró en 10 segundos print("Elemento no encontrado en 10 segundos") # Establecer espera explícita para que el elemento sea clickeable try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("El elemento no fue clickeable en 15 segundos") # Cerrar el driver # driver.quit() -
Espera flexible (Fluent Wait): Similar a la espera explícita, permite definir el tiempo máximo de espera y la condición. Además, permite especificar el intervalo de sondeo (polling interval) para verificar la condición y una lista de excepciones a ignorar durante la espera.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Crear una instancia del driver driver = webdriver.Chrome() # driver.get("http://example.com") # Establecer espera flexible wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Acciones posteriores con el elemento # element.click() except: print("Elemento no encontrado con la espera flexible") # Cerrar el driver # driver.quit()
Comparación:
| Tipo de espera | Aplicación | Condición | Flexibilidad | Uso |
|---|---|---|---|---|
| Implícita | Global | Búsqueda de elemento | Baja (solo tiempo) | Configuración sencilla para todos los elementos |
| Explícita | Específica | Condición definida | Alta (tiempo, condición) | Espera por estados específicos de elementos |
| Flexible | Específica | Condición definida | Máxima (tiempo, condición, intervalo, excepciones a ignorar) | Escenarios complejos con manejo de errores |