PowerScan
DE

Browserprofile mit einer lokalen API automatisieren

Automatisierung · 8 Min. Lesezeit · von PowerOps

Foto: Unsplash

Starten Sie ein Profil per Skript, erhalten Sie einen Debugging-Endpunkt und verbinden Sie Playwright oder Puppeteer mit einem Browser, dem Identität und Proxy bereits zugewiesen sind.

Einen Antidetect-Browser zu automatisieren wird meist als schwieriges Problem dargestellt. Das ist es nicht, sofern das Tool Ihnen das eine gibt, was Ihre Automatisierungsbibliothek bereits zu nutzen weiß: einen Debugging-Endpunkt.

Das Grundprinzip

PowerOps betreibt eine HTTP-API, die an die Loopback-Adresse gebunden ist. Ihr Skript bittet sie, ein Profil zu starten; sie startet den Browser mit Identität, Speicher und Proxy des Profils und gibt den WebSocket-Endpunkt des laufenden Browsers zurück. Ihr Skript verbindet sich mit Playwright, Puppeteer oder allem anderen, das das DevTools-Protokoll spricht, mit diesem Endpunkt.

Die Automatisierungsbibliothek muss nie wissen, was ein Fingerprint ist. Wenn sie sich verbindet, steht die Umgebung bereits.

Ein Profil starten

curl -s -H "Authorization: Bearer $POWEROPS_API_KEY" \
  http://127.0.0.1:50326/status

Jede Route außer der Statusprüfung erfordert einen Bearer-Schlüssel. Das Starten eines Browsers liefert den Endpunkt, mit dem Sie sich verbinden:

curl -s -X POST \
  -H "Authorization: Bearer $POWEROPS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"profileId": "..."}' \
  http://127.0.0.1:50326/browser/start

Ihre Bibliothek anbinden

import { chromium } from "playwright";

const res = await fetch("http://127.0.0.1:50326/browser/start", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.POWEROPS_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ profileId }),
});

const { ws } = await res.json();

// The profile's identity, storage and proxy are already in place.
const browser = await chromium.connectOverCDP(ws);
const [context] = browser.contexts();
const page = context.pages()[0] ?? await context.newPage();

await page.goto("https://example.com");

Die wichtige Zeile ist der Kommentar. In Ihrem Skript steht keine Fingerprint-Konfiguration, denn die Umgebung zu konfigurieren ist nicht Aufgabe Ihres Skripts. Sie gehört zum Profil und bleibt gleich, egal ob das Profil von einer Person per Klick auf eine Zeile geöffnet wird oder von einem geplanten Job um drei Uhr nachts.

Was die API abdeckt

Wie sie lokal bleibt

Eine API, die Browser mit angemeldeten Accounts steuert, verdient ein Wort zu ihren Grenzen.

Ein Muster zum Übernehmen

Fragen Sie die Profile einer Gruppe ab, starten Sie jedes, erledigen Sie die Arbeit, stoppen Sie es. Führen Sie sie ein paar auf einmal aus statt alle gleichzeitig. Die Einschränkung ist der Arbeitsspeicher Ihres eigenen Rechners, denn jedes Profil ist ein echter Browserprozess.

const { profiles } = await api("/profiles?groupId=" + groupId);

for (const batch of chunk(profiles, 5)) {
  await Promise.all(batch.map(async (profile) => {
    const { ws } = await api("/browser/start", { profileId: profile.id });
    try {
      await doTheWork(ws);
    } finally {
      await api("/browser/stop", { profileId: profile.id });
    }
  }));
}

Das Stoppen des Profils in einem `finally` ist wichtiger, als es aussieht: Sauberes Schließen schreibt den Browserzustand zurück, und ein mitten in der Sitzung beendetes Profil kann die gerade aufgebaute Sitzung verlieren.

Alle Artikel · Scan starten