Semana 09: Automação com BotCity + Python e Desafios de Desenvolvimento

Data: 13 de Setembro

Atividade: Desenvolvimento de Bot Kindle com BotCity + Python

Nesta semana, a atividade foi criar um bot que automatizasse a busca pelo Kindle no site da Amazon, utilizando a plataforma BotCity e Python. O bot deveria:

  • Acessar o site: Amazon
  • No campo de pesquisa, buscar por "Kindle"
  • Identificar e capturar o preço do produto em dólar
  • Converter o valor de dólar para real, utilizando a API disponível em: AwesomeAPI
  • Exibir os seguintes dados:
    • Nome do Produto: Kindle
    • Valor em Dólar: XXX
    • Valor em Real: XXX

Video de demonstração do Bot operando:

Foi um exercício prático que permitiu colocar em prática conceitos de automação e integração de APIs externas.

Primeiro Contato com o Miro: Dinâmica de Interação

Além da atividade técnica, tivemos nosso primeiro contato com o "Você já conhece o Miro?", uma ferramenta de colaboração visual. O objetivo foi refletir sobre a semana de forma interativa. Os quadros abordaram perguntas como:

  • Qual o destino das suas próximas férias?
  • Vamos nos conhecer?
  • O que você mais gostou de fazer nesta semana?
  • O que menos gostou de fazer nesta semana?
  • O que podemos melhorar?
  • O que você espera da próxima semana?
Quadro no miro

Cada participante arrastou post-its virtuais para responder às questões, promovendo uma interação dinâmica e descontraída.

Escolha do Tech Leader da Semana

Para os desafios do LG, foi escolhida Natália como Tech Leader da semana. Ela terá a responsabilidade de gerenciar a equipe no desenvolvimento dos seguintes desafios:

Desafio 2: Extração de Informações de um PDF Fictício e Envio por Email
Desafio 3: Automação de Cadastro de Novos Produtos no ERP Fakturama com BotCity a partir de um JSON
Tech Leader Natália 

Data: 16 de Setembro

Atividade: Desenvolvimento dos Desafios LG - Foco em Automação

Nesta semana, avançamos no desenvolvimento dos desafios propostos pela equipe de mentoria, focando em dois casos práticos de automação usando Python e BotCity.

Desafio 2: Extração de Informações de um PDF Fictício e Envio por Email

Objetivo: Criar um script em Python capaz de extrair dados específicos de um arquivo PDF, salvar essas informações em um arquivo Excel, e, em seguida, enviar o relatório via e-mail.

Etapas de Desenvolvimento:

Configuração do Ambiente de Desenvolvimento:
    • Criamos um ambiente virtual isolado para gerenciar as dependências com o Anaconda, versão 3.10 do python.
    • Instalamos as bibliotecas necessárias, como PyPDF2 para manipulação de PDFs, pandas para organizar os dados, openpyxl para manipulação de arquivos Excel e smtplib para envio de e-mails.

Extração dos Dados do PDF:

    • Utilizamos o PyPDF2 para realizar a leitura do PDF fictício e extração das informações desejadas.

Organização dos Dados em Excel:

    • As informações extraídas foram organizadas em um DataFrame usando pandas e depois exportadas para um arquivo Excel usando openpyxl.

Envio do Relatório por E-mail:

    • Implementamos o envio automático do arquivo Excel via e-mail utilizando o SMTP do Google. Para isso, integramos o BotEmailPlugin da BotCity para facilitar a automação do envio.

Referência: Documentação do BotEmailPlugin

Video de funcionamento do Bot


Estrutura do desenvolvimento do Bot

Carregamento das Bibliotecas:

  • As bibliotecas principais foram importadas, como BotEmailPlugin para envio de e-mails, PyPDF2 para leitura de PDFs, pandas para organizar os dados em um arquivo Excel, re para expressões regulares, e dotenv para carregar as credenciais de e-mail a partir de variáveis de ambiente.

Leitura do PDF e Extração de Texto:

  • Para ler o conteúdo do PDF, foi utilizada a biblioteca PyPDF2. O arquivo é aberto, e o texto de todas as páginas é concatenado.

Portugol:

função extrair dados do pdf

Extração de Dados com Expressões Regulares:

  • A expressão regular foi utilizada para extrair uma tabela formatada diretamente do texto. A regex identifica padrões que incluem um número de item, segmento artístico, tipo, duração e valor em reais. Isso permite uma captura precisa dos dados dentro do texto PDF.

Portugol:

função extrair tabela

Salvamento dos Dados em Excel:

  • Os dados extraídos são organizados em um DataFrame utilizando a biblioteca pandas e salvos como um arquivo Excel. Isso facilita a visualização e manipulação dos dados posteriormente.

Portugol:

função salvar extração no excel

Envio de E-mail com o Arquivo Anexo:
  • Utilizando o BotEmailPlugin, o bot configura a conexão com o servidor SMTP do Gmail, autentica o e-mail, e envia o arquivo Excel extraído como anexo. O corpo do e-mail é configurado em HTML para uma apresentação mais amigável.

Portugol:

função enviar email

Pontos Chave

  • Expressão Regular (Regex): A utilização da expressão regular foi essencial para identificar corretamente os dados estruturados no PDF. O padrão estabelecido permitiu que o bot extraísse com precisão itens como número do item, segmento, tipo, duração e valor.

  • Manipulação de Dados com pandas: Após a extração, os dados são organizados de forma estruturada em um DataFrame, o que permite uma fácil manipulação e exportação para um arquivo Excel.

  • Envio de E-mail Automático: A automação do envio de e-mails foi facilitada pelo uso do BotEmailPlugin, que permitiu a integração com o servidor SMTP do Gmail e o envio do relatório de forma rápida e segura.

Desafio 3: Automação de Cadastro de Novos Produtos no ERP Fakturama com BotCity

Objetivo: Criar um script que, utilizando o BotCity Desktop Bot, preencha automaticamente o cadastro de novos produtos no ERP Fakturama com dados extraídos de um arquivo JSON.

Etapas de Desenvolvimento:

Carregamento do JSON:

    • Utilizamos a biblioteca json do Python para carregar os dados de um arquivo JSON com informações de novos produtos.
Arquivo Json

Iteração e Preenchimento Automático:

    • Iteramos sobre a lista de produtos do JSON e, usando a automação do BotCity Desktop Bot, os campos do ERP Fakturama foram preenchidos automaticamente.

Uso da Visão Computacional:

    • Utilizamos técnicas de visão computacional do BotCity para identificar e interagir com os campos e botões na interface gráfica do ERP Fakturama.

Ferramentas Utilizadas:

  • json: Para manipulação dos dados JSON.
  • botcity-core: Para automação da interface gráfica do ERP.
  • Pillow: Para processamento de imagens e suporte à visão computacional.

Video de funcionamento do Bot


Estrutura do desenvolvimento do Bot

Leitura e Manipulação de Arquivo JSON

A manipulação de arquivos JSON foi um dos primeiros passos. O arquivo continha informações detalhadas dos produtos que seriam cadastrados no sistema. A função json.load() foi utilizada para ler e interpretar os dados de maneira estruturada, tornando-os acessíveis para o preenchimento no ERP.

Uso da Biblioteca BotCity

A biblioteca BotCity foi essencial para a interação com o ERP Fakturama. Foi usada para localizar os campos da interface gráfica e automatizar o preenchimento das informações.

  • Execução do Fakturama: O bot executa o aplicativo diretamente a partir do sistema operacional, garantindo que o ambiente de trabalho esteja pronto para as ações.

    bot.execute(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Fakturama\Fakturama.exe (win64).lnk")
  • Interação com a Interface: Com a função bot.find(), foram localizados os campos do formulário de cadastro de produtos. Posteriormente, o preenchimento foi feito através do bot.paste() e navegação com bot.tab().

    bot.paste(produto['item_number']) # Número do item
    bot.tab()
    bot.paste(produto['name']) # Nome do produto
Formatação de Dados

Um ponto importante foi a formatação de campos numéricos e valores monetários para garantir que estivessem no formato adequado para o sistema ERP:
price = format(float(produto['price']), '.2f') cost = format(float(produto['cost']), '.2f') allowance = format(float(produto['allowance']), '.2f')

Esse tratamento garante que valores como preço e custo sejam sempre inseridos com duas casas decimais, conforme esperado pelo sistema.

Fluxo de Navegação e Controle

Após preencher cada produto, o bot salva as informações e fecha a janela de cadastro, utilizando uma abordagem sequencial de ações:

# Salvar o cadastro do produto if not bot.find("save", matching=0.97, waiting_time=10000): not_found("save") bot.click() # Fechar a janela do produto bot.control_w()

Data: 17 de Setembro

Finalização e Organização dos Bots (Desafios 2 e 3)

Neste dia, focamos na finalização e otimização dos bots desenvolvidos nos Desafios 2 e 3, além da organização do repositório no GitHub, atualização do quadro Kanban e preparação dos slides para a apresentação.

Tarefas Realizadas

Melhoramento do Código:
  • Revisamos o código dos bots desenvolvidos para os desafios de extração de dados de PDF e automação de cadastro de produtos no ERP Fakturama. O objetivo foi simplificar a lógica e garantir que o código estivesse otimizado para melhor performance e legibilidade.

Ações Principais:
  • Remoção de redundâncias: Simplificamos as funções, eliminando qualquer duplicação de lógica ou partes que poderiam ser refatoradas.
  • Comentários e documentação: Adicionamos comentários detalhados em todas as funções para garantir que qualquer desenvolvedor que acesse o código possa compreendê-lo facilmente.
  • Testes adicionais: Foram implementados testes simples para garantir que o fluxo do bot estivesse funcionando corretamente em diferentes cenários de entrada, tanto para o PDF quanto para o JSON no cadastro de produtos.

Otimização:

  • Otimização de expressões regulares: No Desafio 2, melhoramos o padrão de regex para garantir uma extração mais robusta dos dados do PDF, considerando possíveis variações no formato dos números ou texto.
  • Otimização no loop de cadastro de produtos no ERP (Desafio 3): Revisamos o loop que interage com a interface do Fakturama, tornando-o mais eficiente no preenchimento de dados, minimizando o tempo de execução.

Melhorias no Repositório:
  • Foi criada uma pasta específica no repositório GitHub para agrupar todos os desafios da LG, facilitando a navegação e a separação dos diferentes projetos. Cada desafio tem sua própria subpasta, o que ajuda a manter o código mais organizado e de fácil acesso. A estrutura ficou assim:

Essa organização permite que cada desafio tenha seu próprio espaço para ajustes, histórico de commits e colaboração.

Atualização do Quadro Kanban:

  • Realizamos a atualização do quadro Kanban, marcando como concluídas as tarefas relacionadas ao desenvolvimento dos bots e às melhorias de código. 
Quadro Kaban

Conclusão

Com a finalização e organização dos bots, garantimos que todo o código está otimizado e pronto para ser demonstrado de maneira eficaz. Além disso, o repositório GitHub foi organizado de maneira clara para facilitar a manutenção e possíveis atualizações futuras. 

Até a proxima!!!

3 comments

Write comments
Unknown
AUTHOR
7 de outubro de 2024 às 18:42 delete

This is an interesting approach to solving the problem! I like it!

Reply
avatar
Kanan
AUTHOR
7 de outubro de 2024 às 19:02 delete

Esta é uma explicação maravilhosa e fácil de entender mesmo para pessoas que não estão familiarizadas com a área.

Reply
avatar