Social-Media-Uploads ohne API: ein Uploader, der den Browser bedient
Jede Plattform möchte für automatische Uploads eine eigene API-App: Developer-Konto, Review, Scopes, Tokens, und bei TikTok zusätzlich eine Freigabe, die man als Einzelperson praktisch nicht bekommt. Ich wollte einfach n
Jede Plattform möchte für automatische Uploads eine eigene API-App: Developer-Konto, Review, Scopes, Tokens, und bei TikTok zusätzlich eine Freigabe, die man als Einzelperson praktisch nicht bekommt. Ich wollte einfach nur ein Video auf YouTube, Facebook, Instagram und TikTok veröffentlichen. Also habe ich das Gegenteil gebaut: ein Tool, das gar keine API benutzt, sondern den Browser steuert.
Die Idee: der Browser ist die Schnittstelle
Statt mit einer API zu sprechen, öffnet das Tool die ganz normale Webseite, wählt die Datei aus, tippt Titel und Text ein und klickt auf „Posten". Es macht exakt das, was ich mit der Maus machen würde — nur reproduzierbar und per Kommandozeile.
Das klingt primitiv, hat aber einen handfesten Vorteil: Es funktioniert überall dort, wo es keine Upload-API gibt. Und es braucht keine Zugangsdaten im Klartext, weil es eine bereits angemeldete Sitzung weiterbenutzt.
Technisch steckt patchright bzw. Playwright darunter, also ein fernsteuerbarer Chromium oder Firefox. Die Sitzung liegt entweder als Cookie-Datei (cookies/….json) oder als persistentes Browserprofil (profiles/<browser>/<account>) auf der eigenen Platte.
Was zur Laufzeit passiert
Der Ablauf ist bewusst langweilig und deterministisch:
sau facebook upload-video --account creator --file video.mp4 --title "Titel"
- Die CLI liest die Argumente und wählt Plattform, Browser und Sitzung.
- Der Uploader öffnet die Startseite, wartet auf die Selektoren des Composers und legt die Datei in das
input[type=file]— ohne Datei-Dialog, direkt über das DOM. - Titel, Beschreibung und Hashtags werden eingetippt.
- Der Publish-Button wird über seine Beschriftung gesucht (mehrsprachig, weil die Oberfläche je nach Konto Deutsch, Englisch oder Chinesisch ist).
- Danach prüft das Tool, ob der Beitrag wirklich existiert, und schreibt das Ergebnis als JSON.
Kein Agent, kein LLM, keine Entscheidungen zur Laufzeit: ein Befehl, eine feste Abfolge von Klicks. Genau das macht Fehlersuche erträglich — wenn etwas bricht, ist es ein Selektor und keine Laune eines Modells.
Captions ohne KI-Dienst
Beschreibungen und Hashtags kann das Tool selbst vorschlagen (--auto-desc, --auto-tags, sau caption). Das ist absichtlich regelbasiert: Text aus Titel und Notizen, ein fester Call-to-Action pro Plattform, Hashtags aus den signifikanten Wörtern, alles gekürzt auf die Zeichenlimits der Plattform. Gleiche Eingabe, gleiche Ausgabe, kein Netzwerkaufruf, keine Kosten.
Für meinen Zweck reicht das. Wer wirklich kreative Texte will, hängt dort ein Modell dran — die Stelle ist klar abgegrenzt.
Loslegen
uv venv
source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
uv pip install -e .
patchright install chromium
cp conf.example.py conf.py
sau --help
Dann einmal anmelden — das Fenster geht sichtbar auf, Captcha und 2FA macht man selbst:
sau youtube login --account creator
sau youtube check --account creator
sau youtube upload-video --account creator --file videos/demo.mp4 --title "Titel" --visibility public
--account ist nur ein lokaler Alias für eine gespeicherte Sitzung. Für Facebook, Facebook Pages und Instagram gibt es dieselben drei Schritte (login, check, upload-video bzw. upload-note). TikTok hat keinen CLI-Befehl, sondern einen eigenen Python-Uploader, der auf Wunsch einen bereits laufenden Browser über CDP übernimmt.
Wo es weh tut
Ehrlich gehört das in einen solchen Artikel:
- Selektoren brechen. Baut eine Plattform ihr Web-UI um, findet das Tool den Button nicht mehr. Dann wird gestoppt und angepasst, nicht geraten.
- Die Nutzungsbedingungen. Cookie-Automatisierung ist bei den meisten Plattformen nicht vorgesehen. Risk-Control, Captchas und im schlimmsten Fall Sperren sind reale Risiken. Wer das produktiv einsetzt, sollte wissen, was er tut.
- „Unklar" ist nicht „fehlgeschlagen". Manchmal ist der Beitrag online, aber die Erfolgsmeldung wird nicht erkannt (z. B. bei deutscher Facebook-Oberfläche). Erst nachsehen, dann erneut hochladen — sonst gibt es den Post zweimal.
- Planen ist Plattform-Sache. Facebook Pages terminieren über den Zeitplan-Dialog der Seite, Instagram und Facebook-Profile können gar nicht planen.
Fazit
Wer für ein paar eigene Konten regelmäßig postet und keine Lust auf vier API-Integrationen hat, kommt mit Browser-Automatisierung erstaunlich weit. Es ist kein Produkt für Kundenkonten, sondern ein Werkzeug für den eigenen Account — mit allen Ecken und Kanten, die dazugehören.
Code, Handbuch und alle Schalter: github.com/arti1984-collab/social-auto-upload-international (MIT).
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.