この記事では、よくある疑問にできるだけお答えしました。まず最初のステップは、どのような保護システムが使われているかを特定することです。そのために、代表的なキャプチャやボット対策システムの一覧を参照できます。ここには、どの仕組みが使われているかを素早く見分けるための画面イメージや主な特徴がまとめられています。
もしサイトで GeeTest CAPTCHA v4 が使われていることが分かったら、次のステップはその特徴と動作をより詳しく確認することです。同じこの記事の中で、GeeTest CAPTCHA v4 をサイトに導入するための手順書も確認できるので、あなたのサイト上でどのように機能しているのかをしっかり理解できます。これにより、現在の保護を正しく把握できるだけでなく、今後の運用や保守も計画的に行えるようになります。
GeeTest CAPTCHA v4 を含むフォームをテストする際は、キャプチャが正しく組み込まれ機能しているか確認する必要があります。
サイトに埋め込まれたキャプチャを手動で確認する方法
自動解決には CapMonster Cloud のようなツールを使うと便利です。キャプチャのパラメータを送信すると、サーバー側で処理して利用可能なトークンを返してくれます。そのトークンをフォームに挿入すれば、ユーザー操作なしでチェックを通過できます。
CapMonster Cloud API を使った一般的な手順:
GeeTest CAPTCHA v4 を解決するリクエストには、次のパラメータを指定する必要があります。
type - GeeTestTask;
websiteURL - CAPTCHA が表示・解決されるページの URL;
gt - ドメイン用の GeeTest 識別キー — パラメータ captcha_id;
version - 4;
geetestApiServerSubdomain - GeeTest API サーバーのサブドメイン(api.geetest.com 以外である必要があります);
geetestGetLib - ページ上に CAPTCHA を表示するためのスクリプトパス。一部のサイトでは必須になる場合があります;
initParameters - v4 で使用される追加パラメータ。CAPTCHA の種類・検証方法を表す “riskType” と組み合わせて利用します.
https://api.capmonster.cloud/createTask{
"clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://gt4.geetest.com/",
"gt": "54088bb07d2df3c46b79f80300b0abbe",
"version": 4,
"initParameters": {
"riskType": "slide"
}
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId": 0,
"status": "ready",
"solution": {
"captcha_id": "f5c2ad5a8a3cf37192d8b9c039950f79",
"lot_number": "bcb2c6ce2f8e4e9da74f2c1fa63bd713",
"pass_token": "edc7a17716535a5ae624ef4707cb6e7e478dc557608b068d202682c8297695cf",
"gen_time": "1683794919",
"captcha_output": "XwmTZEJCJEnRIJBlvtEAZ662T...[cut]...SQ3fX-MyoYOVDMDXWSRQig56"
}
}
// npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from "playwright";
import {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest
} from "@zennolab_com/capmonstercloud-client";
const CAPMONSTER_API_KEY = "YOUR_CAPMONSTER_API_KEY";
async function solveGeetestV4(pageUrl) {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
let detected = null;
let solutionObj = null;
// 1. /load のレスポンスをフックし、captcha_id や challenge などを取得
page.on("response", async (response) => {
const url = response.url();
if (!url.startsWith("https://gcaptcha4.geetest.com/load?")) return;
const params = new URLSearchParams(url.split("?")[1] || "");
const captchaId = params.get("captcha_id");
const challenge = params.get("challenge");
const captchaType = params.get("captcha_type");
if (captchaId && challenge) {
detected = { captchaId, challenge, captchaType };
console.log("Detected GeeTest v4 load:", detected);
}
});
// 2. ページを読み込む
console.log("Opening page:", pageUrl);
await page.goto(pageUrl, { waitUntil: "domcontentloaded" });
// 3. /load をキャプチャできるまで待機
console.log("Waiting for GeeTest /load...");
while (!detected) {
await page.waitForTimeout(500);
}
// 4. CapMonster Cloud にタスクを送信
console.log("Sending task to CapMonster...");
const cmc = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: CAPMONSTER_API_KEY })
);
const task = new GeeTestRequest({
websiteURL: pageUrl,
gt: detected.captchaId,
challenge: detected.challenge,
version: "4",
initParameters: {
riskType: detected.captchaType || "slide"
}
});
const solveRes = await cmc.Solve(task);
const sol = solveRes.solution || solveRes;
solutionObj = {
captcha_id: sol.captcha_id || detected.captchaId,
captcha_output: sol.captcha_output,
lot_number: sol.lot_number,
pass_token: sol.pass_token
};
console.log("Got solution from CapMonster:", solutionObj);
// 5. /verify に自分の値を挿入し、成功レスポンスを得る
await page.route("https://gcaptcha4.geetest.com/verify*", async (route) => {
console.log("Intercepted /verify, injecting fake success...");
const body = `geetest_${Date.now()}(${JSON.stringify({
status: "success",
data: {
result: "success",
seccode: {
captcha_id: solutionObj.captcha_id,
captcha_output: solutionObj.captcha_output,
lot_number: solutionObj.lot_number,
pass_token: solutionObj.pass_token
}
}
})})`;
await route.fulfill({
status: 200,
contentType: "application/javascript",
body
});
});
// 6. ユーザー操作をエミュレート(例:CAPTCHA ボタンをクリック)
console.log("Waiting for captcha interaction...");
await page.waitForTimeout(3000);
// 検証呼び出しの例:
try {
await page.click('.geetest_btn'); // CAPTCHA ボタン
console.log("Clicked captcha button");
} catch {
console.log("Captcha button not found");
}
// 場合によっては verify() を手動で呼び出す必要があります:
await page.evaluate(() => {
if (window.initGeetest4 && typeof verify === "function") {
verify();
}
});
console.log("Waiting for verification request...");
await page.waitForTimeout(3000);
await browser.close();
return { detected, solution: solutionObj };
}
(async () => {
const url = "https://example.com"; // GeeTest v4 が設置されたページの URL に置き換えてください
const res = await solveGeetestV4(url);
console.log("FINISHED:", res);
})();
1. GeeTest アカウント に登録するか、ログインします。
2. Captcha Dashboard に移動し、Behavior Verification v4 を選択します。

3. ダッシュボードで + Create application をクリックします。
4. APP/website name(CAPTCHA を使用するサイトまたはアプリ名)、Address(CAPTCHA を設置するサイトのメインドメイン、例:https://example.com)、Industry(サイトのカテゴリ。例:「E-commerce」「Social Media」など)を入力し、Confirm をクリックします。
5. 作成したアプリケーション名の横にある Add events をクリックします。Event には CAPTCHA を使用する具体的なシナリオ(login、register など)を指定し、Device にはプラットフォーム(Web / Wap など)、Business types には CAPTCHA を使う業務シナリオの種類(Sign-up / Sign-in など)を指定して、Add をクリックします。
6. これで、作成した CAPTCHA に対して、クライアントとサーバーの両方で使用する ID と、サーバー側で検証に使用する Key がダッシュボードに表示されます。

7. クライアント側の実装
まずスクリプトを読み込みます:
<script src="https://static.geetest.com/v4/gt4.js"></script>次に CAPTCHA を初期化します:
initGeetest4(
{ captchaId: "Your CaptchaId" },
function (captcha) {
captcha.appendTo("#captcha"); // ページ内の要素に挿入
}
);重要:
<!-- CAPTCHA スクリプトを読み込む -->
<script src="https://static.geetest.com/v4/gt4.js"></script>
</head>
<body>
<h1>CAPTCHA Demo</h1>
<!-- CAPTCHA 用コンテナ要素 -->
<div id="captcha"></div>
<script>
// CAPTCHA の初期化処理
initGeetest4(
{
captchaId: "YOUR_CAPTCHA_ID" // 自分の CaptchaId に置き換えてください
},
function (captcha) {
// CAPTCHA を指定したページ要素に挿入
captcha.appendTo("#captcha");
// ここで成功時の処理を行えます
captcha.onSuccess(function() {
const validate = captcha.getValidate();
console.log("CAPTCHA passed!", validate);
// ここから validate をサーバーに送って検証してもよいです
});
}
);
</script>
8. サーバー側の実装。
ユーザーがフロントエンドで CAPTCHA を通過すると、一連のパラメータが生成されます。これらのパラメータをバックエンドに送信し、GeeTest のセカンダリ検証 API でチェックすることで、検証が正しく行われたことを確認します。
セカンダリ検証 API:
http://gcaptcha4.geetest.com/validate主なリクエストパラメータ
{
"status": "success",
"result": "success",
"reason": "",
"captcha_args": {
"used_type": "slide",
"user_ip": "127.0.0.1",
"lot_number": "4dc3cfc2cdff448cad8d13107198d473",
"scene": "anti crawler",
"referer": "http://127.0.0.1:8077/"
}
}<?php
$captcha_id = 'YOUR_CAPTCHA_ID';
$captcha_key = 'YOUR_CAPTCHA_KEY';
$api_server = 'http://gcaptcha4.geetest.com';
// フロントエンドからパラメータを受け取る
$lot_number = $_POST['lot_number'] ?? '';
$captcha_output = $_POST['captcha_output'] ?? '';
$pass_token = $_POST['pass_token'] ?? '';
$gen_time = $_POST['gen_time'] ?? '';
// 署名(sign_token)を生成する
$sign_token = hash_hmac('sha256', $lot_number, $captcha_key);
// リクエスト送信用のデータを組み立てる
$data = [
'lot_number' => $lot_number,
'captcha_output' => $captcha_output,
'pass_token' => $pass_token,
'gen_time' => $gen_time,
'sign_token' => $sign_token
];
// セカンダリ検証 API へのリクエスト
$url = $api_server . '/validate?captcha_id=' . $captcha_id;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
'timeout' => 5
]
];
$context = stream_context_create($options);
$result = @file_get_contents($url, false, $context);
if ($result === FALSE) {
$response = ['login' => 'fail', 'reason' => 'request geetest api fail'];
} else {
$gt_msg = json_decode($result, true);
if ($gt_msg['result'] === 'success') {
$response = ['login' => 'success', 'reason' => $gt_msg['reason']];
} else {
$response = ['login' => 'fail', 'reason' => $gt_msg['reason']];
}
}
echo json_encode($response);
?>
すでにキャプチャや別の保護システムが導入されているサイトを引き継いだものの、コードにはアクセスできない場合でも心配はいりません!どの技術が使われているかを特定するのはそれほど難しくありません。動作が正しいか確認するには、隔離されたテスト環境で認識サービスCapMonster Cloudを利用し、トークン処理の仕組みと検証ロジックが正しく機能しているかをチェックできます。
GeeTest CAPTCHA v4の場合も、システムを特定し、その挙動を調べて、保護機能が正しく動いていることを確認すれば十分です。この記事では、GeeTest CAPTCHA v4を見分ける方法と、その導入や再設定に関する手順書の見つけ方を紹介しました。これにより、防御を安心して維持し、その動作をしっかりと管理できます。