1. Fundamentos técnicos
Rellenar y enviar formularios
Trabajar con formularios a menudo es necesario para automatizar el registro de usuarios, completar cuestionarios, recolectar datos y mucho más. Cuando necesitas llenar cientos de formularios, hacerlo manualmente es como intentar comerte una sandía con un popote. Pero con nuestras súper habilidades de Selenium, lo haremos en cuestión de segundos.
Primero, veamos cómo podemos rellenar campos de texto y enviar formularios. Con el ejemplo típico de un formulario de inicio de sesión en un sitio web, aprenderemos los pasos básicos:
from selenium import webdriver
# Configuración del driver (por ejemplo, ChromeDriver)
driver = webdriver.Chrome()
try:
# Abrir la página web
driver.get("https://example.com/login")
# Buscar el campo de entrada para el nombre de usuario e ingresar texto
username_input = driver.find_element_by_name("username")
username_input.send_keys("mi_usuario")
# Buscar el campo de entrada para la contraseña e ingresar texto
password_input = driver.find_element_by_name("password")
password_input.send_keys("mi_contraseña")
# Buscar el botón de envío del formulario y hacer clic en él
submit_button = driver.find_element_by_name("submit")
submit_button.click()
finally:
# Cerrar el driver
driver.quit()
Validación y manejo de errores
Nada arruina el día de un programador más que errores que aparecen en el peor momento. Por eso los manejamos de antemano. Usamos try/except
para capturar errores y registramos logs para entender qué pasó.
try:
username_input = driver.find_element_by_name("username")
username_input.send_keys("mi_usuario")
except Exception as e:
print(f"Error al completar el nombre de usuario: {e}")
logging.error("Error al completar el nombre de usuario", exc_info=True)
2. Casillas de verificación (Checkboxes)
Ahora que ya sabemos cómo hacer clic en botones, intentemos seleccionar opciones múltiples de una lista. Para marcar o desmarcar una casilla, también podemos usar el método click()
. Si necesitas verificar si está marcada, utiliza el atributo is_selected()
.
checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
checkbox.click()
3. Botones de opción (Radio Buttons)
Los botones de opción permiten seleccionar solo una opción de varias. Funcionan de manera similar a las casillas de verificación: seleccionas una opción usando el método click()
y verificas el estado con is_selected()
.
radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
radio_button.click()
4. Listas desplegables (Dropdowns)
Las listas desplegables contienen varias opciones para elegir. En Selenium, hay una clase Select
que proporciona métodos para trabajar con estas listas.
from selenium.webdriver.support.ui import Select
dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("Option 1")
También puedes elegir opciones usando select_by_index()
o select_by_value()
.
5. Áreas de texto (Text Areas)
Las áreas de texto son similares a los campos de texto, pero generalmente se utilizan para ingresar grandes cantidades de texto. Trabajar con ellas es idéntico al trabajo con campos de texto.
text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("Este es un texto de ejemplo para el área de texto.")
6. Calendarios (Date Picker)
Los campos de calendario permiten a los usuarios seleccionar fechas. Si es un campo de texto común que soporta el formato de fecha, puedes usar send_keys()
para ingresar un valor en el formato necesario.
date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25") # El formato de fecha puede variar según el sitio
Sin embargo, algunos campos de calendario requieren acciones adicionales, como abrir un calendario emergente y seleccionar una fecha.
7. Campos de archivo (File Upload)
Estos campos permiten cargar archivos en el servidor. Se interactúa con ellos también mediante el método send_keys()
, especificando la ruta del archivo en la computadora local.
file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
8. Campos ocultos (Hidden Fields)
Los campos ocultos no se muestran en la página, pero pueden usarse para almacenar información necesaria para enviar un formulario. Solo puedes interactuar con ellos si tienes acceso a su valor (por ejemplo, para verificar o modificar el valor).
hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Valor del campo oculto:", value)
9. Verificación del éxito de las acciones
Obtener información sobre el éxito de las acciones es tu barómetro de éxito. Después de enviar un formulario, ciertamente querrás asegurarte de que se aceptó correctamente, ¿verdad? Así es cómo puedes hacerlo:
># Verificación del inicio de sesión exitoso en el sitio web
if "Bienvenido" in driver.page_source:
print("¡Inicio de sesión exitoso!")
else:
print("Ocurrió un error al iniciar sesión.")
10. Problemas y soluciones
Problemas
- Inestabilidad: Las páginas web cambian con frecuencia. Cambiar la estructura de la página puede causar fallas en los scripts, por lo que es necesaria una revisión periódica del código para mantenerlo actualizado.
- Dependencia de la velocidad de la red: El tiempo de carga de las páginas y los elementos puede variar. Usa esperas explícitas (explicit waits) para manejar los retrasos.
Soluciones
- Logging: Registra todas las acciones para entender mejor los problemas. Usar la biblioteca
logging
facilita mucho el registro de logs. - Modularidad del código: Divide las acciones complejas en funciones y módulos para facilitar los cambios y pruebas.
GO TO FULL VERSION