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:
- Leia a saída do
--dry-run. Algo foi reconhecido errado? - Mostre ao agente o arquivo com problema: “
samples/invoice_7.pdfsaiu como 1970-01-01; esse arquivo usa o rótulo ‘Issue date’. Aceite os dois.” - Peça para ele adicionar um teste pequeno para esse caso. Alguns arquivos de exemplo com
pytestbastam. - Quando tudo parecer certo, rode
--applyprimeiro 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
cdpara 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
.bate 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: passfaz o script parecer que funciona enquanto não faz nada. Leia toda linha deexcept. - Formatos de data e número. Números no estilo europeu
1.234,56e datasDD/MM/YYYYcostumam 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-sigou 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.envcompython-dotenve adicione.envao.gitignore. Faça commit de um.env.examplecom 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,mvem massa,pip installde 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,.envfora 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.