この記事では、よくある疑問にできるだけお答えしました。まず最初のステップは、どのような保護システムが使われているかを特定することです。そのために、代表的なキャプチャやボット対策システムの一覧を参照できます。ここには、どの仕組みが使われているかを素早く見分けるための画面イメージや主な特徴がまとめられています。
もしサイトで GeeTest CAPTCHA v3 が使われていることが分かったら、次のステップはその特徴と動作をより詳しく確認することです。同じこの記事の中で、GeeTest CAPTCHA v3 をサイトに導入するための手順書も確認できるので、あなたのサイト上でどのように機能しているのかをしっかり理解できます。これにより、現在の保護を正しく把握できるだけでなく、今後の運用や保守も計画的に行えるようになります。
GeeTest CAPTCHA v3 は、サイトに悪影響を与える可能性のある自動化された操作から Web サイトを保護するシステムです。実際のユーザーとボットを見分けることで、サイトの安全性と安定した動作を実現します。
GeeTest CAPTCHA v3 を含むフォームをテストする際は、キャプチャが正しく組み込まれ機能しているか確認する必要があります。
サイトに埋め込まれたキャプチャを手動で確認する方法
自動解決には CapMonster Cloud のようなツールを使うと便利です。キャプチャのパラメータを送信すると、サーバー側で処理して利用可能なトークンを返してくれます。そのトークンをフォームに挿入すれば、ユーザー操作なしでチェックを通過できます。
CapMonster Cloud API を使った一般的な手順:
GeeTest CAPTCHA v3 を解決するリクエストには、次のパラメーターを指定する必要があります:
type - GeeTestTask;
websiteURL - ユーザーが CAPTCHA を通過するページのアドレス。正しい URL は、https://api-na.geetest.com/gettype.php へのリクエスト時にヘッダー Referer として送信されます。;
gt - ドメイン用の GeeTest gt 識別キー;
challenge - 各タスクの前に、新しい challenge 値を取得するためのリクエストを送信する必要があります。これを行わないと、古いトークンが使用され、ERROR_TOKEN_EXPIRED エラーが発生します。;
geetestApiServerSubdomain - Geetest API サーバーのサブドメイン(api.geetest.com とは別のドメインである必要があります).
https://api.capmonster.cloud/createTask{
"clientKey":"YOUR_CAPMONSTER_CLOUD_API_KEY",
"task":
{
"type":"GeeTestTask",
"websiteURL":"https://www.example.com",
"gt":"022397c99c9f646f6477822485f30404",
"challenge":"7f044f48bc951ecfbfc03842b5e1fe59",
"geetestApiServerSubdomain":"api-na.geetest.com"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId":0,
"status":"ready",
"solution": {
"challenge":"0f759dd1ea6c4wc76cedc2991039ca4f23",
"validate":"6275e26419211d1f526e674d97110e15",
"seccode":"510cd9735583edcb158601067195a5eb|jordan"
}
}// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium
import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, GeeTestRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = 'your_capmonster_cloud_api_key';
const DEMO_PAGE = 'https://example.com';
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
console.log('ページを開いています...');
await page.goto(DEMO_PAGE, { waitUntil: 'networkidle' });
console.log('CAPTCHA のパラメーターを取得しています...');
const init = await page.evaluate(async () => {
// GeeTest の init-params を取得するため、サーバーへリクエストを送信します。ここは自分のエンドポイントに置き換えてください。
const r = await fetch(`/api/v1/example/gee-test/init-params?t=${Date.now()}`);
return r.json();
});
console.log('Init params:', init);
console.log('CapMonster Cloud にタスクを作成しています...');
const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
const solRaw = await cmc.Solve(new GeeTestRequest({ websiteURL: DEMO_PAGE, gt: init.gt, challenge: init.challenge }));
const sol = solRaw.solution || solRaw;
console.log('CAPTCHA の解決結果:', sol);
console.log('解決結果を hidden フィールドにセットしています...');
await page.evaluate(s => {
['challenge','validate','seccode'].forEach(n => {
const el = document.querySelector(`input[name="geetest_${n}"]`);
if(el) el.value = s[n];
});
}, sol);
await page.click('button[data-action="test_action"]'); // ここを自分の値に置き換えてください
console.log('サーバーに verify リクエストを送信しています...');
const result = await page.evaluate(async () => {
const payload = {
geetest_challenge: document.querySelector('input[name="geetest_challenge"]')?.value,
geetest_validate: document.querySelector('input[name="geetest_validate"]')?.value,
geetest_seccode: document.querySelector('input[name="geetest_seccode"]')?.value
};
// ここを自分の値に置き換えてください
const r = await fetch('/api/v1/example/gee-test/verify', {
method:'POST',
headers:{'Content-Type':'application/json'},
body: JSON.stringify(payload)
});
return r.json();
});
console.log('CAPTCHA 検証結果:', result);
await page.waitForTimeout(3000);
await browser.close();
})();1. GeeTest アカウントに登録するか、ログインします。
2. Captcha Dashboard に移動し、CAPTCHA v3 を選択します。

3. 新しい CAPTCHA を作成するために +New Captcha をクリックします。CAPTCHA 名(プロダクト名やプロジェクト名など)、CAPTCHA を設置するサイトの URL、そして CAPTCHA を使用するコンテキスト(例:ログイン/新規登録/パスワードリセット など)を指定します。
4. 一意の CAPTCHA ID と KEY が発行されます。これらはセキュリティパネルから設定できます。

5. サーバー側(Server SDK)を設定します:
サーバーは次の 2 つの API を利用します:
<?php
header('Content-Type: application/json');
const CAPTCHA_ID = '07df3141a35**********19a473d7c50';
const CAPTCHA_KEY = '543b19036ef********8e07d121b81e9';
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
function getJson($url) {
$res = @file_get_contents($url);
return $res ? json_decode($res, true) : null;
}
// API1:初期化
if ($path === '/register') {
$data = getJson("https://api.geetest.com/register.php?gt=" . CAPTCHA_ID . "&json_format=1");
echo json_encode($data ? [
'gt' => CAPTCHA_ID,
'challenge' => $data['challenge'],
'success' => $data['success'] === 1,
'new_captcha' => true
] : ['success' => 0]);
exit;
}
// API2:検証
if ($path === '/validate' && $_SERVER['REQUEST_METHOD'] === 'POST') {
$req = json_decode(file_get_contents('php://input'), true);
$data = getJson("https://api.geetest.com/validate.php?" . http_build_query([
'seccode' => $req['geetest_seccode'] ?? '',
'challenge' => $req['geetest_challenge'] ?? '',
'gt' => CAPTCHA_ID,
'json_format' => 1
]));
echo json_encode(['success' => !empty($data['seccode'])]);
exit;
}
http_response_code(404);
echo json_encode(['error' => 'Not found']);
6. クライアント側(Client SDK)を実装します:
クライアント側では gt.js を読み込み、サーバー(API1)から受け取ったパラメーターを渡して initGeetest を呼び出します。以下は ajax を使った例です:
ajax({
url: "https://example.com/register",
type: "get",
dataType: "json",
success: function (data) {
initGeetest({
gt: data.gt,
challenge: data.challenge,
offline: !data.success,
new_captcha: true
}, function (captchaObj) {
captchaObj.appendTo("#captcha");
captchaObj.onSuccess(function () {
const result = captchaObj.getValidate();
ajax({
url: "https://example.com/validate",
type: "post",
contentType: "application/json",
data: JSON.stringify(result),
success: function(res) {
if (res.success) alert('CAPTCHA passed');
else alert('CAPTCHA failed');
}
});
});
});
}
});
動作確認
次の点を確認してください:
フェイルバック(予備モード)
GeeTest サーバーが利用できない場合:
すでにキャプチャや別の保護システムが導入されているサイトを引き継いだものの、コードにはアクセスできない場合でも心配はいりません!どの技術が使われているかを特定するのはそれほど難しくありません。動作が正しいか確認するには、隔離されたテスト環境で認識サービスCapMonster Cloudを利用し、トークン処理の仕組みと検証ロジックが正しく機能しているかをチェックできます。
GeeTest CAPTCHA v3の場合も、システムを特定し、その挙動を調べて、保護機能が正しく動いていることを確認すれば十分です。この記事では、GeeTest CAPTCHA v3を見分ける方法と、その導入や再設定に関する手順書の見つけ方を紹介しました。これにより、防御を安心して維持し、その動作をしっかりと管理できます。