Von der Browser-Console zum Userscript: Wie ich SoundCloud automatisierte

Tobe
Blog Veröffentlich am 20.10.25, Tobias Lorsbach

“Du musst für jeden Track alle Länder einzeln auswählen.” Sagten sie. Und was hat mich das jedes Mal genervt, ich bin wirklich fast verrrückt geworden vor allem wenn ich mal mehr als einen Track hochgeladen hatte. 5 Tracks monetarisieren hieß dann 155x klicken. Sau nervig und ohne mich!

Challenge accepted.

Das Problem: 31 x klicken, warten - pro Track

Als Musiklabel lädt man bei SoundCloud nicht nur einen Track hoch. Es sind manchmal Dutzende. Und für jeden Track muss man Monetarisierungs-Rechte festlegen. Für jedes Land einzeln.

Das bedeutet:

  • Dropdown öffnen
  • Rechteinhaber auswählen
  • Warten bis React neu rendert
  • Zum nächsten Feld
  • 31 mal wiederholen

Nach dem dritten Track hatte ich genug.

Versuch 1: “Das ist doch nur ein Formular”

Erster Gedanke: Playwright. Automatisiere einfach den Browser, Problem gelöst.

await page.click('.dropdown');
await page.click('text=Logic Moon');

Drei Zeilen Code. Easy.

Plot Twist: SoundCloud hat andere Pläne.

❌ You have been blocked
Automated (bot) activity detected
Use of developer or inspection tools

Playwright? Erkannt. Selenium? Blockiert. Puppeteer? Nicht mal gestartet.

SoundCloud’s Bot-Detection ist aggressiv. Und das zu Recht.

Versuch 2: Die Browser-Console

Wenn Automation-Tools nicht funktionieren, muss es die gute alte Browser-Console tun.

document.querySelectorAll('button').forEach(btn => {
  btn.click();
  // Magic here
});

Problem: React.

Nach jedem Klick rendert SoundCloud das komplette Interface neu. Die Button-Referenzen werden ungültig. Die Dropdown-IDs ändern sich. Und das Script findet plötzlich… nichts mehr.

Der Durchbruch: Immer den ersten nehmen

Die Lösung war simpel: Nicht mit Indices arbeiten, sondern immer den ersten ungesetzten Button finden.

while (true) {
  const unsetButton = Array.from(buttons).find(btn => 
    btn.textContent.includes('Rechteinhaber auswählen')
  );
  
  if (!unsetButton) break;
  
  unsetButton.click();
  // Rest der Logik
}

Jedes Mal wenn React neu rendert? Egal. Wir holen uns einfach die neue Liste.

Das funktionierte.

Von der Console zum Userscript

Ein Script in der Console einzutippen ist nervig. Die Lösung: Tampermonkey.

Das Userscript macht jetzt:

  • ⚡ Button unten rechts auf der Seite
  • ⌨️ Keyboard-Shortcut (Ctrl+L)
  • 💾 localStorage für die Einstellungen
  • 🔄 Reset-Button zum Ändern

Beim ersten Mal: “Welchen Rechteinhaber möchtest du?”
Danach: Klick, fertig, alle 31 Felder ausgefüllt.

Die technischen Details

Warum funktioniert es?

  1. Kein Bot-Tool - läuft direkt im Browser
  2. Respektiert React - holt sich bei jedem Durchlauf neue Referenzen
  3. Findet das richtige Element - klickt den <a> im <li>, nicht das <li> selbst
  4. Wartet minimal - nur 100ms + 200ms, läuft trotzdem stabil

Das wichtigste Learning: Manchmal ist die einfachste Lösung die beste. Keine fancy Tools, nur cleveres JavaScript.

Open Source für alle

Das Script ist jetzt auf GitHub und funktioniert für jeden SoundCloud-User. Nicht nur für Logic Moon Music, sondern mit jedem, der auf Soundcloud monetarisieren darf.

Features:

  • Dynamische Rechtehaber-Auswahl
  • Speichert Präferenz lokal
  • Funktioniert mit deutscher und englischer UI
  • Reset-Funktion inklusive

Von 30 Minuten auf 5 Sekunden

Vorher: Pro Track 30 Minuten manuelles Klicken
Nachher: 5 Sekunden, ein Klick

Bei 20 Tracks pro Woche spart das 10 Stunden pro Monat.

Zeit, die besser in Musik steckt als in Dropdown-Menüs.

Warum ich das teile

Weil jemand anderes das gleiche Problem hat. Und weil Code, der anderen hilft, besserer Code ist.

Plus - es zeigt: Automation muss nicht kompliziert sein. Manchmal reichen ein paar Zeilen Zeilen JavaScript.

Try it yourself

Neugierig geworden? Das Userscript auf GitHub checken, in Tampermonkey installieren und nie wieder Dropdowns manuell ausfüllen.


31 Felder. 1 Klick. Problem solved.