Social Media Automatisierung mit Python, Playwright und OpenAI – Ein technischer Erfahrungsbericht
Oder: Wie ich meine Social-Media-Interaktionen automatisiert habe (und warum Plattformen das oft nicht mögen)
Als Backend-Entwickler fehlt mir die Zeit, täglich 20–30 Minuten damit zu verbringen, auf Social-Media-Plattformen manuell zu interagieren – sei es durch Likes, Kommentare oder andere Aktionen. Also habe ich einen Agenten gebaut, der mir diese Arbeit abnimmt.
Technologie-Stack
- Python 3.11
- Playwright (Sync API) – robuster als Selenium, besonders für dynamische Webseiten
- OpenAI GPT-4o-mini für die Generierung von Kommentaren
- Playwright Stealth + manuelle Fingerprint-Patches zur Vermeidung von Erkennung
- Minimales Debian/Ubuntu Server (Headless) für den Betrieb im Hintergrund
Architektur
Der Bot besteht aus zwei separaten Skripten:
login.py– Einmaliges manuelles Login + Speichern der Session (z. B. alsstorage_state)social_media_agent.py– Der eigentliche Worker (headless)
Kern-Herausforderungen & Lösungen
1. Zuverlässiges Klicken trotz dynamischem DOM
Social-Media-Plattformen ändern häufig ihre Selektoren. Deshalb nutze ich direkte JavaScript-Injection, um Elemente zuverlässig zu finden und zu klicken:
Like Button
# Like Button
page.evaluate("""
() => {
const btn = document.querySelector('button[aria-label*="Gefällt mir"], button[aria-label*="Like"]');
if (btn) btn.click();
}
""")
2. Eigene Beiträge erkennen
Um zu vermeiden, dass der Bot auf eigene Posts reagiert, wird der Inhalt der Seite analysiert:
is_own_post = page.evaluate(f"""
() => {{
const text = document.body.innerText.toLowerCase();
const name = "{YOUR_NAME.toLowerCase()}";
return text.includes("du hast diesen beitrag geteilt") ||
text.includes("dein beitrag") ||
text.includes(name) &&
(text.includes("hat diesen beitrag geteilt") || text.includes("kommentiert"));
}}
""")
if is_own_post:
log("⚠️ Eigener Beitrag erkannt → übersprungen")
page.keyboard.press("Escape")
continue
3. Menschliches Verhalten simulieren
Um Erkennung zu vermeiden, werden zufällige Pausen und Aktionslimits eingebaut:
def wait(minutes):
# Zeigt Countdown an
...
# Zufällige Anzahl Aktionen
num_likes = random.randint(1, 3)
num_comments = random.randint(1, 2)
4. Logging & Transparenz
Jede Aktion wird mit Zeitstempel, Post-URL (soweit verfügbar) und dem generierten Kommentar-Text geloggt.
Vollständiger Hauptteil des Agenten (Auszug)
for i in range(num_comments):
# Kommentar-Button klicken via JS
page.evaluate("""() => {
const btn = document.querySelector('button[aria-label*="Kommentieren"]');
if (btn) btn.click();
}""")
time.sleep(6)
# Eigenen Post check
if is_own_post(...):
continue
# KI-Kommentar generieren
post_text = page.evaluate("document.body.innerText.substring(0, 800)")
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "system",
"content": "Schreibe kurze, natürliche, professionelle Kommentare auf Deutsch."
}, {
"role": "user",
"content": post_text
}],
temperature=0.78
)
comment = response.choices[0].message.content.strip()
log(f"💬 Kommentar: {comment}")
page.locator('div[role="textbox"]').first.fill(comment)
page.keyboard.press("Enter")
Wichtige Warnung: Rechtliche und ethische Bedenken
Die meisten Social-Media-Plattformen verbieten automatisierte Interaktionen in ihren Nutzungsbedingungen. Solche Aktionen können gegen die Allgemeinen Geschäftsbedingungen (AGB) verstoßen, insbesondere wenn sie als Spam oder manipulatives Verhalten eingestuft werden.
Auch wenn der Bot aktuell stabil auf einem Server mit Residential-IP läuft, werden Plattformen immer besser darin, solche Muster zu erkennen. Account-Sperren oder Einschränkungen sind möglich.
⚠️ Haftungsausschluss:
Dieser Artikel beschreibt ein technisches Experiment. Ich distanziere mich ausdrücklich von der Nutzung dieses Codes in produktiver Form oder für kommerzielle Zwecke. Nutze dies auf eigenes Risiko.
Fazit: Technisch spannend, praktisch riskant
Technisch gesehen ist ein solches Projekt eine großartige Möglichkeit, mehr über Browser-Automatisierung, Anti-Bot-Techniken und KI-gestützte Textgenerierung zu lernen.
Praktisch gesehen ist es jedoch ein Spiel mit dem Feuer. Wer es trotzdem ausprobieren möchte, sollte:
- Langsam starten (z. B. mit wenigen Aktionen pro Tag)
- Strikte Limits einbauen (z. B. maximale Anzahl an Interaktionen)
- Nie gierig werden – zu viel Automatisierung führt fast immer zur Erkennung.
Falls du noch spezifischere Anpassungen möchtest (z. B. andere Formulierungen oder einen anderen Fokus), lass es mich wissen!
0 Kommentare