DEV Community

Cover image for Social-Media-Uploads ohne API: ein Uploader, der den Browser bedient
arti1984
arti1984

Posted on Edited on

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 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"
Enter fullscreen mode Exit fullscreen mode
  1. Die CLI liest die Argumente und wählt Plattform, Browser und Sitzung.
  2. 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.
  3. Titel, Beschreibung und Hashtags werden eingetippt.
  4. Der Publish-Button wird über seine Beschriftung gesucht (mehrsprachig, weil die Oberfläche je nach Konto Deutsch, Englisch oder Chinesisch ist).
  5. Danach schreibt der Lauf sein Ergebnis als JSON: Instagram übernimmt die Media-ID aus der finalen Antwort des Create-Endpunkts, Facebook wartet auf den exakten Erfolgs-Toast, und der Facebook-Pages-Ablauf öffnet die Liste der veröffentlichten Beiträge und sucht den Post über die Content-ID.

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

--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". Die Ergebnisdatei wird mit submission_unknown geschrieben, bevor der Submit-Klick passiert — ein Absturz hinterlässt also einen Eintrag, und nichts wird automatisch erneut gesendet. Ein stummer Composer ist in beide Richtungen kein Beweis: sau instagram verify und sau facebook verify öffnen den Live-Post und prüfen ID, Autor und Caption — dieser Check ist verlässlicher als jeder Toast.
  • 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).

Top comments (0)