API-Tutorials

So lösen Sie reCAPTCHA v2 Enterprise mit Node.js

reCAPTCHA v2 Enterprise fügt dem Standard-Kontrollkästchen „Ich bin kein Roboter“ eine Risikobewertung auf Unternehmensniveau hinzu. Das Widget sieht genauso aus wie Standard v2, die Token werden jedoch über das Enterprise-Backend von Google mit strengerer Validierung überprüft. Um das Problem mit CaptchaAI zu lösen, fügen Sie enterprise=1 zu Ihrer v2-Anfrage hinzu.

Dieser Leitfaden behandelt die vollständige Node.js-Implementierung – die Erkennung von Enterprise v2, die Übermittlung an CaptchaAI, die Abfrage des Ergebnisses und die Injektion des Tokens.


Was Sie brauchen

Anforderung Einzelheiten
CaptchaAI API-Schlüssel captchaai.com
Node.js 14+ Mit eingebautem fetch oder node-fetch
Sitekey Von der Enterprise-Anker-URL (Parameter k=)
Seiten-URL Vollständige URL, unter der das CAPTCHA erscheint
Aktion (optional) Aus dem Parameter sa= in der Anker-URL

Schritt 1: reCAPTCHA v2 Enterprise identifizieren

Öffnen Sie DevTools und suchen Sie auf der Registerkarte „Netzwerk“ nach der Enterprise-Ankeranforderung:

https://www.google.com/recaptcha/enterprise/anchor?ar=1&k=6LdxxXXxAAAAAAcX...&sa=LOGIN&...

Schlüsselindikatoren:

  • Die Skriptquelle enthält /recaptcha/enterprise.js oder /enterprise/anchor
  • Der Parameter k= ist der Sitekey
  • Der Parameter sa= (falls vorhanden) ist die Aktion

Standard v2 verwendet /recaptcha/api2/anchor – fügen Sie enterprise=1 nicht für Standard v2 hinzu.


Schritt 2: Senden Sie die Aufgabe an CaptchaAI

const API_KEY = "YOUR_API_KEY";

async function submitTask(sitekey, pageurl, action) {
  const params = new URLSearchParams({
    key: API_KEY,
    method: "userrecaptcha",
    googlekey: sitekey,
    pageurl: pageurl,
    enterprise: "1",
    json: "1",
  });

  if (action) {
    params.set("action", action);
  }

  const response = await fetch(
    `https://ocr.captchaai.com/in.php?${params}`
  );
  const data = await response.json();

  if (data.status !== 1) {
    throw new Error(`Submit failed: ${data.request}`);
  }

  console.log(`Task submitted. ID: ${data.request}`);
  return data.request;
}

Schritt 3: Umfrage zum Ergebnis

Warten Sie 20 Sekunden vor der ersten Umfrage und überprüfen Sie dann alle 5 Sekunden:

function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

async function pollResult(taskId) {
  await delay(20000);

  for (let attempt = 0; attempt < 30; attempt++) {
    const params = new URLSearchParams({
      key: API_KEY,
      action: "get",
      id: taskId,
      json: "1",
    });

    const response = await fetch(
      `https://ocr.captchaai.com/res.php?${params}`
    );
    const data = await response.json();

    if (data.status === 1) {
      console.log(`Solved. Token: ${data.request.substring(0, 60)}...`);
      return {
        token: data.request,
        userAgent: data.user_agent || "",
      };
    }

    if (data.request !== "CAPCHA_NOT_READY") {
      throw new Error(`Solve failed: ${data.request}`);
    }

    console.log(`Attempt ${attempt + 1}: not ready, waiting 5s...`);
    await delay(5000);
  }

  throw new Error("Solve timed out");
}

Schritt 4: Injizieren Sie das Token

Senden Sie das gelöste Token als g-recaptcha-response. Wenn die API ein user_agent zurückgegeben hat, verwenden Sie es in Ihren Anforderungsheadern:

async function submitForm(token, userAgent) {
  const headers = { "Content-Type": "application/x-www-form-urlencoded" };

  if (userAgent) {
    headers["User-Agent"] = userAgent;
  }

  const response = await fetch("https://example.com/api/login", {
    method: "POST",
    headers,
    body: new URLSearchParams({
      username: "user",
      password: "pass",
      "g-recaptcha-response": token,
    }),
  });

  console.log(`Response status: ${response.status}`);
  return response;
}

Vollständiges Arbeitsskript

const API_KEY = "YOUR_API_KEY";
const SITE_KEY = "6LdxxXXxAAAAAAcXxxXxxX91xxxxxxxx8xxOx7A";
const PAGE_URL = "https://example.com/login";
const ACTION = "LOGIN"; // optional — omit if not in anchor URL

function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

async function solveRecaptchaV2Enterprise() {
  // Submit task
  const submitParams = new URLSearchParams({
    key: API_KEY,
    method: "userrecaptcha",
    googlekey: SITE_KEY,
    pageurl: PAGE_URL,
    enterprise: "1",
    action: ACTION,
    json: "1",
  });

  const submitRes = await fetch(
    `https://ocr.captchaai.com/in.php?${submitParams}`
  );
  const submitData = await submitRes.json();

  if (submitData.status !== 1) {
    throw new Error(`Submit error: ${submitData.request}`);
  }

  const taskId = submitData.request;
  console.log(`Task ID: ${taskId}`);

  // Poll for result
  await delay(20000);

  for (let i = 0; i < 30; i++) {
    const pollParams = new URLSearchParams({
      key: API_KEY,
      action: "get",
      id: taskId,
      json: "1",
    });

    const pollRes = await fetch(
      `https://ocr.captchaai.com/res.php?${pollParams}`
    );
    const pollData = await pollRes.json();

    if (pollData.status === 1) {
      return {
        token: pollData.request,
        userAgent: pollData.user_agent || "",
      };
    }

    if (pollData.request !== "CAPCHA_NOT_READY") {
      throw new Error(`Solve error: ${pollData.request}`);
    }

    await delay(5000);
  }

  throw new Error("Solve timed out");
}

(async () => {
  const { token, userAgent } = await solveRecaptchaV2Enterprise();
  console.log(`Token: ${token.substring(0, 60)}...`);
  if (userAgent) console.log(`User-Agent: ${userAgent}`);
})();

Erwartete Ausgabe:

Task ID: 73849562810
Token: 03AGdBq24PBCqLmOx2V4pGHJjkR2xZ1r...
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)...

Fehlerbehebung

Fehler Ursache Beheben
ERROR_WRONG_USER_KEY Ungültiges API-Schlüsselformat Der Prüfschlüssel aus Ihrem Dashboard besteht aus 32 Zeichen
ERROR_KEY_DOES_NOT_EXIST Schlüssel nicht gefunden Schlüssel verifizieren untercaptchaai.com
ERROR_ZERO_BALANCE Unzureichendes Gleichgewicht Laden Sie Ihr Konto auf
ERROR_BAD_TOKEN_OR_PAGEURL Falscher Sitekey oder falsche URL Extrahieren Sie den korrekten k=-Wert aus der Enterprise-Anker-URL
ERROR_CAPTCHA_UNSOLVABLE Konnte nicht gelöst werden Stellen Sie sicher, dass der Sitekey Enterprise v2 ist, und versuchen Sie es erneut
Token von der Website abgelehnt Nichtübereinstimmung zwischen Benutzer und Agent Verwenden Sie user_agent aus der Lösungsantwort

FAQ

Wie erkenne ich Enterprise v2 im Vergleich zu Standard v2?

Enterprise v2 wird von /recaptcha/enterprise/ im Skript oder in der Anker-URL geladen. Standard v2 verwendet /recaptcha/api2/.

Ist der Aktionsparameter erforderlich?

Nur wenn die Anker-URL sa= enthält. Wenn nicht, lassen Sie es in Ihrer CaptchaAI-Anfrage weg.

Warum lehnt die Zielseite mein Token ab?

Am häufigsten: Nichtübereinstimmung zwischen Benutzer und Agent. Enterprise v2-Tokens sind an den User-Agent des Solvers gebunden. Verwenden Sie immer den in der Umfrageantwort zurückgegebenen user_agent-Wert.

Kann ich dies mit Puppeteer oder Playwright verwenden?

Ja. Extrahieren Sie den Sitekey von der Seite, lösen Sie ihn über die API und fügen Sie dann das Token in document.getElementById('g-recaptcha-response').innerHTML ein.

Was ist die typische Lösungszeit?

15–30 Sekunden, abhängig von der Serverauslastung.


Beginnen Sie mit der Lösung von reCAPTCHA v2 Enterprise

Holen Sie sich Ihren API-Schlüssel untercaptchaai.comund fügen Sie enterprise=1 zu Ihren v2-Anfragen hinzu.


Verwandte Leitfäden

Diskussionen (0)

Noch keine Kommentare.