Ir para o conteúdo

Conteúdo Extra: Plugins BotCity

Plugins BotCity

É muito comum em rotinas de automação necessitar fazer uma integração com ferramentas externas ou serviços de terceiros, para que um processo seja executado do inicio ao fim por um robô.

Os plugins de BotCity são uma coleção de trechos de código que podem ser usados para estender a funcionalidade da BotCity e acelerar o processo de desenvolvimento.

Conecte seu código com serviços de terceiros, como Amazon AWS, Google Cloud, Hashicorp Vault, Microsoft Office, CSV e muito mais.

Veja aqui todos os plugins BotCity disponíveis para uso.

Utilizando plugin CSV BotCity

Neste exemplo, incluiremos o uso do plugin CSV no robô BotYoutube. O objetivo é permitir que a automação leia um arquivo CSV com informações dos canais (botcity_br, botcity-dev, youtube, github) e utilize essas informações para pesquisar numero de inscritos e quantidade de vídeos do canal.

Para utilizar o Plugin CSV BotCity é necessário:

  • Instalar o Plugin com o comando: pip install botcity-csv-plugin
  • Importar o plugin para o seu código, neste caso, vamos importar o plugin no arquivo bot.py: from botcity.plugins.csv import BotCSVPlugin
  • Instanciar o Plugin CSV no arquivo bot.py: bot_csv = BotCSVPlugin()

Veja abaixo como deverá ficar seu código:

from botcity.plugins.csv import BotCSVPlugin

def main():
    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"

    bot_csv = BotCSVPlugin()

    ...

def not_found(label):
    print(f"Element not found: {label}")

if __name__ == '__main__':
    main()

Nota

Os plugins BotCity são pacotes python disponíveis no PyPI, por isso, sempre que for utilizar algum plugin será necessário passar pela etapa de instalação via pip install.

Lendo conteúdo do CSV

Para este exemplo, utilizaremos um arquivo CSV chamado canais_youtube.csv com o seguinte conteúdo:

Canais
botcity_br
botcity-dev
youtube
github

Para ler o conteúdo do CSV, será necessário inclui no seu código o seguinte trecho:

# Ler arquivo CSV moedas.csv
bot_csv.read('canais_youtube.csv')

Nota

O método read recebe como parâmetro o caminho do CSV a ser lido, neste caso o CSV está alocado no caminho raiz do projeto, caso esteja em outro caminho, certifique-se de defini-lo corretamente.

Retornando o conteúdo do CSV como uma lista de Python

O Plugin CSV da BotCity possuí vários métodos que facilitam a leitura e manipulação dos dados do CSV, neste exemplo utilizaremos o método as_list, que retorná o conteúdo do arquivo como uma lista, desta forma, podemos substituir a lista hardcoded de canais, pelo retorno do método as_list, veja abaixo como fazer essa manipulação:

# Ler arquivo CSV moedas.csv
dados_csv = bot_csv.read('canais_youtube.csv')
canais = dados_csv.as_list()

# Printado dados como lista
# print(dados_como_lista)

# Retorno do print
# [['botcity_br'], ['botcity-dev'], ['youtube'], ['github']]

Pesquisando os canais a partir do retorno de dados do CSV

Com o retorno dos dados como uma lista, fica fácil iterar sobre eles e fazer a pesquisa canais do Youtube dinamicamente com os dados presentes no CSV.

No código, incluiremos uma estrutura de repetição for para iterar sobre os dados retornado do CSV, e faremos um tratamento na variável canal para ela sempre retornar o index zero (canal[0]) da lista, veja abaixo como fazer essa manipulação

No código

# Ler arquivo CSV canais_youtube.csv
dados_csv = bot_csv.read('canais_youtube.csv')
canais = dados_csv.as_list()

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

    # 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}")

Seu código completo ficará assim:

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

from botcity.plugins.csv import BotCSVPlugin

# 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():
    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"

    bot_csv = BotCSVPlugin()

    # Ler arquivo CSV canais_youtube.csv
    dados_csv = bot_csv.read('canais_youtube.csv')
    # Lista de canais do Youtube a ser pesquisada
    canais = dados_csv.as_list()

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

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

Desafios

Desenvolvemos uma automação web que acessa canais de YouTube e coleta informações sobre cada um deles, ao final mostra na tela as informações de nome do canal, número de inscritos e quantidade de vídeos.

1 - Você pode testar incluir as funcionalidades do uso do Plugin do CSV, ou de qualquer outro plugin BotCity no robô BotSicalc construído no Lab 1.3: Desenvolvendo automação Desktop.

2 - faça melhorias no código, como:

  • Navegar na página com BotCity Web Inspector e coletar informações diferentes;
  • Separar responsabilidades em funções;
  • Adicionar tratamento de exceções;
  • Adicionar canais dinamicamente;
  • Estruturar a saída das informações em um arquivo CSV: