Automatización de Registro con Python y Selenium

En este artículo, te mostraremos cómo puedes automatizar el proceso de registro en sitios web utilizando un pequeño script en Python. Para ello, emplearemos Selenium junto con undetected_chromedriver, herramientas que nos permiten interactuar con el navegador de manera eficiente y sin complicaciones. Este ejemplo es ideal para quienes desean aprender a interactuar con formularios web sin necesidad de intervención manual. A continuación, desglosaremos cada parte del código de forma clara y comprensible.

¿Qué es Selenium y undetected_chromedriver?

Selenium es una biblioteca de Python que permite automatizar navegadores web. Con ella, puedes simular clics, completar formularios y navegar por páginas, lo que resulta muy útil para tareas repetitivas o pruebas automatizadas.

undetected_chromedriver es una variante de ChromeDriver que ayuda a evitar la detección de automatización por parte de algunos sitios web. Esto es especialmente útil en plataformas que implementan medidas para prevenir el uso de bots.

Desglose del Código

  1. Importaciones: Importamos las bibliotecas necesarias para la automatización y el manejo de excepciones.
  2. Configuración de Logging: Configuramos el logging para que podamos ver mensajes informativos y de error en la consola.
  3. setup_driver: Esta función configura y devuelve el driver de Chrome . Aquí se establecen varias opciones para optimizar el rendimiento y evitar problemas comunes al iniciar el navegador.
  4. fill_registration_form: Esta es la parte central del script, donde se navega a la página de registro de Crunchyroll y se completan los campos de correo electrónico y contraseña. Utilizamos WebDriverWait para asegurarnos de que los elementos estén disponibles antes de interactuar con ellos, lo que ayuda a evitar errores de tiempo de espera.
  5. close_driver: Esta función se encarga de cerrar el navegador de manera segura al finalizar el script, ya sea de forma normal o si se interrumpe la ejecución.
  6. Bloque Principal: Aquí se definen los datos de registro (correo y contraseña) y se llama a las funciones para iniciar el navegador y llenar el formulario. También se incluye un bucle que permite mantener el script en ejecución hasta que el usuario decida cancelarlo con Ctrl + C.

Requisitos Previos

Antes de comenzar, asegúrate de tener instalado Python en tu sistema. También necesitarás instalar las bibliotecas necesarias. Puedes hacerlo ejecutando el siguiente comando en tu terminal:

pip install undetected-chromedriver selenium

Configuración del Navegador

def setup_driver():
    options = uc.ChromeOptions()
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--disable-gpu')
    options.add_argument('--disable-extensions')

    try:
        driver = uc.Chrome(options=options)
        logging.info("Navegador iniciado correctamente")
        return driver
    except WebDriverException as e:
        logging.error(f"Error al iniciar el navegador: {e}")
        raise

La función setup_driver() es responsable de configurar el navegador Chrome para ejecutar el script. Aquí se utilizan varias opciones:

  • –no-sandbox: Se usa para evitar errores relacionados con la ejecución en entornos restringidos.
  • –disable-dev-shm-usage y –disable-gpu: Deshabilitan recursos que no son necesarios, optimizando el rendimiento.
  • –disable-extensions: Desactiva las extensiones del navegador para que no interfieran con el script.

El navegador se inicia mediante el comando uc.Chrome(options=options), y si todo va bien, se devuelve el «driver» que se usará para navegar por el sitio.

Rellenar el Formulario de Registro

def fill_registration_form(driver, email, password):
    try:
        # Navega a la página de registro
        driver.get("https://sso.crunchyroll.com/es/register")
        logging.info("Página de registro cargada correctamente")

        # Rellena el campo de correo electrónico
        email_field = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//input[@type='email']"))
        )
        email_field.send_keys(email)
        logging.info("Campo de correo electrónico rellenado correctamente")

En la función fill_registration_form(), el script hace lo siguiente:

  1. Navega al sitio web: Usa el comando driver.get() para abrir la página en modo incognito de registro de Crunchyroll.
  2. Espera a que los elementos estén disponibles: Con WebDriverWait(), el script espera hasta que los campos del formulario estén listos para ser rellenados.
  3. Rellena el formulario: Envía el correo electrónico y la contraseña en los campos correspondientes usando send_keys().
  4. Haz clic en el botón de registro: Finalmente, localiza el botón de registro y hace clic en él.

Este proceso se repite de forma similar para el campo de contraseña y el botón de registro.

Manejo de Errores y Logging

except TimeoutException:
    logging.error("Tiempo de espera agotado")
except NoSuchElementException:
    logging.error("Elemento no encontrado")
except WebDriverException as e:
    logging.error(f"Error al rellenar el formulario: {e}")

La función utiliza un sistema de manejo de errores robusto:

  • TimeoutException: Se captura si el script excede el tiempo de espera mientras busca un elemento.
  • NoSuchElementException: Si no encuentra el elemento solicitado (por ejemplo, un campo del formulario).
  • WebDriverException: Para capturar otros errores relacionados con Selenium.

Se usa logging para mostrar mensajes que indican si el proceso fue exitoso o si ocurrió algún problema, lo que ayuda a depurar errores rápidamente.

Cierre del Navegador

def close_driver(driver):
    try:
        driver.quit()
    except Exception as e:
        logging.error(f"Error al cerrar el navegador: {e}")
    logging.info("Navegador cerrado.")

La función close_driver() cierra el navegador al finalizar el script. Si ocurre un error al cerrarlo, se captura para evitar que el script se detenga de manera abrupta.

Ejecución del Script

if __name__ == "__main__":
    # Datos de registro (Cambiar datos de uso)
    email = "[email protected]"
    password = "passoworde45s6874"

    driver = setup_driver()
    atexit.register(close_driver, driver)

    try:
        fill_registration_form(driver, email, password)
        # Espera para observar el resultado
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        logging.info("Ejecución cancelada por el usuario")
    except Exception as e:
        logging.error(f"Error: {e}")

Finalmente, en el bloque principal, el script inicia el navegador, rellena el formulario con los datos proporcionados y luego mantiene la ejecución activa para que puedas observar los resultados. Si decides interrumpir el proceso, el script maneja la interrupción con un mensaje adecuado.

Código completo

Puedes descargar el código completo desde el siguiente botón, que te llevará al repositorio en GitHub.

Conclusión

Este código es una demostración práctica de cómo automatizar el registro en un sitio web usando Python y Selenium. Gracias a la combinación de técnicas como el manejo de errores, el uso de logging y la automatización del navegador, puedes ahorrar tiempo y esfuerzo al realizar tareas repetitivas como esta.

Recuerda que este tipo de automatización debe ser usado con responsabilidad y respetando siempre las políticas de uso de los sitios web.

¡Espero que hayas encontrado este artículo útil y fácil de seguir! Si tienes preguntas o necesitas más ejemplos, no dudes en dejar un comentario.