Um ein Automatisierungsskript mit KI zu bauen, beschreibst du einem Coding-Agenten eine wiederkehrende Aufgabe und testest das kleine Python-Skript, das er schreibt. Dateien umbenennen, Excel- und CSV-Dateien zusammenführen, ein wöchentlicher E-Mail-Bericht oder ein Scraper, der Preise auf einer Seite verfolgt, braucht meist 50 bis 200 Zeilen. Das Schwierige ist nicht der Prompt, sondern die Eingabe präzise zu beschreiben, die Ausgabe zu prüfen, das Skript zu planen und davon zu erfahren, wenn es kaputtgeht.
Dieser Beitrag führt von null zu einer funktionierenden Automatisierung: was du installierst, welches Tool wann passt, was du dem Agenten zuerst sagst, wie du testest und wie du das Skript täglich mit cron laufen lässt. Ich gehe auch auf die rechtliche und ethische Seite des Scrapings ein, weil die KI darüber nicht für dich nachdenkt.
Was „Automatisierung mit KI“ hier bedeutet
Ich meine nicht, dass ein Modell den Job jedes Mal selbst erledigt. Der Agent schreibt einmal ein Skript; danach läuft das Skript jeden Tag gleich ab, ganz ohne KI. Der Unterschied zählt: Ein Skript ist billig, wiederholbar, und du kannst lesen, was es tut. Ein Aufbau, der jeden Tag ein Modell aufruft, kostet mehr und ist schwerer vorherzusagen.
Das ist Vibe Coding: Du schreibst den Code nicht Zeile für Zeile, sondern beschreibst, was du willst, und steuerst das Ergebnis. Automatisierungen eignen sich gut dafür, weil das Ziel klar und das Ergebnis leicht zu prüfen ist: Wurden die Dateien richtig benannt, hat die Tabelle die richtigen Zeilen?
Welche Jobs lohnt es zu automatisieren?
Ein guter Kandidat wiederholt sich oft, hat Regeln, die du aufschreiben kannst, und lässt sich rückgängig machen, wenn etwas schiefgeht. Alltägliche Beispiele:
- Dateien: Rechnungen in deinem Downloads-Ordner nach Datum umbenennen und in Jahr/Monat-Ordner verschieben.
- Excel und CSV: die Verkaufsdateien zusammenführen, die jede Filiale schickt, leere Zeilen entfernen, eine Übersichtstabelle bauen.
- E-Mail-Berichte: jede Woche Daten aus einem Ordner oder einer Datenbank ziehen und eine Zusammenfassung an dich oder dein Team schicken.
- Das Web beobachten: den Preis eines Produkts, neue Einträge auf einer Anzeigenseite oder einer Ankündigungsseite verfolgen und Bescheid bekommen, wenn sich etwas ändert.
Bei allem, wo ein Mensch die Kontrolle behalten sollte (jemanden bezahlen, einen Vertrag senden), halte die Automatisierung bei „vorbereiten, ich gebe frei“ an.
Schritt 1: Die Tools installieren
Du brauchst einen Coding-Agenten und Python. Jeder terminalbasierte Coding-Agent funktioniert: Claude Code, Codex, Gemini CLI oder Aider können alle Dateien lesen und schreiben und Befehle ausführen.
# 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
Warum Python? Die Bibliotheken für Automatisierung sind ausgereift: pandas und openpyxl für Tabellen, requests für HTTP, beautifulsoup4 zum Parsen von HTML, playwright für einen Browser. Agenten haben viel Code damit gesehen und machen deshalb weniger Fehler. Machst du den Ordner zu einem Git-Repository, kannst du jede Änderung des Agenten rückgängig machen.
Schritt 2: Der erste Prompt
Eine vage Anfrage liefert ein vages Skript. Eine gute erste Nachricht enthält Eingabe, Ausgabe, Regeln und Sonderfälle. Lege zwei oder drei echte Beispieldateien in den Ordner (erfundene, wenn sie personenbezogene Daten enthalten) und weise den Agenten darauf hin:
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.
Zwei Regeln hier solltest du in jede Automatisierung übernehmen: standardmäßig Dry Run und nie überschreiben. Liest der Agent ein Datum falsch, bekommst du eine Liste zum Prüfen, statt dass Hunderte Dateien an den falschen Ort verschoben werden.
Schritt 3: Iterieren und testen
Die erste Version kommt selten mit jeder Datei zurecht. Der Ablauf:
- Lies die Ausgabe von
--dry-run. Wird irgendetwas falsch zugeordnet? - Zeige dem Agenten die Problemdatei: „
samples/invoice_7.pdfergibt 1970-01-01; diese Datei nutzt das Label ‚Issue date‘. Unterstütze beide.“ - Bitte ihn, für diesen Fall einen kleinen Test zu ergänzen. Ein paar Beispieldateien mit
pytestgenügen. - Sieht alles richtig aus, führe
--applyzuerst auf einer Kopie aus, dann auf dem echten Ordner.
Bei Excel- und CSV-Jobs ist die Prüfung einfacher: Vergleiche die Zeilenzahl der Eingabe mit den Summen der Ausgabe. Lass das Skript selbst etwas wie „die zusammengeführte Datei sollte 1.240 Zeilen und diese Umsatzsumme haben“ prüfen. Code, der läuft, ist kein Beweis dafür, dass er richtig rechnet.
Schritt 4: Der Scraper — requests oder Playwright?
Die erste Entscheidung beim Scraping ist, wie die Seite aufgebaut ist. Klicke mit der rechten Maustaste, wähle „Seitenquelltext anzeigen“ und suche darin die gewünschten Daten (den Preis, den Titel).
Stehen sie im Quelltext, reichen requests und BeautifulSoup. Sie sind schnell, öffnen keinen Browser und belasten den Server wenig.
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))
Kommt der Inhalt später per JavaScript, oder musst du dich anmelden, klicken oder scrollen, brauchst du einen echten Browser. Playwright ist eine verbreitete Wahl:
pip install playwright
playwright install chromium
Sag dem Agenten nicht, was er nehmen soll; bitte ihn, zuerst zu prüfen:
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.
Ein Tipp: Bei vielen Seiten, die du mit Playwright öffnest, zeigt der Netzwerk-Tab des Browsers, dass die Daten tatsächlich aus einer JSON-Anfrage kommen. Diesen Endpunkt direkt aufzurufen kann robuster und leichter sein, unterliegt aber weiterhin den Nutzungsbedingungen der Seite.
Rechtliche und ethische Grenzen: robots.txt, Bedingungen, DSGVO
Eine KI schreibt gern Code, der eine Seite scrapt; ob du es solltest, entscheidest du. Das ist keine Rechtsberatung, aber das sind meine Arbeitsregeln:
- Zuerst die offizielle API. Viele Seiten, Börsen, Kurierdienste und Behörden bieten ihre Daten über eine API an. Sie ist stabiler, ihre Regeln sind ausdrücklich, und sie bricht nicht, wenn sich das Seitendesign ändert.
- Lies robots.txt und die Nutzungsbedingungen. Verbieten die Bedingungen automatisierten Zugriff oder sperrt robots.txt den Pfad, lass es. Seiten hinter einem Login zu scrapen verstößt meist gegen die Bedingungen.
- Halte dich von personenbezogenen Daten fern. Das Sammeln von Namen, Telefonnummern oder E-Mails fällt unter die DSGVO (und in der Türkei unter KVKK); ohne Zweck, Rechtsgrundlage und Aufbewahrungsfrist sammle es nicht.
- Geh langsam vor. Warte einige Sekunden zwischen Anfragen, sende eine nach der anderen, rufe Seiten, die du schon hast, nicht erneut ab. Nutze einen User-Agent, der dich ausweist.
- Beachte das Urheberrecht. Einen Preis für dich selbst zu verfolgen ist etwas anderes, als fremde Inhalte zu kopieren und neu zu veröffentlichen.
- Bekämpfe die Schutzmaßnahmen nicht. CAPTCHAs zu lösen, IPs zu wechseln oder Login-Schutz zu umgehen sind Zeichen, dass die Seite dich dort nicht haben will.
Schritt 5: Fehler, Retries und Alerts
Ein Skript, das heute läuft, geht nächste Woche still kaputt: Die Seite ändert ihr Layout, jemand fügt der Tabelle eine Spalte hinzu, das Netzwerk bricht ab. Das gleich zu Beginn zu verlangen erspart dir Ärger:
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.
„Null Ergebnisse sind ein Fehler“ ist die Regel, die sich am meisten auszahlt. Die meisten Scraper stürzen nicht ab, wenn sie kaputtgehen; sie erzeugen eine leere CSV. Statt E-Mail kannst du Slack- oder Telegram-Webhooks und Bot-APIs nutzen; nimm, was du auch wirklich bemerkst.
Schritt 6: Mit cron planen
Ist das Skript fertig, ist cron der einfachste Weg, es unter macOS und Linux regelmäßig auszuführen. Führe crontab -e aus und füge hinzu:
# Run every day at 08:30
30 8 * * * cd /Users/you/price-tracker && .venv/bin/python track.py >> logs/cron.log 2>&1
Worauf du achten musst:
- cron lädt deine Shell-Umgebung nicht. Nutze den vollen Pfad zu Python (dem in der virtuellen Umgebung) und wechsle mit
cdin den Ordner. - cron läuft nicht, während der Rechner schläft. Für Jobs, die jeden Tag laufen müssen, ist ein kleiner Linux-Server oder ein geplanter GitHub-Actions-Workflow zuverlässiger.
- Unter Windows erledigt die Aufgabenplanung dasselbe; bitte den Agenten um eine
.bat-Datei und die Einrichtungsschritte. - Prüfe in der ersten Woche jeden Tag die Logs.
Was die KI oft falsch macht
- Selektoren erfinden. Ohne die Seite zu sehen, rät der Agent eine CSS-Klasse wie
.price. Gib ihm das echte HTML oder bitte ihn, die Seite herunterzuladen und zu untersuchen. - Fehler verschlucken. Ein
except: pass-Block lässt das Skript funktionieren, während es nichts tut. Lies jedeexcept-Zeile. - Datums- und Zahlenformate. Zahlen im europäischen Stil wie
1.234,56und Daten im FormatDD/MM/YYYYwerden oft falsch gelesen. Vergleiche ein paar Ausgabewerte von Hand mit der Quelle. - Kodierung. Sieht eine CSV mit Umlauten oder Akzenten verstümmelt aus, bitte um
utf-8-sigoder die passende alte Kodierung. - Übertrieben sichere Erfolgsmeldungen. „Das Skript ist fertig und getestet“ ist allein kein Beweis. Sieh dir die Ausgabe selbst an.
- Zu viele Abhängigkeiten. Browser-Automatisierung oder ein Framework für einen Job aus zehn Zeilen aufzubauen. Bitte um die einfachste Lösung.
Sicherheit
- Secrets gehören in
.env. SMTP-Passwörter, API-Schlüssel und Logins kommen nie in den Code; lies sie mitpython-dotenvaus.envund trage.envin.gitignoreein. Committe eine.env.examplemit Platzhalterwerten. - Füge nie einen Schlüssel in den Chat ein. Tippe nicht „mein Schlüssel ist …“ an den Agenten. Konversationen können gespeichert werden und in Logs landen. Nenne ihm nur den Variablennamen: „Lies es aus der Umgebungsvariable
SMTP_PASSWORD.“ - Lies die Befehle, die der Agent ausführt. Besonders
rm, massenhaftesmv,pip installvon Paketen, die du nicht kennst, und alles, was Daten nach außen sendet. Bist du unsicher, gib es nicht frei. - Least Privilege. Nutze ein App-Passwort für ein E-Mail-Konto und einen schreibgeschützten Schlüssel für eine API.
Mit AgentVera umsetzen
All das funktioniert in einem einfachen Terminal mit einem Agenten. Wenn ich mehrere Automatisierungen gleichzeitig betreibe, nutze ich AgentVera, weil es ein paar Schritte glättet:
- Getrennte Agenten, getrennte Ordner. Im Workspace kann Claude Code in einem Pane den Scraper schreiben, während Codex in einem anderen den Excel-Bericht baut. Teilen sie ein Repository, gib jedem einen eigenen Git-Worktree, um Kollisionen zu vermeiden.
- Agent-Browser. Agenten mit Playwright steuern einen Chrome mit eigenem Profil, und du siehst im Agent-Browser live zu, was sie tun. So erkennst du leichter, warum ein Selektor nicht passt.
- Auf einem Server laufen lassen. Auf der Seite SSH und SFTP kannst du das Skript auf einen Server kopieren und dort die crontab einrichten.
- Geplante Agent-Nachrichten. Geplante Aufgaben planen eine Nachricht an einen Agenten, nicht dein Skript. Zum Beispiel einmal pro Woche: „Lies die Logs und fasse alle Fehler zusammen.“ Der tägliche Lauf sollte weiter cron übernehmen.
- Den Diff prüfen. Das Code-Review prüft jeden abgeschlossenen Zug, was beim Absichern hilft, verschluckte Fehler zu finden.
Willst du Agenten verketten, siehe KI-Agent-Workflow-Pipelines; um einen Agenten mit externen Tools zu verbinden, siehe Was ist ein MCP-Server.
Kurze Checkliste
- Eingabe, Ausgabe und Sonderfälle im ersten Prompt aufgeschrieben
- Standardmäßig Dry Run, kein Überschreiben
- An Beispieldateien getestet, einige Ergebnisse von Hand geprüft
- Offizielle API bevorzugt, wo es eine gibt; robots.txt und Bedingungen gelesen
- Pausen zwischen Anfragen, Timeouts und begrenzte Retries
- Null Ergebnisse gelten als Fehler, Fehler senden einen Alert
- Secrets in
.env,.envnicht in Git - Volle Pfade in der cron-Zeile, Logs in der ersten Woche geprüft
Fazit
Der Trick beim Bauen von Automatisierungen mit KI ist, dem Agenten einen kleinen, gut beschriebenen Job zu geben und das Skript, das er schreibt, dann wie Software zu behandeln: Dry Runs, Tests, Logs, Alerts. Beim Scraping ist die technische Wahl einfach (requests, wenn es im Quelltext steht, sonst Playwright); schwieriger ist, die Grenzen zu respektieren und den offiziellen Weg zu wählen, wenn es einen gibt. Nimm für deine erste Automatisierung eine Aufgabe, die du diese Woche dreimal von Hand erledigt hast, passe den Prompt oben an und beginne mit einem Dry Run.