Руководство по реализации — reCAPTCHA v2
Шаг 1: Зарегистрируйте ключ сайта
Перейдите в Google reCAPTCHA Admin Console, выберите reCAPTCHA v2 ("I'm not a robot" Checkbox) и добавьте свой домен. Вы получите site key (публичный ключ) и secret key (приватный ключ — только для проверки на стороне сервера, никогда не раскрывайте его на стороне клиента).
Шаг 2: Frontend — виджет Checkbox
<!DOCTYPE html>
<html>
<head>
<title>Демо reCAPTCHA v2</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<form action="/submit" method="POST">
<input type="text" name="email" placeholder="Ваш email" required />
<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
<br/>
<input type="submit" value="Отправить">
</form>
</body>
</html>
Шаг 3: Frontend — вариант Invisible v2
<!DOCTYPE html>
<html>
<head>
<title>Демо reCAPTCHA v2 Invisible</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
function onSubmit(token) {
document.getElementById("demo-form").submit();
}
</script>
</head>
<body>
<form id="demo-form" action="/submit" method="POST">
<input type="text" name="email" placeholder="Ваш email" required />
<button class="g-recaptcha"
data-sitekey="YOUR_SITE_KEY"
data-callback="onSubmit"
data-badge="bottomright">
Отправить
</button>
</form>
</body>
</html>
Шаг 4: Проверка на backend (PHP)
<?php
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
exit('Метод не разрешен');
}
$token = $_POST['g-recaptcha-response'] ?? '';
$secret = 'YOUR_SECRET_KEY';
if (!$token) {
exit('Токен CAPTCHA отсутствует.');
}
// Используйте POST, чтобы не раскрывать secret key в логах сервера/прокси
$postData = http_build_query([
'secret' => $secret,
'response' => $token,
]);
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => $postData,
],
]);
$response = file_get_contents(
'https://www.google.com/recaptcha/api/siteverify',
false,
$context
);
if ($response === false) {
http_response_code(503);
exit('Не удалось связаться со службой проверки reCAPTCHA.');
}
$result = json_decode($response, true);
if (!empty($result['success'])) {
echo "<p>Форма успешно отправлена!</p>";
} else {
http_response_code(403);
echo "<p>Проверка CAPTCHA не пройдена. Попробуйте еще раз.</p>";
}
?>
Руководство по реализации — reCAPTCHA v3
Шаг 1: Зарегистрируйте ключ сайта v3
В reCAPTCHA Admin Console выберите reCAPTCHA v3. Вы получите ключи, отдельные от ключей v2 — не смешивайте их между версиями.
Шаг 2: Frontend — программная обработка токена
<!DOCTYPE html>
<html>
<head>
<title>Демо reCAPTCHA v3</title>
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
</head>
<body>
<form id="login-form">
<input type="email" name="email" placeholder="Email" required />
<input type="password" name="password" placeholder="Пароль" required />
<button type="button" onclick="submitWithRecaptcha()">Войти</button>
</form>
<script>
async function submitWithRecaptcha() {
// Срок действия токенов истекает через 2 минуты -- выполняйте непосредственно перед отправкой
const token = await new Promise((resolve) => {
grecaptcha.ready(() => {
grecaptcha.execute('YOUR_SITE_KEY', { action: 'login' }).then(resolve);
});
});
const response = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: document.querySelector('[name="email"]').value,
recaptchaToken: token
})
});
const data = await response.json();
if (data.ok) {
alert('Вход выполнен успешно!');
} else {
alert('Проверка не пройдена: ' + (data.error || 'неизвестная ошибка'));
}
}
</script>
</body>
</html>
Шаг 3: Проверка на backend (Node.js / Express)
// Node.js 18+ с Express
import express from 'express';
const app = express();
app.use(express.json());
app.post('/api/login', async (req, res) => {
const { recaptchaToken } = req.body;
const params = new URLSearchParams();
params.set('secret', process.env.RECAPTCHA_SECRET);
params.set('response', recaptchaToken);
try {
const verifyRes = await fetch('https://www.google.com/recaptcha/api/siteverify', {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
body: params
});
const data = await verifyRes.json();
if (!data.success) {
return res.status(403).json({ error: 'recaptcha_failed', codes: data['error-codes'] });
}
// Всегда проверяйте, что action соответствует ожидаемому
if (data.action !== 'login') {
return res.status(403).json({ error: 'recaptcha_action_mismatch' });
}
// 0.5 — рекомендуемый Google стартовый порог, настраивайте его с учетом вашего трафика
if (data.score < 0.5) {
return res.status(403).json({ error: 'recaptcha_low_score', score: data.score });
}
return res.json({ ok: true });
} catch (err) {
return res.status(503).json({ error: 'recaptcha_service_unavailable' });
}
});
app.listen(3000, () => console.log('Сервер запущен на порту 3000'));
Автоматизация решения reCAPTCHA с CapMonster Cloud
При создании тестовой автоматизации, QA-пайплайнов или авторизованных сценариев веб-скрейпинга вам нужен способ программно проходить проверки reCAPTCHA — не ломая тестовый набор каждый раз, когда появляется CAPTCHA. CapMonster Cloud — это сервис автоматического решения CAPTCHA, который поддерживает reCAPTCHA v2, v3 и многие другие типы CAPTCHA, предоставляя API, легко интегрируемый в любой технологический стек.
Важно: CapMonster Cloud предназначен для использования на сайтах и платформах, к которым у вас есть авторизованный доступ, — для тестирования, QA-автоматизации и авторизованных сценариев веб-скрейпинга.
Решение reCAPTCHA v2 через API CapMonster Cloud
Запрос на создание задачи:
POST https://api.capmonster.cloud/createTask
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV2Task",
"websiteURL": "https://example.com/login",
"websiteKey": "YOUR_SITE_KEY"
}
}
Ответ
{
"errorId":0,
"taskId":407533072
}
Получение результата:
POST https://api.capmonster.cloud/getTaskResult
{
"clientKey": "YOUR_API_KEY",
"taskId": 407533072
}
Ответ (когда решение готово):
{
"errorId": 0,
"status": "ready",
"solution": {
"gRecaptchaResponse": "03AFcWeA66ZARdA5te7ac..."
}
}
Решение reCAPTCHA v3 через API CapMonster Cloud
POST https://api.capmonster.cloud/createTask
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "YOUR_SITE_KEY",
"isEnterprise": false,
"minScore": 0.7,
"pageAction": "login"
}
}
Последующие шаги аналогичны v2.
Пример SDK (Python — reCAPTCHA v3)
# https://github.com/CapMonsterCloud/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV3ProxylessRequest
client_options = ClientOptions(api_key="YOUR_API_KEY") # Укажите ваш API key CapMonster Cloud
cap_monster_client = CapMonsterClient(options=client_options)
# При необходимости вы можете проверить баланс
balance = asyncio.run(cap_monster_client.get_balance())
print("Баланс:", balance)
recaptcha_v3_request = RecaptchaV3ProxylessRequest(
websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta", # URL вашей страницы с captcha
websiteKey="6Le0xVgUAAAAAIt20XEB4rVhYOODgTl00d8juDob",
minScore=0.6,
pageAction="myverify"
)
async def solve_captcha():
return await cap_monster_client.solve_captcha(recaptcha_v3_request)
responses = asyncio.run(solve_captcha())
print(responses)
Пример SDK (Node.js — reCAPTCHA v2)
// https://github.com/CapMonsterCloud/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2Request } from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // Укажите ваш API key CapMonster Cloud
async function solveRecaptchaV2() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// Базовый пример без proxy
// CapMonster Cloud автоматически использует собственные proxy
let recaptcha2Request = new RecaptchaV2Request({
websiteURL: "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
websiteKey: "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
});
// Пример использования собственного proxy
// Раскомментируйте этот блок, если хотите использовать свой proxy
/*
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
recaptcha2Request = new RecaptchaV2Request({
websiteURL: "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
websiteKey: "6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd",
proxy,
userAgent: "userAgentPlaceholder"
});
*/
// При необходимости вы можете проверить баланс
const balance = await client.getBalance();
console.log("Баланс:", balance);
const result = await client.Solve(recaptcha2Request);
console.log("Решение:", result);
}
solveRecaptchaV2().catch(console.error);
CapMonster Cloud также поддерживает reCAPTCHA Enterprise, Cloudflare Turnstile и ряд других типов CAPTCHA, что делает его универсальным инструментом для любой тестовой инфраструктуры, взаимодействующей с формами, защищенными CAPTCHA.