Inicialización del WebDriver
flowchart LR
Imp[from selenium import webdriver] --> Cls{Driver}
Cls --> Ch[webdriver.Chrome]
Cls --> FF[webdriver.Firefox]
Cls --> Ed[webdriver.Edge]
Cls --> Sf[webdriver.Safari]
Ch --> Ctx["Context manager: with"]
Ctx --> Get[driver.get url]
Get --> Find["driver.find_element By.ID, val"]
Find --> El[WebElement]
El --> Click["click / send_keys"]
Get --> Win[driver.window_handles]
Get --> SS[save_screenshot path]
Ctx --> Auto[Auto-close al salir del with]
La forma más correcta de gestionar el WebDriver en Python es usando el gestor de contexto (with), que garantiza que el navegador se cierre automáticamente aunque ocurra una excepción.
from selenium import webdriver
# Usando gestor de contexto (recomendado)
with webdriver.Chrome() as driver:
driver.get("https://www.selenium.dev")
print(driver.title)
# El navegador se cierra automáticamente al salir del bloque with
Si necesitas controlar manualmente el ciclo de vida:
from selenium import webdriver
driver = webdriver.Chrome()
try:
driver.get("https://www.selenium.dev")
print(driver.title)
finally:
driver.quit() # Cierra el navegador y libera recursos
Diferencia entre close() y quit()
driver.close() # Cierra solo la pestaña/ventana activa
driver.quit() # Cierra todas las ventanas y termina la sesión del WebDriver
Usa siempre quit() al final de la prueba para liberar completamente los recursos.
Información básica de la página
from selenium import webdriver
with webdriver.Chrome() as driver:
driver.get("https://www.ejemplo.com")
# Título de la página
titulo = driver.title
print(f"Título: {titulo}")
# URL actual
url_actual = driver.current_url
print(f"URL: {url_actual}")
# Código fuente HTML de la página
fuente = driver.page_source
print(f"Longitud del HTML: {len(fuente)} caracteres")
Navegación entre páginas
from selenium import webdriver
with webdriver.Chrome() as driver:
# Navegar a una URL
driver.get("https://www.ejemplo.com")
# Navegar usando navigate().to() (equivalente a get())
driver.get("https://www.ejemplo.com/pagina1")
driver.get("https://www.ejemplo.com/pagina2")
# Retroceder al historial
driver.back()
# Avanzar en el historial
driver.forward()
# Recargar la página actual
driver.refresh()
Control de la ventana del navegador
from selenium import webdriver
from selenium.webdriver.common.window import WindowTypes
with webdriver.Chrome() as driver:
driver.get("https://www.ejemplo.com")
# Maximizar la ventana
driver.maximize_window()
# Minimizar la ventana
driver.minimize_window()
# Pantalla completa
driver.fullscreen_window()
# Establecer tamaño específico
driver.set_window_size(1280, 720)
# Establecer posición
driver.set_window_position(0, 0)
# Obtener el tamaño actual
tamaño = driver.get_window_size()
print(f"Ancho: {tamaño['width']}, Alto: {tamaño['height']}")
# Obtener la posición actual
posicion = driver.get_window_position()
print(f"X: {posicion['x']}, Y: {posicion['y']}")
Gestión de múltiples ventanas y pestañas
Cuando una acción abre una nueva ventana o pestaña, el WebDriver sigue en el contexto original. Para interactuar con la nueva ventana debes cambiar el window handle.
from selenium import webdriver
from selenium.webdriver.common.by import By
with webdriver.Chrome() as driver:
driver.get("https://www.ejemplo.com")
# Guardar el handle de la ventana original
ventana_original = driver.current_window_handle
# Abrir una nueva pestaña haciendo clic en un enlace con target="_blank"
driver.find_element(By.LINK_TEXT, "Abrir en nueva pestaña").click()
# Obtener todos los window handles disponibles
todos_los_handles = driver.window_handles
print(f"Ventanas abiertas: {len(todos_los_handles)}")
# Cambiar a la nueva pestaña
for handle in todos_los_handles:
if handle != ventana_original:
driver.switch_to.window(handle)
break
print(f"URL de la nueva pestaña: {driver.current_url}")
# Cerrar la nueva pestaña y volver a la original
driver.close()
driver.switch_to.window(ventana_original)
print(f"De vuelta en: {driver.current_url}")
Abrir una nueva pestaña con JavaScript
from selenium import webdriver
with webdriver.Chrome() as driver:
driver.get("https://www.ejemplo.com")
# Abrir una nueva pestaña vacía usando JavaScript
driver.execute_script("window.open('');")
# Cambiar a la nueva pestaña (el último handle)
nueva_pestaña = driver.window_handles[-1]
driver.switch_to.window(nueva_pestaña)
# Navegar en la nueva pestaña
driver.get("https://www.selenium.dev")
print(f"Nueva pestaña: {driver.title}")
Gestión de frames e iframes
Los frames e iframes son documentos HTML incrustados dentro de otro documento. Para interactuar con elementos dentro de un frame, primero debes cambiar el contexto al frame.
from selenium import webdriver
from selenium.webdriver.common.by import By
with webdriver.Chrome() as driver:
driver.get("https://www.ejemplo.com/con-frames")
# Cambiar al frame por índice (0 = primer frame)
driver.switch_to.frame(0)
# Cambiar al frame por nombre o ID
driver.switch_to.frame("nombre-del-frame")
# Cambiar al frame por WebElement
frame_elemento = driver.find_element(By.CSS_SELECTOR, "iframe.mi-frame")
driver.switch_to.frame(frame_elemento)
# Ahora puedes interactuar con elementos dentro del frame
elemento_en_frame = driver.find_element(By.ID, "campo-en-frame")
elemento_en_frame.send_keys("Texto dentro del frame")
# Volver al contexto principal (fuera del frame)
driver.switch_to.default_content()
# Cambiar al frame padre (si hay frames anidados)
driver.switch_to.parent_frame()
Capturas de pantalla
from selenium import webdriver
from selenium.webdriver.common.by import By
with webdriver.Chrome() as driver:
driver.get("https://www.selenium.dev")
# Guardar captura de pantalla en un archivo
driver.save_screenshot("captura_pagina.png")
# Obtener captura como bytes (útil para adjuntar a reportes)
captura_bytes = driver.get_screenshot_as_png()
# Obtener captura como base64 (útil para HTML/JSON)
captura_base64 = driver.get_screenshot_as_base64()
# Captura de un elemento específico
elemento = driver.find_element(By.ID, "mi-elemento")
elemento.screenshot("captura_elemento.png")
Obtener atributos y propiedades de la página
from selenium import webdriver
with webdriver.Chrome() as driver:
driver.get("https://www.selenium.dev")
# Obtener cookies de la sesión
cookies = driver.get_cookies()
for cookie in cookies:
print(f"Cookie: {cookie['name']} = {cookie['value']}")
# Ejecutar JavaScript en la página
altura_scroll = driver.execute_script("return document.body.scrollHeight;")
print(f"Altura total de la página: {altura_scroll}px")
# Obtener la capacidad del driver
capacidades = driver.capabilities
print(f"Navegador: {capacidades['browserName']} {capacidades.get('browserVersion', '')}")
Ejemplo completo: prueba de navegación
import pytest
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
def test_navegacion_basica():
"""Prueba básica de navegación con múltiples páginas."""
with webdriver.Chrome() as driver:
driver.maximize_window()
# Página principal
driver.get("https://www.selenium.dev")
assert "Selenium" in driver.title
# Captura para documentación
driver.save_screenshot("inicio.png")
# Navegar a documentación
driver.get("https://www.selenium.dev/documentation/")
assert driver.current_url == "https://www.selenium.dev/documentation/"
# Volver a la página anterior
driver.back()
assert "selenium.dev" in driver.current_url
# Avanzar de nuevo
driver.forward()
print(f"Test completado. URL final: {driver.current_url}")
Fuentes y referencias
Documentación oficial y recursos externos para profundizar en Selenium
Documentación oficial de Selenium
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Selenium es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de Selenium
Explora más contenido relacionado con Selenium y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
Inicializar y cerrar WebDriver correctamente usando el gestor de contexto de Python. Navegar entre páginas y gestionar el historial del navegador. Controlar el tamaño y posición de la ventana del navegador. Gestionar múltiples ventanas y pestañas con window handles. Cambiar el contexto de ejecución a frames e iframes. Tomar capturas de pantalla de página completa y de elementos individuales.