# Créer un script d’automatisation avec l’IA : bots

URL: https://agentvera.dev/fr/blog/build-automation-scraper-with-ai/ · Publié: 2026-10-11

Créer un script d’automatisation avec l’IA : Python pour fichiers, Excel et e-mails, scraping avec requests ou Playwright, cron, relances, alertes et limites légales.

**En bref:**

- L’agent écrit le script une fois, puis le script tourne sans IA ; la plupart des tâches demandent 50 à 200 lignes, avec un essai à blanc par défaut et sans écrasement.
- Utilisez requests et BeautifulSoup quand les données sont dans le source de la page, Playwright quand JavaScript les charge ou qu’une connexion est requise ; préférez une API officielle et respectez robots.txt.
- Traitez zéro résultat comme une erreur et envoyez une alerte, relancez les erreurs transitoires jusqu’à 3 fois, et donnez à cron des chemins complets : il ne tourne pas quand la machine est en veille.

Pour créer un script d’automatisation avec l’IA, vous décrivez une tâche répétitive à un agent de code et vous testez le petit script Python qu’il écrit. Renommer des fichiers, fusionner des fichiers Excel et CSV, un rapport hebdomadaire par e-mail ou un scraper qui suit les prix d’un site demandent en général 50 à 200 lignes. Le plus dur n’est pas le prompt : c’est de décrire précisément l’entrée, de vérifier la sortie, de planifier le script et d’être prévenu quand il casse.

Cet article va de zéro à une automatisation qui fonctionne : ce qu’il faut installer, quel outil choisir et quand, ce qu’il faut dire d’abord à l’agent, comment tester et comment l’exécuter chaque jour avec cron. J’aborde aussi les aspects légaux et éthiques du scraping, parce que l’IA n’y pensera pas à votre place.

## Ce que « automatisation avec l’IA » veut dire ici

Je ne parle pas d’un modèle qui fait lui-même le travail à chaque fois. L’agent écrit un script une fois ; ensuite le script s’exécute de la même façon chaque jour, sans aucune IA. Cette distinction compte : un script coûte peu, est reproductible et vous pouvez lire ce qu’il fait. Une mise en place qui appelle un modèle chaque jour coûte plus cher et est plus difficile à prévoir.

C’est du [vibe coding](/fr/glossary/vibe-coding/) : vous n’écrivez pas le code ligne par ligne, vous décrivez ce que vous voulez et vous orientez le résultat. Les automatisations s’y prêtent bien parce que l’objectif est clair et que le résultat se vérifie facilement : les fichiers sont-ils bien nommés, la feuille contient-elle les bonnes lignes ?

## Quelles tâches valent la peine d’être automatisées ?

Un bon candidat se répète souvent, obéit à des règles que vous pouvez écrire et peut être annulé en cas de problème. Exemples du quotidien :

- **Fichiers :** renommer les factures de votre dossier Téléchargements selon la date et les ranger dans des dossiers année/mois.
- **Excel et CSV :** fusionner les fichiers de ventes envoyés par chaque agence, supprimer les lignes vides, construire une feuille de synthèse.
- **Rapports par e-mail :** extraire chaque semaine des données d’un dossier ou d’une base et envoyer un résumé à vous-même ou à votre équipe.
- **Surveillance du web :** suivre le prix d’un produit, les nouvelles entrées d’une page d’annonces ou d’une page d’actualités, et être prévenu quand quelque chose change.

Pour tout ce qui doit rester sous contrôle humain (payer quelqu’un, envoyer un contrat), arrêtez l’automatisation à « prépare-le, je valide ».

## Étape 1 : installer les outils

Il vous faut un agent de code et Python. N’importe quel [agent de code](/fr/glossary/coding-agent/) en terminal convient : Claude Code, Codex, Gemini CLI ou Aider savent lire et écrire des fichiers et exécuter des commandes.

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

Pourquoi Python ? Les bibliothèques d’automatisation sont matures : `pandas` et `openpyxl` pour les tableurs, `requests` pour HTTP, `beautifulsoup4` pour analyser le HTML, `playwright` pour un navigateur. Les agents ont vu beaucoup de code qui les utilise, ils font donc moins d’erreurs. Faire du dossier un dépôt git vous permet d’annuler toute modification de l’agent.

## Étape 2 : le premier prompt

Une demande vague donne un script vague. Un bon premier message contient l’entrée, la sortie, les règles et les cas limites. Mettez deux ou trois vrais fichiers d’exemple dans le dossier (des faux s’ils contiennent des données personnelles) et indiquez-les à l’agent :

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

Deux règles sont à recopier dans chaque automatisation : **essai à blanc par défaut** et **ne jamais écraser**. Si l’agent lit mal une date, vous obtenez une liste à relire au lieu de centaines de fichiers déplacés au mauvais endroit.

## Étape 3 : itérer et tester

La première version gère rarement tous les fichiers. La boucle :

1. Lisez la sortie de `--dry-run`. Quelque chose est-il mal reconnu ?
2. Montrez à l’agent le fichier problématique : « `samples/invoice_7.pdf` a donné 1970-01-01 ; ce fichier utilise le libellé “Issue date”. Gère les deux. »
3. Demandez-lui d’ajouter un petit test pour ce cas. Quelques fichiers d’exemple avec `pytest` suffisent.
4. Quand tout paraît bon, lancez `--apply` d’abord sur une copie, puis sur le vrai dossier.

Pour les tâches Excel et CSV, la vérification est plus simple : comparez le nombre de lignes en entrée avec les totaux en sortie. Faites faire au script lui-même une assertion du type « le fichier fusionné doit avoir 1 240 lignes et ce total de chiffre d’affaires ». Du code qui s’exécute ne prouve pas qu’il calcule correctement.

## Étape 4 : le scraper — requests ou Playwright ?

La première décision en scraping est de savoir comment la page est construite. Faites un clic droit, choisissez « Afficher le code source de la page » et cherchez-y les données voulues (le prix, le titre).

**Si elles sont dans le source,** `requests` et `BeautifulSoup` suffisent. Ils sont rapides, n’ouvrent aucun navigateur et chargent peu le serveur.

```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))
```

**Si le contenu arrive plus tard via JavaScript,** ou si vous devez vous connecter, cliquer ou faire défiler, il vous faut un vrai navigateur. Playwright est un choix courant :

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

Ne dites pas à l’agent lequel utiliser ; demandez-lui de vérifier d’abord :

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

Une astuce : sur beaucoup de sites que vous ouvrez avec Playwright, l’onglet réseau du navigateur montre que les données viennent en réalité d’une requête JSON. Appeler directement ce point d’accès peut être plus robuste et plus léger, même s’il reste soumis aux conditions d’utilisation du site.

## Limites légales et éthiques : robots.txt, conditions, RGPD

Une IA écrira volontiers du code qui scrape un site ; décider si vous devez le faire vous appartient. Ce n’est pas un conseil juridique, mais voici mes règles de travail :

- **API officielle d’abord.** Beaucoup de sites, de places de marché, de transporteurs et d’organismes publics proposent leurs données via une API. Elle est plus stable, ses règles sont explicites et elle ne casse pas quand le design de la page change.
- **Lisez robots.txt et les conditions d’utilisation.** Si les conditions interdisent l’accès automatisé ou si robots.txt interdit le chemin, abstenez-vous. Scraper des pages derrière une connexion enfreint généralement les conditions.
- **Évitez les données personnelles.** Collecter des noms, des numéros de téléphone ou des e-mails relève du RGPD (et de la KVKK en Turquie) ; sans finalité, base légale et durée de conservation, ne les collectez pas.
- **Allez doucement.** Attendez quelques secondes entre les requêtes, envoyez-les une par une, ne retéléchargez pas des pages que vous avez déjà. Utilisez un User-Agent qui vous identifie.
- **Respectez le droit d’auteur.** Suivre un prix pour vous-même n’est pas la même chose que copier le contenu de quelqu’un et le republier.
- **Ne combattez pas les protections.** Résoudre des CAPTCHA, faire tourner des IP ou contourner une protection de connexion sont des signes que le site ne veut pas de vous.

## Étape 5 : erreurs, relances et alertes

Un script qui marche aujourd’hui casse discrètement la semaine prochaine : le site change sa mise en page, quelqu’un ajoute une colonne au tableur, le réseau tombe. Le demander dès le départ vous évite des ennuis :

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

« Zéro résultat est une erreur » est la règle qui rapporte le plus. La plupart des scrapers ne plantent pas quand ils cassent ; ils produisent un CSV vide. À la place de l’e-mail, vous pouvez utiliser des webhooks et des API de bots Slack ou Telegram ; choisissez ce que vous remarquerez vraiment.

## Étape 6 : la planifier avec cron

Une fois le script prêt, le moyen le plus simple de l’exécuter régulièrement sous macOS et Linux est cron. Lancez `crontab -e` et ajoutez :

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

Points d’attention :

- cron ne charge pas l’environnement de votre shell. Utilisez le chemin complet de Python (celui de l’environnement virtuel) et faites un `cd` dans le dossier.
- cron ne tourne pas quand la machine est en veille. Pour les tâches qui doivent s’exécuter chaque jour, un petit serveur Linux ou un workflow GitHub Actions planifié est plus fiable.
- Sous Windows, le Planificateur de tâches fait le même travail ; demandez à l’agent un fichier `.bat` et les étapes de configuration.
- Vérifiez les logs chaque jour pendant la première semaine.

## Ce que l’IA se trompe souvent à faire

- **Inventer des sélecteurs.** Sans voir la page, l’agent devine une classe CSS comme `.price`. Donnez-lui le vrai HTML, ou demandez-lui de télécharger et d’inspecter la page.
- **Avaler les erreurs.** Un bloc `except: pass` donne l’impression que le script fonctionne alors qu’il ne fait rien. Lisez chaque ligne `except`.
- **Formats de dates et de nombres.** Les nombres à l’européenne comme `1.234,56` et les dates `DD/MM/YYYY` sont souvent mal lus. Comparez à la main quelques valeurs de sortie avec la source.
- **Encodage.** Si un CSV avec des caractères accentués est illisible, demandez d’essayer `utf-8-sig` ou le bon encodage hérité.
- **Messages de succès trop assurés.** « Le script est terminé et testé » ne prouve rien en soi. Regardez vous-même la sortie.
- **Trop de dépendances.** Monter une automatisation de navigateur ou un framework pour une tâche de dix lignes. Demandez la solution la plus simple.

## Sécurité

- **Les secrets vont dans `.env`.** Mots de passe SMTP, clés d’API et identifiants ne vont jamais dans le code ; lisez-les depuis `.env` avec `python-dotenv` et ajoutez `.env` à `.gitignore`. Versionnez un `.env.example` avec des valeurs factices.
- **Ne collez jamais une clé dans le chat.** Ne tapez pas « ma clé est … » à l’agent. Les conversations peuvent être stockées et se retrouver dans des logs. Donnez-lui seulement le nom de la variable : « lis-la depuis la variable d’environnement `SMTP_PASSWORD`. »
- **Lisez les commandes que l’agent exécute.** En particulier `rm`, les `mv` en masse, les `pip install` de paquets que vous ne connaissez pas et tout ce qui envoie des données à l’extérieur. Si vous avez un doute, ne validez pas.
- **Moindre privilège.** Utilisez un mot de passe d’application pour un compte e-mail, et une clé en lecture seule pour une API.

## Le faire avec AgentVera

Tout cela fonctionne dans un simple terminal avec un seul agent. Quand je mène plusieurs automatisations à la fois, j’utilise [AgentVera](/fr/download/), parce qu’il facilite quelques étapes :

- **Agents séparés, dossiers séparés.** Dans l’[espace de travail](/fr/features/workspace/), Claude Code peut écrire le scraper dans un volet pendant que Codex construit le rapport Excel dans un autre. S’ils partagent un dépôt, donnez à chacun son propre [worktree git](/fr/glossary/git-worktree/) pour éviter les collisions.
- **Navigateur de l’agent.** Les agents qui utilisent Playwright pilotent un Chrome avec son propre profil, et vous voyez en direct ce qu’ils font dans le [navigateur de l’agent](/fr/features/agent-browser/). Cela aide à comprendre pourquoi un sélecteur ne correspond pas.
- **Exécution sur un serveur.** Depuis la page [SSH et SFTP](/fr/features/ssh-and-sftp/), vous pouvez copier le script sur un serveur et y configurer le crontab.
- **Messages d’agent planifiés.** Les [tâches planifiées](/fr/features/scheduled-tasks/) planifient un message à un agent, pas votre script. Par exemple, une fois par semaine : « lis les logs et résume les échecs ». L’exécution quotidienne doit rester le travail de cron.
- **Relire le diff.** La [revue de code](/fr/features/code-review/) contrôle chaque tour terminé, ce qui aide à repérer les erreurs avalées pendant l’étape de durcissement.

Si vous voulez enchaîner des agents, voyez les [pipelines de workflow d’agents IA](/fr/blog/ai-agent-workflow-pipeline/) ; pour connecter un agent à des outils externes, voyez [qu’est-ce qu’un serveur MCP](/fr/blog/what-is-mcp-server/).

## Liste de contrôle rapide

- [ ] Entrée, sortie et cas limites écrits dans le premier prompt
- [ ] Essai à blanc par défaut, aucun écrasement
- [ ] Testé sur des fichiers d’exemple, quelques résultats vérifiés à la main
- [ ] API officielle préférée quand elle existe ; robots.txt et conditions lus
- [ ] Délais entre requêtes, timeouts et relances limitées
- [ ] Zéro résultat compte comme un échec, les échecs envoient une alerte
- [ ] Secrets dans `.env`, `.env` hors de git
- [ ] Chemins complets dans la ligne cron, logs vérifiés la première semaine

## Conclusion

L’astuce pour créer des automatisations avec l’IA est de confier à l’agent une tâche petite et bien décrite, puis de traiter le script qu’il écrit comme un logiciel : essais à blanc, tests, logs, alertes. Côté scraping, le choix technique est simple (requests si c’est dans le source, Playwright sinon) ; le plus difficile est de respecter les limites et de choisir la voie officielle quand elle existe. Pour votre première automatisation, prenez une tâche que vous avez faite à la main trois fois cette semaine, adaptez le prompt ci-dessus et commencez par un essai à blanc.

## Questions fréquentes

**Puis-je créer des automatisations avec l’IA sans savoir coder ?** Pour des automatisations simples, oui : vous décrivez la tâche à un agent de code, il écrit le script Python et vous l’essayez sur des fichiers d’exemple. En savoir assez pour lire ce que fait le script aide quand même à repérer un résultat faux.

**Le web scraping est-il légal ?** Cela dépend. Récupérer des données publiques à un rythme raisonnable est acceptable dans bien des cas, mais les conditions d’utilisation d’un site, robots.txt, le droit d’auteur et la législation sur les données personnelles (RGPD, KVKK) posent des limites. Si le site propose une API officielle, utilisez-la d’abord.

**Dois-je utiliser requests et BeautifulSoup ou Playwright ?** Si les données apparaissent dans le source HTML de la page, requests et BeautifulSoup sont plus rapides et plus légers. Si le contenu est chargé par JavaScript, ou si vous devez vous connecter ou cliquer, utilisez un vrai navigateur comme Playwright.

**Comment exécuter un script d’automatisation tous les jours ?** Utilisez cron sous macOS et Linux, ou le Planificateur de tâches sous Windows. S’il doit tourner quand votre ordinateur est éteint, déplacez-le sur un petit serveur ou dans une tâche CI planifiée comme GitHub Actions.

**Comment saurai-je que mon scraper est cassé ?** Faites envoyer au script un e-mail, un message Slack ou Telegram en cas d’échec, et traitez aussi comme des erreurs les échecs silencieux comme « zéro ligne trouvée ». Écrire chaque exécution dans un fichier de log permet de voir quand le problème a commencé.

---

**À propos d’AgentVera.** AgentVera est une app de bureau pour macOS, Windows et Linux, développée par Solviera Teknoloji. Elle exécute 18 agents de code IA (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) côte à côte, par projet, dans de vrais terminaux avec les installations et connexions CLI de l’utilisateur. L’offre gratuite inclut des agents illimités. Télécharger: https://agentvera.dev/fr/download/ · Tarifs: https://agentvera.dev/fr/pricing/
