CodeGym /Curso de Java /Python SELF ES /Automatización del trabajo con formularios y botones en u...

Automatización del trabajo con formularios y botones en una página web para la recolección de datos

Python SELF ES
Nivel 37 , Lección 3
Disponible

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:

Python

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ó.

Python

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().

Python

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().

Python

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.

Python

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.

Python

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.

Python

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.

Python

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).

Python

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:

Python

># 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.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION