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: