Einen CAPTCHA-Solver mit Puppeteer verwenden

Von solvethree3 Min. Lesezeit

Rufen Sie mit dem offiziellen JavaScript SDK ein reCAPTCHA v3 Enterprise-Token ab und übergeben Sie anschließend solution.token über Puppeteer an Ihr Formular. Das SDK löst die Aufgabe; es wendet die Lösung weder auf einen Browser an noch stellt es ein Browser-Plugin bereit.

Das folgende Beispiel verwendet ein eigenes HTTPS-Formular mit einer Textarea namens g-recaptcha-response und einer Schaltfläche zum Absenden. Dies sind die Formularanforderungen der Demo, keine universelle Schnittstelle für reCAPTCHA-geschützte Seiten.

Auf dieser Seite

Abhängigkeiten und eigenes Formular vorbereiten

  1. 1.

    Puppeteer und das SDK installieren

    Verwenden Sie Node.js 22 oder neuer. Installieren Sie mit npm puppeteer und das offizielle SDK-Tarball unter https://solvethree.com/downloads/solvethree-sdk-0.1.0.tgz. Das SDK wird als @solvethree/sdk importiert; verwenden Sie die Download-URL, statt eine Veröffentlichung in der npm-Registry vorauszusetzen. Speichern Sie das Beispiel als ES-Modul, etwa in einer Datei mit der Endung .mjs.

  2. 2.

    Website-Profil konfigurieren

    Richten Sie Ihren eigenen Hostnamen in der solvethree-Konsole ein und stellen Sie sicher, dass sein Profil für Ihren Workspace aktiv ist. Das Senden eines Hostnamens und einer Aktion erstellt dieses Profil nicht. Das Beispiel verwendet die Aktion login; ändern Sie sie in die für Ihre Anwendung konfigurierte Aktion.

  3. 3.

    Umgebungsvariablen festlegen

    Setzen Sie TARGET_URL auf das eigene HTTPS-Formular, SOLVETHREE_PROXY auf Ihre HTTP- oder HTTPS-Proxy-URL und SOLVETHREE_API_KEY auf Ihren Workspace-Schlüssel. Bewahren Sie den Schlüssel im Node.js-Prozess auf, nicht im JavaScript der Seite. Das Beispiel verwendet denselben Proxy für den Lösungsvorgang und die Übermittlung im Browser.

site der Aufgabe ist der aus TARGET_URL extrahierte Hostname, nicht die vollständige Seiten-URL. Senden Sie für reCAPTCHA site, action und genau eines der Felder proxy oder proxyCandidates; fügen Sie kein Feld type oder url hinzu. Dieses Beispiel verwendet proxy, damit Puppeteer denselben Proxy direkt nutzen kann.

Lösen und anschließend Puppeteer mit derselben Identität öffnen

Puppeteer + Node.js · Eigenes HTTPS-Formular lösen
// Install puppeteer and the official solvethree SDK first.
import puppeteer from 'puppeteer';
import { Solvethree } from '@solvethree/sdk';

const target = new URL(process.env.TARGET_URL); // Your configured HTTPS page.
const proxy = new URL(process.env.SOLVETHREE_PROXY);
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const result = await client.solve({
  site: target.hostname, action: 'login', proxy: process.env.SOLVETHREE_PROXY,
});
const browser = await puppeteer.launch({
  args: [`--proxy-server=${proxy.protocol}//${proxy.host}`],
});
try {
  const page = await browser.newPage();
  if (proxy.username) await page.authenticate({
    username: decodeURIComponent(proxy.username),
    password: decodeURIComponent(proxy.password),
  });
  await page.setUserAgent({ userAgent: result.solution.userAgent });
  await page.setExtraHTTPHeaders({ 'sec-ch-ua': result.solution.secChUa });
  await page.goto(target.href);
  // Adapt these selectors and any required callback to your own form.
  await page.waitForSelector('[name="g-recaptcha-response"]');
  await page.$eval('[name="g-recaptcha-response"]', (field, token) => {
    field.value = token;
    field.dispatchEvent(new Event('input', { bubbles: true }));
  }, result.solution.token);
  await Promise.all([
    page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
    page.click('button[type="submit"]'),
  ]);
  // Check your application's success response here.
} finally {
  await browser.close();
}

client.solve erstellt die Aufgabe einmal und fragt ihren Status ab, bis sie bereit ist oder eine Ausnahme ausgelöst wird. Erst nach der Rückkehr dieses Aufrufs startet das Beispiel Puppeteer. Der Browser verwendet den Proxy der Aufgabe, authentifiziert sich bei vorhandenen Proxy-Zugangsdaten und übernimmt vor der Navigation solution.userAgent und solution.secChUa.

Ersetzen Sie diesen Proxy oder diese Browseridentität beim Übermitteln des Tokens nicht durch unzusammenhängende Werte. Wenn Sie später zu proxyCandidates wechseln, wählen Sie mit der SDK-Hilfsfunktion successfulProxy den erfolgreichen ursprünglichen Proxy für den Browser aus.

Falls der Lösungsvorgang fehlschlägt, prüfen Sie errorCode und error der Aufgabe, statt es mit unveränderten Eingaben erneut zu versuchen. HTTP-Anfragefehler sind von endgültigen Aufgabenfehlern zu unterscheiden. Der Block finally schließt den lokalen Browser nach den Browseraktionen; das Schließen von Seiten ist kein Mechanismus zum Abbrechen entfernter Aufgaben.

Formularannahmen der Demo ersetzen

  • [name="g-recaptcha-response"] wählt die Textarea der Demo aus. Ersetzen Sie den Selektor, wenn Ihre Anwendung das Token über ein anderes Feld oder einen anderen Anfrageparameter empfängt. Der zu übermittelnde Wert ist solution.token, nicht die Aufgaben-ID.
  • button[type="submit"] wählt die Schaltfläche zum Absenden in der Demo aus. Verwenden Sie das tatsächliche Bedienelement oder den Übermittlungsmechanismus Ihrer Anwendung.
  • Das Beispiel weist das Token zu und löst ein Ereignis vom Typ input aus. Das ersetzt keinen anwendungsspezifischen Callback. Ergänzen Sie vor der Übermittlung alle erforderlichen Callbacks, CSRF-Werte, Anmeldefelder und Schritte zur Sitzungseinrichtung.
  • Ersetzen Sie den abschließenden Kommentar zur Erfolgsprüfung durch eine Assertion, die die Antwort oder den resultierenden Zustand Ihrer Anwendung prüft. Eine bereite Solver-Aufgabe belegt nicht, dass die Anwendung das Token akzeptiert hat.

Wenn Sie einen laufenden Browser wiederverwenden, wählen Sie seinen BrowserContext bewusst: Eine neue Seite ist nicht automatisch eine separate Sitzung. Halten Sie die Sitzungsanforderungen des Formulars zusammen, statt Seiten aus unabhängigen Abläufen zu mischen.

Führe deinen ersten Task aus.

Starte mit $5 Workspace-Guthaben.

Workspace erstellen
Einen CAPTCHA-Solver mit Puppeteer verwenden · solvethree