Crie um script de automação com IA: bots e scrapers

Crie um script de automação com IA: Python para arquivos, Excel e e-mails, scraping com requests ou Playwright, cron, retries, alertas e limites legais.

Solviera Teknoloji 10 min de leitura

Para criar um script de automação com IA, você descreve um trabalho repetitivo para um agente de código e testa o pequeno script em Python que ele escreve. Renomear arquivos, juntar arquivos Excel e CSV, um relatório semanal por e-mail ou um scraper que acompanha preços em um site costumam precisar de 50 a 200 linhas. A parte difícil não é o prompt: é descrever a entrada com precisão, conferir a saída, agendar o script e ficar sabendo quando ele quebrar.

Este post vai do zero até uma automação funcionando: o que instalar, qual ferramenta escolher em cada caso, o que dizer primeiro ao agente, como testar e como rodar todo dia com o cron. Também falo do lado legal e ético do scraping, porque a IA não vai pensar nisso por você.

O que “automação com IA” significa aqui

Não estou falando de um modelo fazendo o trabalho sozinho toda vez. O agente escreve um script uma vez; a partir daí o script roda do mesmo jeito todo dia, sem nenhuma IA. Essa diferença importa: um script é barato, repetível e você consegue ler o que ele faz. Uma configuração que chama um modelo todo dia custa mais e é mais difícil de prever.

Isto é vibe coding: você não escreve o código linha por linha, descreve o que quer e orienta o resultado. Automações combinam bem com isso porque o objetivo é claro e o resultado é fácil de conferir: os arquivos foram nomeados corretamente, a planilha tem as linhas certas?

Quais trabalhos valem a pena automatizar?

Um bom candidato se repete com frequência, tem regras que dá para escrever e pode ser desfeito se der errado. Exemplos do dia a dia:

  • Arquivos: renomear as notas fiscais da pasta Downloads pela data e movê-las para pastas de ano/mês.
  • Excel e CSV: juntar os arquivos de vendas que cada filial envia, tirar as linhas vazias, montar uma planilha de resumo.
  • Relatórios por e-mail: puxar dados de uma pasta ou de um banco de dados toda semana e enviar um resumo para você ou para a sua equipe.
  • Monitorar a web: acompanhar o preço de um produto, novos itens em uma página de anúncios ou uma página de comunicados, e ser avisado quando algo mudar.

Para qualquer coisa em que uma pessoa deve continuar no controle (pagar alguém, enviar um contrato), pare a automação em “prepare, eu aprovo”.

Passo 1: instale as ferramentas

Você precisa de um agente de código e de Python. Qualquer agente de código de terminal serve: Claude Code, Codex, Gemini CLI ou Aider conseguem ler e escrever arquivos e rodar comandos.

# Is Python 3 installed?
python3 --version

# project folder and virtual environment
mkdir invoice-sorter && cd invoice-sorter
git init
python3 -m venv .venv
source .venv/bin/activate      # Windows: .venv\Scripts\activate

Por que Python? As bibliotecas de automação são maduras: pandas e openpyxl para planilhas, requests para HTTP, beautifulsoup4 para ler HTML, playwright para um navegador. Os agentes já viram muito código usando essas bibliotecas, então erram menos. Transformar a pasta em um repositório git permite desfazer qualquer mudança que o agente fizer.

Passo 2: o primeiro prompt

Um pedido vago gera um script vago. Uma boa primeira mensagem tem a entrada, a saída, as regras e os casos-limite. Coloque dois ou três arquivos reais de exemplo na pasta (falsos, se tiverem dados pessoais) e aponte o agente para eles:

Write a Python script: rename_invoices.py

Input: PDF invoices in ./inbox. Examples are in ./samples.
Page one of each PDF has an "Invoice date: DD/MM/YYYY" line and a "Company:" line.

What it does:
- Rename the file to YYYY-MM-DD_company-name.pdf (lowercase, hyphens instead of spaces).
- Move it to ./archive/YYYY/MM/.
- If the date or company can’t be read, leave the file alone, copy it to ./failed and log it.

Rules:
- Run as --dry-run by default: print what it would do, touch nothing.
- Require an --apply flag for the real run.
- Never overwrite an existing file; append -2 instead.
- List dependencies in requirements.txt.
- When done, run it on ./samples with --dry-run and show me the output.

Duas regras aqui valem ser copiadas para toda automação: dry run por padrão e nunca sobrescrever. Se o agente ler uma data errado, você recebe uma lista para revisar em vez de centenas de arquivos movidos para o lugar errado.

Passo 3: itere e teste

A primeira versão raramente lida com todos os arquivos. O ciclo:

  1. Leia a saída do --dry-run. Algo foi reconhecido errado?
  2. Mostre ao agente o arquivo com problema: “samples/invoice_7.pdf saiu como 1970-01-01; esse arquivo usa o rótulo ‘Issue date’. Aceite os dois.”
  3. Peça para ele adicionar um teste pequeno para esse caso. Alguns arquivos de exemplo com pytest bastam.
  4. Quando tudo parecer certo, rode --apply primeiro em uma cópia, depois na pasta real.

Para trabalhos com Excel e CSV, a conferência é mais simples: compare o número de linhas da entrada com os totais da saída. Faça o próprio script verificar algo como “o arquivo combinado deve ter 1.240 linhas e este total de receita”. Código que roda não prova que ele calcula certo.

Passo 4: o scraper — requests ou Playwright?

A primeira decisão no scraping é como a página é construída. Clique com o botão direito, escolha “Exibir código-fonte da página” e procure ali os dados que você quer (o preço, o título).

Se estiverem no código-fonte, requests e BeautifulSoup bastam. São rápidos, não abrem navegador e colocam pouca carga no servidor.

import requests
from bs4 import BeautifulSoup

HEADERS = {"User-Agent": "price-tracker/1.0 (contact@example.com)"}

resp = requests.get("https://example.com/product/123", headers=HEADERS, timeout=20)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
price = soup.select_one(".product-price")
if price is None:
    raise RuntimeError("Price element not found; the page layout may have changed")
print(price.get_text(strip=True))

Se o conteúdo chega depois via JavaScript, ou se você precisa fazer login, clicar ou rolar a página, precisa de um navegador de verdade. O Playwright é uma escolha comum:

pip install playwright
playwright install chromium

Não diga ao agente qual usar; peça para ele verificar primeiro:

I want the product names and prices from https://example.com/category/headphones.
First check robots.txt and the page source: is the data in the HTML, or loaded
by JavaScript? If the site has a public API or a JSON endpoint, prefer it.
Then pick the simplest approach and explain why.
Wait at least 3 seconds between requests and visit at most 5 pages.
Write the result to products.csv.

Uma dica: em muitos sites que você abre com o Playwright, a aba de rede do navegador mostra que os dados na verdade vêm de uma requisição JSON. Chamar esse endpoint direto pode ser mais robusto e mais leve, mas ele continua sujeito aos termos do site.

Limites legais e éticos: robots.txt, termos, GDPR

Uma IA escreve sem problema um código que faz scraping de um site; se você deve fazer isso é decisão sua. Isto não é aconselhamento jurídico, mas estas são as minhas regras de trabalho:

  • API oficial primeiro. Muitos sites, corretoras, transportadoras e órgãos públicos oferecem seus dados por uma API. Ela é mais estável, as regras são explícitas e ela não quebra quando o design da página muda.
  • Leia o robots.txt e os termos de uso. Se os termos proíbem acesso automatizado ou o robots.txt bloqueia o caminho, não faça. Fazer scraping de páginas atrás de login normalmente viola os termos.
  • Fique longe de dados pessoais. Coletar nomes, telefones ou e-mails cai sob a GDPR (e a KVKK na Turquia); sem uma finalidade, uma base legal e um prazo de retenção, não colete.
  • Vá devagar. Espere alguns segundos entre as requisições, envie uma de cada vez, não busque de novo páginas que você já tem. Use um User-Agent que identifique você.
  • Cuidado com direitos autorais. Acompanhar um preço para você é diferente de copiar o conteúdo de alguém e republicar.
  • Não brigue com as defesas. Resolver CAPTCHAs, trocar de IP ou contornar a proteção de login são sinais de que o site não quer você ali.

Passo 5: erros, retries e alertas

Um script que funciona hoje quebra em silêncio na semana que vem: o site muda o layout, alguém adiciona uma coluna na planilha, a rede cai. Pedir isto logo no começo poupa dor de cabeça:

Harden the script for daily use:
- Add timeouts to network requests; on transient errors (connection error, 429, 5xx)
  retry up to 3 times with increasing waits. Don’t retry 4xx errors.
- Log every run to logs/YYYY-MM-DD.log.
- Treat zero results, or a missing expected field, as an error.
- On error, email me using the SMTP settings in .env, with a summary of the error
  and the path of the log file.
- Send nothing on success.

“Zero resultados é erro” é a regra que mais compensa. A maioria dos scrapers não trava quando quebra; eles geram um CSV vazio. Em vez de e-mail, você pode usar webhooks e APIs de bot do Slack ou do Telegram; escolha o que você realmente vai notar.

Passo 6: agende com o cron

Com o script pronto, o jeito mais simples de rodá-lo com regularidade no macOS e no Linux é o cron. Rode crontab -e e adicione:

# Run every day at 08:30
30 8 * * * cd /Users/you/price-tracker && .venv/bin/python track.py >> logs/cron.log 2>&1

Pontos de atenção:

  • O cron não carrega o ambiente do seu shell. Use o caminho completo do Python (o que está dentro do ambiente virtual) e faça cd para a pasta.
  • O cron não roda enquanto a máquina dorme. Para trabalhos que precisam rodar todo dia, um servidor Linux pequeno ou um workflow agendado do GitHub Actions é mais confiável.
  • No Windows, o Agendador de Tarefas faz o mesmo trabalho; peça ao agente um arquivo .bat e os passos de configuração.
  • Confira os logs todo dia na primeira semana.

O que a IA costuma errar

  • Inventar seletores. Sem ver a página, o agente chuta uma classe CSS como .price. Dê a ele o HTML real, ou peça para baixar e inspecionar a página.
  • Engolir erros. Um bloco except: pass faz o script parecer que funciona enquanto não faz nada. Leia toda linha de except.
  • Formatos de data e número. Números no estilo europeu 1.234,56 e datas DD/MM/YYYY costumam ser lidos errado. Compare na mão alguns valores da saída com a fonte.
  • Codificação. Se um CSV com acentos aparece embaralhado, peça para ele tentar utf-8-sig ou a codificação antiga correta.
  • Mensagens de sucesso confiantes demais. “O script está pronto e testado” não é prova por si só. Olhe a saída você mesmo.
  • Dependências demais. Subir automação de navegador ou um framework para um trabalho de dez linhas. Peça a solução mais simples.

Segurança

  • Segredos ficam no .env. Senhas SMTP, chaves de API e logins nunca vão no código; leia-os do .env com python-dotenv e adicione .env ao .gitignore. Faça commit de um .env.example com valores fictícios.
  • Nunca cole uma chave no chat. Não digite “minha chave é …” para o agente. Conversas podem ser armazenadas e acabar em logs. Dê só o nome da variável: “leia da variável de ambiente SMTP_PASSWORD.”
  • Leia os comandos que o agente roda. Principalmente rm, mv em massa, pip install de pacotes que você não conhece e qualquer coisa que envie dados para fora. Se não tiver certeza, não aprove.
  • Privilégio mínimo. Use uma senha de app para uma conta de e-mail e uma chave somente leitura para uma API.

Fazendo isso com o AgentVera

Tudo isso funciona em um terminal comum com um agente. Quando rodo várias automações ao mesmo tempo, uso o AgentVera, porque ele facilita alguns passos:

  • Agentes separados, pastas separadas. No workspace, o Claude Code pode escrever o scraper em um painel enquanto o Codex monta o relatório em Excel em outro. Se eles compartilham um repositório, dê a cada um o próprio git worktree para evitar colisões.
  • Navegador do agente. Agentes que usam Playwright controlam um Chrome com perfil próprio, e você acompanha ao vivo o que eles fazem no navegador do agente. Fica mais fácil ver por que um seletor não bate.
  • Rodando em um servidor. Na página de SSH e SFTP você pode copiar o script para um servidor e configurar o crontab lá.
  • Mensagens agendadas para agentes. As tarefas agendadas agendam uma mensagem para um agente, não o seu script. Por exemplo, uma vez por semana: “leia os logs e resuma as falhas”. A execução diária continua sendo trabalho do cron.
  • Revise o diff. A revisão de código confere cada turno terminado, o que ajuda a pegar erros engolidos na etapa de reforço do script.

Se você quer encadear agentes, veja pipelines de fluxo de trabalho com agentes de IA; para conectar um agente a ferramentas externas, veja o que é um servidor MCP.

Checklist rápido

  • Entrada, saída e casos-limite escritos no primeiro prompt
  • Dry run por padrão, sem sobrescrever
  • Testado em arquivos de exemplo, alguns resultados conferidos na mão
  • API oficial preferida quando existe; robots.txt e termos lidos
  • Intervalos entre requisições, timeouts e retries limitados
  • Zero resultados contam como falha, falhas enviam um alerta
  • Segredos no .env, .env fora do git
  • Caminhos completos na linha do cron, logs conferidos na primeira semana

Conclusão

O truque para criar automações com IA é dar ao agente um trabalho pequeno e bem descrito e depois tratar o script que ele escreve como software: dry runs, testes, logs, alertas. No lado do scraping, a escolha técnica é fácil (requests se está no código-fonte, Playwright se não está); a parte mais difícil é respeitar os limites e escolher o caminho oficial quando ele existe. Para a sua primeira automação, escolha uma tarefa que você fez na mão três vezes esta semana, adapte o prompt acima e comece com um dry run.

Perguntas frequentes

Dá para criar automações com IA sem saber programar?

Para automações simples, sim: você descreve o trabalho para um agente de código, ele escreve o script em Python e você testa com arquivos de exemplo. Saber o suficiente para ler o que o script faz ainda ajuda a perceber quando um resultado está errado.

Web scraping é legal?

Depende. Buscar dados públicos em um ritmo razoável é aceitável em muitos casos, mas os termos de uso do site, o robots.txt, os direitos autorais e as leis de dados pessoais (GDPR, KVKK) impõem limites. Se o site oferece uma API oficial, use-a primeiro.

Devo usar requests e BeautifulSoup ou Playwright?

Se os dados aparecem no código-fonte HTML da página, requests e BeautifulSoup são mais rápidos e leves. Se o conteúdo é carregado por JavaScript, ou se você precisa fazer login ou clicar, use um navegador de verdade, como o Playwright.

Como rodo um script de automação todo dia?

Use o cron no macOS e no Linux, ou o Agendador de Tarefas no Windows. Se ele precisa rodar com o computador desligado, leve-o para um servidor pequeno ou para um job de CI agendado, como o GitHub Actions.

Como fico sabendo quando meu scraper quebra?

Faça o script enviar um e-mail, uma mensagem no Slack ou no Telegram quando falhar, e trate falhas silenciosas como “zero linhas encontradas” também como erro. Gravar cada execução em um arquivo de log facilita ver quando o problema começou.

Reúna seus agentes em uma só mesa.

Baixe o AgentVera de graça; as CLIs que você já instalou estão prontas para usar.

Mais artigos