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