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

URL: https://agentvera.dev/pt/blog/build-automation-scraper-with-ai/ · Publicado: 2026-10-11

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.

**Resumo:**

- O agente escreve o script uma vez e depois o script roda sem IA; a maioria dos trabalhos precisa de 50 a 200 linhas, com dry run por padrão e sem sobrescrever nada.
- Use requests e BeautifulSoup quando os dados estão no código-fonte da página, Playwright quando o JavaScript carrega ou é preciso login; prefira uma API oficial e respeite o robots.txt.
- Trate zero resultados como erro e envie um alerta, tente de novo erros transitórios até 3 vezes e use caminhos completos no cron, que não roda com a máquina dormindo.

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](/pt/glossary/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](/pt/glossary/coding-agent/) de terminal serve: Claude Code, Codex, Gemini CLI ou Aider conseguem ler e escrever arquivos e rodar comandos.

```bash
# 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:

```text
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.

```python
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:

```bash
pip install playwright
playwright install chromium
```

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

```text
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:

```text
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:

```bash
# 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](/pt/download/), porque ele facilita alguns passos:

- **Agentes separados, pastas separadas.** No [workspace](/pt/features/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](/pt/glossary/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](/pt/features/agent-browser/). Fica mais fácil ver por que um seletor não bate.
- **Rodando em um servidor.** Na página de [SSH e SFTP](/pt/features/ssh-and-sftp/) você pode copiar o script para um servidor e configurar o crontab lá.
- **Mensagens agendadas para agentes.** As [tarefas agendadas](/pt/features/scheduled-tasks/) 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](/pt/features/code-review/) 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](/pt/blog/ai-agent-workflow-pipeline/); para conectar um agente a ferramentas externas, veja [o que é um servidor MCP](/pt/blog/what-is-mcp-server/).

## 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.

---

**Sobre o AgentVera.** AgentVera é um app desktop para macOS, Windows e Linux, desenvolvido pela Solviera Teknoloji. Ele roda 18 agentes de programação com IA (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) lado a lado, por projeto, em terminais reais com as instalações e logins de CLI do próprio usuário. O plano gratuito tem agentes ilimitados. Baixar: https://agentvera.dev/pt/download/ · Preços: https://agentvera.dev/pt/pricing/
