Saltar a contenido

Bot Personalizado en Python

Requisitos mínimos

Para poder orquestar un proyecto o script existente en Python, básicamente necesitaremos dos requisitos:

  • bot.py: Un archivo llamado bot.py que servirá como punto de entrada para BotCity Runner. Este archivo se puede considerar como el archivo principal del proyecto. Puedes dejar tu código Python directamente en este archivo o simplemente usarlo para importar los scripts que deseas ejecutar.

  • requirements.txt: Un archivo que contiene todas las dependencias que se utilizan en el código. Este archivo sirve como referencia para que Runner sepa todos los paquetes de Python que deben instalarse al ejecutar el código.

Creando el archivo bot.py

En este tutorial crearemos un archivo bot.py que contiene un script simple en Python que utiliza Selenium puro. Después de ingresar el código, el archivo se verá así:

# This bot will access BotCity's Youtube channel and collect the number of subscribers.

# Importing the Selenium package
from selenium import webdriver

# Setting to use Chrome
driver = webdriver.Chrome(executable_path="<chromedriver.exe path>")

# Accessing the Google homepage
driver.get("https://google.com")

# Searching for BotCity Youtube channel in the search bar
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("BotCity RPA Youtube")

# Clicking on the "I'm Feeling Lucky" button
feeling_lucky_button = driver.find_element_by_xpath("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[3]/center/input[2]")
feeling_lucky_button.click()

# Collecting the number of subscribers from the Youtube page
subscribers = driver.find_element_by_id("subscriber-count").text
print(f"Subscribers Count: {subscribers}")

# Closing the browser
driver.quit()

Info

También puedes usar el archivo bot.py solo para importar tus scripts.

Definiendo el archivo de requisitos

Ahora, creemos nuestro archivo de requisitos que contiene las dependencias que estamos utilizando en el código.

requirements.txt:

# Estableciendo el uso de esta versión específica del paquete
selenium==3.141.0

Comprimiendo todos los archivos

Con los archivos necesarios configurados, ahora solo necesitamos crear un archivo .zip que contenga todos estos archivos. La estructura de la carpeta se verá así:

CustomBot.zip
├── bot.py <- Archivo que contiene el código o importa otros scripts de Python.
└── requirements.txt <- Archivo que describe las dependencias de Python para tu bot.

Important

En este ejemplo, solo estamos utilizando los archivos principales, pero si tienes una estructura con varios scripts de Python, por ejemplo:

CustomBot
├── bot.py
├── script.py
├── my_functions.py
├── utils.py
└── requirements.txt

Puedes usar bot.py solo para llamar a tus otros scripts y crear el archivo .zip de la misma manera. Lo más importante es considerar bot.py como el archivo principal del proyecto y definir todas las dependencias utilizadas en el archivo requirements.txt.

Con el archivo .zip en mano, ahora podemos implementar este bot y ejecutarlo a través de Maestro y Runner normalmente. Los pasos serán exactamente los mismos que al usar una plantilla de proyecto. Obtén más detalles sobre cómo enviar tu bot a Maestro.

Usando el SDK de BotCity Maestro

Solo los pasos anteriores serían suficientes para ejecutar nuestra automatización utilizando Maestro y Runner. Sin embargo, en algunos casos puede ser necesario utilizar la integración con Maestro para poder enviar alertas y finalizar tareas, por ejemplo.

Para esto, podemos importar fácilmente el SDK de Maestro en el código y usar los métodos normalmente. El único paso necesario es hacer un tratamiento para obtener los parámetros que se pasan por Runner en el momento de la ejecución.

Accediendo a los parámetros pasados por Runner

Cuando ejecutamos una automatización a través de BotCity Maestro, BotCity Runner pasa información por parámetro al iniciar la ejecución, como el servidor, el ID de tarea que se está ejecutando y también el token de acceso.

Para acceder a estos valores, podemos verificar si se están pasando estos parámetros y luego usarlos para instanciar e interactuar con el SDK de Maestro. El método from_sys_args se encarga de verificar los parámetros y devolver una instancia de BotMaestroSDK.

# Importing the BotCity Maestro SDK
from botcity.maestro import *

...

# Runner passes the server url, the id of the task being executed,
# the access token and the parameters that this task receives (when applicable).
maestro = BotMaestroSDK.from_sys_args()

# Task parameters are passed as a dictionary
# Use the parameter label that was defined to access its value
task_info = maestro.get_task(maestro.task_id)
parameter1 = task_info.parameters.get("PARAM_LABEL_1")
parameter2 = task_info.parameters.get("PARAM_LABEL_2")
...

Ahora que hemos recopilado esta información, podemos usarla para interactuar con Maestro, como marcar la tarea como finalizada.

...

maestro.finish_task(
    task_id=maestro.task_id,
    status=AutomationTaskFinishStatus.SUCCESS,
    message="Task Finished!"
)
...

Código completo

Incluyendo estos cambios, nuestros archivos se verían así:

bot.py:

# This bot will access BotCity's Youtube channel and collect the number of subscribers.

# Importing the Selenium package
from selenium import webdriver

# Importing the BotCity Maestro SDK
from botcity.maestro import *

# Treatment to collect the parameters passed by the Runner
maestro = BotMaestroSDK.from_sys_args()
# This property prevents exceptions from being thrown when trying to use the BotMaestroSDK while running locally.
maestro.RAISE_NOT_CONNECTED = False

# Setting to use Chrome
driver = webdriver.Chrome(executable_path="<chromedriver.exe path>")

# Accessing the Google homepage
driver.get("https://google.com")

# Searching for BotCity Youtube channel in the search bar
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("BotCity RPA Youtube")

# Clicking on the "I'm Feeling Lucky" button
feeling_lucky_button = driver.find_element_by_xpath("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[3]/center/input[2]")
feeling_lucky_button.click()

# Collecting the number of subscribers from the Youtube page
subscribers = driver.find_element_by_id("subscriber-count").text
print(f"Subscribers Count: {subscribers}")

# Closing the browser
driver.quit()

# Using the SDK to finish the task on Maestro
maestro.finish_task(
    task_id=maestro.task_id,
    status=AutomationTaskFinishStatus.SUCCESS,
    message="Task Finished!"
)

requirements.txt:

# Setting to use this specific version of the package
selenium==3.141.0

# Including BotCity Maestro SDK dependencie
botcity-maestro-sdk

Solo con los cambios anteriores es posible interactuar con las funcionalidades de BotCity Maestro. Ten en cuenta que estos pasos no son obligatorios para poder ejecutar la automatización, solo son necesarios si queremos integrarnos con el orquestador.

Conclusión

En este tutorial has aprendido:

  • Los requisitos mínimos necesarios para orquestar un proyecto personalizado en Python.

  • La configuración básica que debes hacer utilizando los archivos bot.py y requirements.txt.

  • Cómo usar el SDK de BotCity Maestro para integrarte con el orquestador a través de tu proyecto personalizado.