Ir para o conteúdo

Lab 2.1: Automação para integração no Orquestrador

Sobre a automação

Para exercitar as funcionalidades do Orquestrador BotCity Maestro vamos utilizar a automação Web que desenvolvemos no lab 1.5:

  • Acessa o site do Google.
  • Pesquisa pela cotação do Dólar.
  • Consome o valor da cotação através da manipulação da DOM.

Com essa automação integraremos as seguintes funcionalidades do Orquestrador BotCity Maestro:

  • Estado de Tarefas: finalizar a tarefa com sucesso ou falha.
  • Parametrização de Tarefas: receber o canal do YouTube como um parâmetro.
  • Erros: enviar mensagens de erros em caso de falhas.
  • Alerta: emitir alerta de informação no início do processo.
  • Logs: registrar entrada de log para cada execução com data e hora da coleta dos dados, nome do canal e número de inscritos.
  • Arquivos de Resultado: enviar captura de tela de cada canal para o Orquestrador BotCity Maestro.
  • Agendamento: agendar a execução da tarefa.

O código completo fica semelhante a esse aqui:

# Import de Web Bot
from botcity.web import WebBot, Browser, By

# Import de integração com BotCity Maestro SDK
from botcity.maestro import *

# Desativa mensagem de erros por não estar conectado ao Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False


def main():
    # Instancia do BotMaestroSDK
    maestro = BotMaestroSDK.from_sys_args()
    # Objeto com informações da execução
    execution = maestro.get_execution()

    print(f"Task ID is: {execution.task_id}")
    print(f"Task Parameters are: {execution.parameters}")

    bot = WebBot()

    # Configuração do modo headless
    bot.headless = False

    # Configuração do navegador
    bot.browser = Browser.FIREFOX

    # Caminho para o webdriver
    bot.driver_path = r"resources\geckodriver.exe"

    # Lista de canais para pesquisar
    canais = ['botcity_br', 'botcity-dev', 'youtube', 'github']

    for canal in canais:
        # Inicia o navegador
        bot.browse(f"https://www.youtube.com/@{canal}")

        # Retorna lista de elementos
        element = bot.find_elements(selector='//span[@class="yt-core-attributed-string yt-content-metadata-view-model-wiz__metadata-text yt-core-attributed-string--white-space-pre-wrap yt-core-attributed-string--link-inherit-color" and @role="text"]', by=By.XPATH)

        # Captura o texto de cada elemento
        nome_canal = element[0].text
        numero_inscritos = element[1].text
        quantidade_videos = element[2].text
        print(f"Nome do canal: {nome_canal} | Número de inscritos: {numero_inscritos} | Quantidade de vídeos: {quantidade_videos}")


        # Finaliza o navegador
        bot.wait(3000)
        bot.stop_browser()


if __name__ == '__main__':
    main()