In diesem Artikel haben wir versucht, alle wichtigen Fragen zu beantworten. Der erste Schritt bei der Lösung der Aufgabe besteht darin festzustellen, welches Schutzsystem eingesetzt wird. Dazu können Sie die Liste beliebter Captchas und Anti-Bot-Schutzsysteme heranziehen, in der visuelle Beispiele und zentrale Merkmale aufgeführt sind, die Ihnen helfen, schnell zu erkennen, womit Sie es zu tun haben.
Wenn Sie feststellen, dass auf Ihrer Website FunCaptcha (Arkose Labs CAPTCHA) eingesetzt wird, besteht der nächste Schritt darin, seine Eigenschaften und Funktionsweise genauer zu untersuchen. Ebenfalls in diesem Artikel finden Sie eine Anleitung zur Integration von FunCaptcha (Arkose Labs CAPTCHA), damit Sie vollständig verstehen, wie das System auf Ihrer Website arbeitet. So können Sie nicht nur den aktuellen Schutz besser einschätzen, sondern auch seine Wartung vorausschauend planen.
Die Arbeit mit CapMonster Cloud über die API umfasst in der Regel folgende Schritte:
type - FunCaptchaTask
websiteURL - die Adresse der Seite, auf der die CAPTCHA gelöst wird;
websitePublicKey - der FunCaptcha-Schlüssel (Wert Public Key oder pk);
data - ein zusätzlicher Parameter. Er ist erforderlich, wenn auf der Website data[blob] verwendet wird;
funcaptchaApiJSSubdomain - das Arkose-Labs-Subdomain (Wert surl). Geben Sie es an, wenn es vom Standard abweicht: client-api.arkoselabs.com
userAgent - User-Agent des Browsers. Übermitteln Sie nur einen aktuellen UA von einem Windows-Betriebssystem.
Für diese Aufgabe ist außerdem die Verwendung Ihrer Proxys erforderlich:
proxyType :
proxyAddress - IP-Adresse des Proxys (IPv4/IPv6).
proxyPort - Proxy-Port.
proxyLogin - Login des Proxy-Servers.
proxyPassword - Passwort des Proxy-Servers.
https://api.capmonster.cloud/createTask
{
"clientKey": "API_KEY",
"task": {
"type": "FunCaptchaTask",
"websiteURL": "https://www.example.com",
"websitePublicKey": "EX72CCFB-26EX-40E5-91E6-85EX70BE98ED",
"funcaptchaApiJSSubdomain": "example-api.arkoselabs.com",
"data": "{\"blob\":\"nj9UbL+yio7goOlTQ/b64t.ayrrBnP6kPgzlKYCP/kv491lKS...Wot/7gjpyIxs7VYb0+QuRcfQ/t6bzh5pXDkOFSskA/V/ITSVZSAlglIplLcdreZ4PE8skfMU6k1Q\"}",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
"proxyType": "http", // Fügen Sie bei Bedarf einen Proxy hinzu
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}
{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"solution": {
"token": "337187b9f57678923.5060184402|r=us-west-2|lang=en|pk=EX72CCFB-26EX-40E5-91E6-85EX70BE98ED|at=40|ag=101|cdn_url=https%3A%2F%2Fclient-api.arkoselabs.com%2Fcdn%2Ffc|surl=https%3A%2F%2Fclient-api.arkoselabs.com|smurl=https%3A%2F%2Fclient-api.arkoselabs.com%2Fcdn%2Ffc%2Fassets%2Fstyle-manager",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
},
"status": "ready"
}
// npm install playwright
const { chromium } = require("playwright");
const WEBSITE_URL = "https://example.com";
// Token, der von CapMonster Cloud erhalten wurde
const FUN_CAPTCHA_TOKEN = "PUT_YOUR_FUN_CAPTCHA_TOKEN_HERE";
(async () => {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
/**
* Universeller Arkose-Interceptor (v1 / v2)
* Wird vor dem Laden der Seite ausgeführt
*/
await page.addInitScript(() => {
const callbacks = [];
function captureCallback(cb, source) {
if (typeof cb === "function") {
callbacks.push(cb);
console.log("[Arkose] callback captured from", source);
}
}
function patchRender(obj, name) {
if (!obj || typeof obj.render !== "function") return;
const originalRender = obj.render;
obj.render = function (container, options = {}) {
captureCallback(options.callback, name + ".render");
return originalRender.apply(this, arguments);
};
}
// Abfangen über Object.defineProperty (wird häufig von Arkose verwendet)
const originalDefineProperty = Object.defineProperty;
Object.defineProperty = function (target, prop, descriptor) {
if (
(prop === "FunCaptcha" || prop === "ArkoseEnforcement") &&
descriptor &&
typeof descriptor.value === "object"
) {
patchRender(descriptor.value, prop);
}
return originalDefineProperty.apply(this, arguments);
};
// Fallback: periodische Überprüfung globaler Objekte
const interval = setInterval(() => {
if (window.FunCaptcha) patchRender(window.FunCaptcha, "FunCaptcha");
if (window.ArkoseEnforcement)
patchRender(window.ArkoseEnforcement, "ArkoseEnforcement");
if (callbacks.length > 0) clearInterval(interval);
}, 200);
// Universeller Punkt zur Übergabe des Tokens
window.__arkoseSolve = function (token) {
if (callbacks.length > 0) {
callbacks.forEach((cb) => cb(token));
console.log("[Arkose] token delivered via captured callbacks");
return true;
}
// Alternative Varianten
if (typeof window.arkoseCallback === "function") {
window.arkoseCallback(token);
console.log("[Arkose] token delivered via arkoseCallback");
return true;
}
// Fallback
window._arkoseToken = token;
console.log("[Arkose] token stored in window._arkoseToken");
return false;
};
});
/**
* Seite öffnen
*/
console.log("Opening page...");
await page.goto(WEBSITE_URL, { waitUntil: "domcontentloaded" });
/**
* Hier sollte die Website FunCaptcha initialisieren
* (Registrierung, Login, Button, Formular usw.)
*/
/**
* Fertigen Token übergeben
*/
console.log("Injecting FunCaptcha token...");
await page.evaluate((token) => {
if (!window.__arkoseSolve) {
console.log("[Arkose] solver not ready");
return;
}
window.__arkoseSolve(token);
}, FUN_CAPTCHA_TOKEN);
/**
* Der Seite Zeit geben, das Ergebnis zu verarbeiten
*/
await page.waitForTimeout(5000);
console.log("Done.");
await browser.close();
})();
Nach Erhalt des Zugriffs bekommen Sie zwei Schlüssel (Public / Private) im Bereich Settings → Keys.

Wenden Sie sich bei Bedarf an den Customer Success Manager (CSM) für:
Empfehlungen von Arkose
Allgemeiner Ablauf
Schritt 1. Client-seitige Integration
Auf Browser-Seite (Arkose Bot Manager):
Client API:
client-api.arkoselabs.com<company>-api.arkoselabs.comGrundlegende Anforderungen
Das Ergebnis der Client-Arbeit ist ein Token, der an den Server gesendet werden muss.
<html>
<head>
<!--
Binden Sie die Arkose-Labs-API im <head> der Seite ein. Im folgenden Beispiel unbedingt:
- ersetzen Sie <YOUR PUBLIC KEY> durch den von Arkose Labs bereitgestellten Public Key;
- ersetzen Sie <YOUR CALLBACK> durch den Namen der globalen Callback-Funktion, die Sie unten definieren.
Beispiel:
<script src="//client-api.arkoselabs.com/v2/<YOUR PUBLIC KEY>/api.js"
data-callback="setupDetect"></script>
-->
<script src="//client-api.arkoselabs.com/v2/<YOUR PUBLIC KEY>/api.js" data-callback="<YOUR CALLBACK>"></script>
<link rel="shortcut icon" href="#">
<meta charset="UTF-8">
</head>
<body>
<!--
Das Trigger-Element kann sich an beliebiger Stelle der Seite befinden und jederzeit dem DOM hinzugefügt werden.
-->
<button id="arkose-trigger">
Trigger-Element
</button>
<!--
Zur Konfiguration von Arkose (Detection- oder Enforcement-Modus) platzieren Sie das Skript vor dem schließenden </body>-Tag und definieren Sie die Callback-Funktion als global.
-->
<script>
/*
Diese globale Funktion wird aufgerufen, sobald die Arkose-API bereit ist. Der Funktionsname muss mit dem Wert des Attributs data-callback des script-Tags übereinstimmen, das die Arkose-API lädt.
*/
function setupArkose(myArkose) {
myArkose.setConfig({
selector: '#arkose-trigger',
onCompleted: function(response) {
// Einmaliger Token, der an den Server gesendet werden muss
console.log(response.token);
}
});
}
</script>
</body>
</html>
Schritt 2. Server-seitige Überprüfung
Auf dem Server wird der Token über die Arkose Verify API überprüft.
Verify API endpoint
https://<company>-verify.arkoselabs.com/api/v4/verify/Erforderliche Anfrageparameter
Beispiel für den Body einer POST-Anfrage
{
"private_key": "_PRIVATE_KEY_HERE_",
"session_token": "_SESSION_TOKEN_HERE_",
"log_data": "_LOG_DATA_HERE_"
}
Die API-Antwort enthält Informationen zur Session und zum Prüfergebnis.
Wichtige Punkte
<?php
$private_key = 'IHR_PRIVATE_KEY';
$verify_url = 'https://<company>-verify.arkoselabs.com/api/v4/verify/';
$input = json_decode(file_get_contents('php://input'), true);
$session_token = $input['session_token'] ?? null;
$log_data = $input['log_data'] ?? '';
$email_address = $input['email_address'] ?? '';
if (!$session_token) {
http_response_code(400);
echo json_encode(['error' => 'Session-Token fehlt']);
exit;
}
$data = [
'private_key' => $private_key,
'session_token' => $session_token,
'log_data' => $log_data,
'email_address' => $email_address
];
$options = [
'http' => [
'header' => "Content-Type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data),
],
];
$context = stream_context_create($options);
$result = file_get_contents($verify_url, false, $context);
if ($result === FALSE) {
http_response_code(500);
echo json_encode(['error' => 'Fehler bei der CAPTCHA-Überprüfung']);
exit;
}
echo $result;
?>
So funktioniert es:
Wenn Sie eine Website übernommen haben, auf der bereits ein Captcha oder ein anderes Schutzsystem installiert ist und Sie keinen Zugriff auf den Code haben, ist das kein Problem! Es ist ziemlich einfach festzustellen, welche Technologie genau verwendet wird. Und um die korrekte Funktionsweise zu überprüfen, können Sie den Erkennungsdienst CapMonster Cloud in einer isolierten Testumgebung nutzen, um sicherzustellen, dass der Mechanismus zur Tokenverarbeitung und die Prüflogik ordnungsgemäß funktionieren.
Im Fall von FunCaptcha reicht es aus, das System zu erkennen, sein Verhalten zu analysieren und sich zu vergewissern, dass der Schutz korrekt arbeitet. In diesem Artikel haben wir gezeigt, wie Sie FunCaptcha identifizieren und wo Sie Anleitungen für die Einbindung oder Neukonfiguration finden, damit Sie den Schutz zuverlässig betreiben und seine Arbeit unter Kontrolle halten können.