Ir para o conteúdo

Bot Python Personalizado

Requisitos mínimos

Para poder orquestrar um projeto ou script Python existente, precisaremos basicamente de dois requisitos:

  • bot.py: Um arquivo chamado bot.py que servirá como ponto de entrada para o BotCity Runner. Este arquivo pode ser considerado como o arquivo 'principal' do projeto. Você pode deixar seu código Python diretamente neste arquivo ou simplesmente usá-lo para importar os scripts que deseja executar.

  • requirements.txt: Um arquivo contendo todas as dependências usadas no código. Este arquivo serve como referência para o Runner saber todos os pacotes Python que devem ser instalados ao executar o código.

Criando o arquivo bot.py

Neste tutorial, criaremos um arquivo bot.py contendo um script Python simples que usa Selenium puro. Depois de inserir o código, o arquivo ficará assim:

# Este bot acessará o canal do Youtube da BotCity e coletará o número de inscritos.

# Importando o pacote do Selenium
from selenium import webdriver

# Configurando para usar o Chrome
driver = webdriver.Chrome(executable_path="<caminho para o chromedriver.exe>")

# Acessando a página inicial do Google
driver.get("https://google.com")

# Procurando o canal da BotCity no Youtube na barra de pesquisa
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("BotCity RPA Youtube")

# Clicando no botão "Estou com sorte"
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()

# Coletando o número de inscritos da página do Youtube
subscribers = driver.find_element_by_id("subscriber-count").text
print(f"Subscribers Count: {subscribers}")

# Fechando o navegador
driver.quit()

Info

Você também pode usar o arquivo bot.py apenas para importar seus scripts.

Definindo o arquivo de dependências

Agora, vamos criar nosso arquivo de requisitos contendo as dependências que estamos usando no código.

requirements.txt:

# Configuração para usar esta versão específica do pacote
selenium==3.141.0

Zipando todos os arquivos

Com os arquivos necessários configurados, agora só falta criar um arquivo .zip contendo todos esses arquivos. A estrutura de pastas ficará assim:

CustomBot.zip
├── bot.py <- Arquivo contendo código ou importando outros scripts Python.
└── requirements.txt <- Arquivo que descreve as dependências do Python para seu bot.

Importante

Neste exemplo estamos utilizando apenas os arquivos principais, mas se você tiver uma estrutura com vários scripts Python, por exemplo:

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

Você pode usar o bot.py apenas para chamar seus outros scripts e criar o arquivo .zip da mesma forma. O mais importante é considerar o bot.py como o 'main' do projeto e definir todas as dependências utilizadas no arquivo requirements.txt.

Com o arquivo .zip em mãos, agora podemos implantar este bot e executá-lo através do Maestro e do Runner normalmente. Os passos serão exatamente os mesmos de usar um modelo de projeto. Veja mais detalhes sobre enviar seu bot para o Maestro.

Usando o SDK do BotCity Maestro

Apenas os passos acima já seriam suficientes para rodar nossa automação usando o Maestro e o Runner. Porém, em alguns casos pode ser necessário utilizar a integração com o Maestro para poder enviar alertas e finalizar tarefas, por exemplo.

Para isso, podemos facilmente importar o Maestro SDK no código e usar os métodos normalmente. O único passo necessário é fazer um tratamento para obter os parâmetros que são passados pelo Runner no momento da execução.

Acessando os parâmetros passados pelo Runner

Quando rodamos uma automação pelo BotCity Maestro, o BotCity Runner passa algumas informações por parâmetro ao iniciar a execução, como o server, o task id sendo executado e também o access token.

Para acessar esses valores, podemos verificar se esses parâmetros estão sendo passados e então utilizá-los para instanciar e interagir com o Maestro SDK. O método from_sys_args é responsável por verificar os parâmetros e retornar uma instância do BotMaestroSDK.

# Importando o BotCity Maestro SDK
from botcity.maestro import *

...

# O Runner passa a url do servidor, o id da tarefa que está sendo executada,
# o token de acesso e os parâmetros que esta tarefa recebe (se for o caso).
maestro = BotMaestroSDK.from_sys_args()

# Os parâmetros da tarefa são passados como um dicionário
# Use o label do parâmetro que foi definido para acessar seu valor
task_info = maestro.get_task(maestro.task_id)
parameter1 = task_info.parameters.get("PARAM_LABEL_1")
parameter2 = task_info.parameters.get("PARAM_LABEL_2")
...

Agora que coletamos essas informações, podemos usá-las para interagir com o Maestro, como marcar a tarefa como finalizada.

...

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

Código completo

Incluindo essas alterações, os arquivos do projeto ficariam assim:

bot.py:

# Este bot acessará o canal do Youtube da BotCity e coletará o número de inscritos.

# Importando o pacote do Selenium
from selenium import webdriver

# Importando o pacote do BotCity Maestro SDK
from botcity.maestro import *

# Tratamento para coletar os parâmetros passados pelo Runner
maestro = BotMaestroSDK.from_sys_args()
# Essa propriedade evita que exceções sejam lançadas ao tentar usar o BotMaestroSDK durante a execução local.
maestro.RAISE_NOT_CONNECTED = False

# Configurando para usar o Chrome
driver = webdriver.Chrome(executable_path="<caminho para o chromedriver.exe>")

# Acessando a página inicial do Google
driver.get("https://google.com")

# Procurando o canal da BotCity no Youtube na barra de pesquisa
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("BotCity RPA Youtube")

# Clicando no botão "Estou com sorte"
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()

# Coletando o número de inscritos da página do Youtube
subscribers = driver.find_element_by_id("subscriber-count").text
print(f"Subscribers Count: {subscribers}")

# Fechando o navegador
driver.quit()

# Usando o SDK para finalizar a tarefa no Maestro
maestro.finish_task(
    task_id=maestro.task_id,
    status=AutomationTaskFinishStatus.SUCCESS,
    message="Task Finalizada!"
)

requirements.txt:

# Configuração para usar esta versão específica do pacote
selenium==3.141.0

# Incluindo a dependência do BotCity Maestro SDK
botcity-maestro-sdk

Somente com as alterações acima já seria possível interagir com as funcionalidades do BotCity Maestro. Observe que essas etapas não são obrigatórias para poder executar a automação, são necessárias apenas se quisermos integrar com o orquestrador.

Info

Veja mais detalhes sobre o uso e as funcionalidades do BotCity Maestro SDK.

Conclusão

Neste tutorial você aprendeu:

  • Os requisitos mínimos necessários para orquestrar um projeto Python customizado.

  • A configuração básica que você precisa fazer usando os arquivos bot.py e requirements.txt.

  • Como usar o BotCity Maestro SDK para integração com o orquestrador por meio de seu projeto customizado.