Технические разборы

Как reCAPTCHA обнаруживает автоматизацию и как работают API-решатели

reCAPTCHA использует многоуровневую систему обнаружения, которая выходит далеко за рамки видимого флажка или проверки изображения. Он использует сложный механизм снятия сигналы браузера и поведенческого анализа, который идентифицирует автоматизированные инструменты еще до того, как пользователь начнет взаимодействовать с CAPTCHA. В этом руководстве подробно описаны все методы обнаружения, которые использует reCAPTCHA, и объясняется, как со всеми ними справляются решатели на основе API, такие как CaptchaAI.


Уровень обнаружения 1: проверка среды JavaScript

reCAPTCHA выполняет проверки JavaScript для обнаружения автономных браузеров и систем автоматизации.

Обнаружение сигнал WebDriver

Основной показатель автоматизации:

// Selenium/Puppeteer set this automatically
сигнал WebDriver === true  // → Automation detected

// Real browser
сигнал WebDriver === undefined  // or false → Normal browser

Если сигнал WebDriver равен true, reCAPTCHA немедленно помечает сеанс как автоматизированный, что обычно приводит к оценке 0,1 или ниже.

Отсутствуют API браузера

reCAPTCHA проверяет API, которые headless браузеры пропускают или реализуют по-другому:

// Probes reCAPTCHA performs (simplified)
const checks = {
    // Chrome-specific object
    hasChrome: !!window.chrome,
    hasChromeRuntime: !!(window.chrome && window.chrome.runtime),

    // Plugin and MIME type arrays
    pluginCount: navigator.plugins.length,
    mimeTypeCount: navigator.mimeTypes.length,

    // Notification permission
    notificationPermission: Notification.permission,

    // Speech synthesis voices
    speechVoices: window.speechSynthesis.getVoices().length,

    // Performance observer
    hasPerformanceObserver: typeof PerformanceObserver !== "undefined",
};
Зонд Ожидается (настоящий Chrome) headless-режим хром Обнаружение
window.chrome Объект неопределенный или минимальный Автоматизация
navigator.plugins 2-5 плагинов Пустой массив Автоматизация
navigator.permissions Объект с запросом() Может выбросить или пропасть Автоматизация
Notification.permission "по умолчанию" Может бросить Автоматизация
window.speechSynthesis Объект с голосами Пустой или отсутствует Автоматизация

Вмешательство в цепочку прототипов

Сложные инструменты автоматизации переопределяют API браузера, чтобы скрыть свое присутствие. reCAPTCHA тесты на взлом:

// reCAPTCHA may check if native functions were modified
const nativeToString = Function.prototype.toString;
const pluginsToString = navigator.plugins.toString();

// Overridden functions have different toString output:
// Native: "function get plugins() { [native code] }"
// Overridden: "function () { return [...fakePlugins] }"

Уровень обнаружения 2: снятие сигналы браузера Canvas и WebGL

Сигналы среды на холсте

reCAPTCHA отображает скрытые элементы на холсте и считывает пиксельные данные. Результат зависит от ОС, графического процессора, механизма рендеринга шрифтов и настроек сглаживания:

// Simplified canvas сигналы браузера
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
ctx.textBaseline = "alphabetic";
ctx.font = "14px Arial";
ctx.fillStyle = "#f60";
ctx.fillRect(125, 1, 62, 20);
ctx.fillStyle = "#069";
ctx.fillText("CaptchaTest,!", 2, 15);

const сигналы браузера = canvas.toDataURL();
// Unique per browser/OS/GPU combination

Сигналы обнаружения:

  • Один и тот же Сигналы среды в разных сообщениях OS/browsers → Обнаружен спуфинг
  • Операции Canvas возвращают данные униформы/blank → headless среда
  • Сигналы среды соответствует известному headless шаблону Chrome →. Автоматизация отмечена.

Сигналы WebGL

const gl = document.createElement("canvas").getContext("webgl");
const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");

const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);

// Real browser: "ANGLE (NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0)"
// Headless Chrome: "Google Inc. (Google SwiftShader)" ← Strong bot signal

SwiftShader — это программный графический процессор Google, который используется, когда аппаратный графический процессор недоступен. Это четкий индикатор headless среды.


Уровень обнаружения 3: Поведенческий анализ

Это самый сильный уровень обнаружения reCAPTCHA. Он отслеживает поведение пользователя от загрузки страницы до отправки формы.

Анализ движения мыши

reCAPTCHA records:
  ├─ Mouse coordinates at ~60fps intervals
  ├─ Velocity and acceleration at each point
  ├─ Trajectories between clickable elements
  ├─ Hover patterns over links and buttons
  ├─ Micro-movements while "stationary"
  └─ Natural overshoot when targeting elements

Human pattern:

  - Curved paths with variable speed
  - Natural acceleration/deceleration (Fitts's Law)
  - Random micro-jitter during hovering
  - Occasional overshoot and correction

Bot pattern:

  - Zero mouse events (no mouse simulation)
  - Straight lines at constant speed
  - Perfect targeting (no overshoot)
  - Identical patterns across sessions

Анализ клавиатуры

reCAPTCHA records:
  ├─ Inter-key interval for each key pair
  ├─ Key hold duration (keydown to keyup)
  ├─ Error rate (backspace frequency)
  ├─ Typing rhythm consistency
  └─ Input method (keyboard vs paste vs JavaScript)

Human pattern:

  - Variable intervals (80-300ms typical)
  - Faster for common character pairs
  - Occasional errors and corrections
  - keydown → keypress → keyup sequence

Bot pattern:

  - Constant intervals or instant input
  - No keypress events (value set via JS)
  - Zero errors
  - All characters appear simultaneously

Сроки и последовательность взаимодействия

reCAPTCHA records:
  ├─ Time from page load to first interaction
  ├─ Time from CAPTCHA rendering to click
  ├─ Scroll events and depths
  ├─ Focus/blur events on form fields
  └─ Tab between fields vs click between fields

Suspicious patterns:

  - First interaction < 1 second after page load
  - CAPTCHA clicked immediately after rendering
  - No scroll events before interacting with below-fold content
  - All form fields filled in <500ms

Уровень обнаружения 4: анализ сети и IP

база данных репутации IP

Google поддерживает обширную информацию об IP:

  • Известные диапазоны центров обработки данных: AWS (52.x.x.x, 54.x.x.x), GCP, Azure, DigitalOcean и т. д.
  • Известные провайдеры прокси/VPN: NordVPN, ExpressVPN, коммерческие прокси-сервисы.
  • Выходные узлы Tor: общедоступный список, регулярно обновляемый.
  • История злоупотреблений: IP-адреса, вовлеченные в спам, очистку или сбор CAPTCHA.
  • Географические закономерности. Быстрая смена местоположения указывает на шаблоны переходов VPN.

Снятие сигналы браузера TLS

Каждый HTTP-клиент создает уникальный Сигналы рукопожатия TLS (JA3/JA4):

Chrome 120:    JA3 = 771,4865-4866-4867-49195-49199-49196..
Python/requests: JA3 = 771,4866-4867-4865-49196-49200..
curl/libcurl:  JA3 = 771,49196-49200-159-52393-52392..

reCAPTCHA проверяет, соответствует ли TLS-сигналы заявленному агенту пользователя. Пользовательский агент Chrome с сигналы браузера Python TLS помечен как автоматизированный.

Анализ HTTP-заголовка

Real Chrome headers:
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,...
  Accept-Language: en-US,en;q=0.9
  Accept-Encoding: gzip, deflate, br
  Sec-CH-UA: "Not_A Brand";v="8", "Chromium";v="120"
  Sec-CH-UA-Platform: "Windows"
  Sec-Fetch-Dest: document
  Sec-Fetch-Mode: navigate

Automation headers (missing or different):

  - Missing Sec-CH-UA headers
  - Missing Accept-Language
  - Non-standard Accept header
  - Missing Sec-Fetch-* headers

Уровень обнаружения 5: Межсессионный анализ

reCAPTCHA отслеживает закономерности в нескольких сеансах и сайтах:

  • Корреляция сигналы браузера сеанса. Один и тот же Браузерные сигналы выполняет быстрые запросы на многих сайтах.
  • Анализ шаблонов решения: Правильные ответы в пределах одинаковых временных интервалов (время решения человеком варьируется).
  • Корреляция проблем и ответов: Несколько сеансов, решающих одинаковые задачи за считанные секунды.
  • Временная шкала файлов cookie: Несколько новых сеансов с одного и того же IP без сохранения файлов cookie.

Как решатели на основе API справляются с обнаружением

Решатели на основе API, такие как CaptchaAI, контролируемая проверка систему обнаружения reCAPTCHA, работая в совершенно отдельной среде:

Your automation:
  Extracts sitekey + pageurl from target page
      ↓
  Sends to CaptchaAI API (HTTPS request to ocr.captchaai.com)
      ↓
CaptchaAI's solver environment:
  ├─ Real browser with genuine сигналы браузера (not headless)
  ├─ Human-like behavioral patterns
  ├─ Clean residential IP
  ├─ Valid cookies and session history
  ├─ Matching TLS/header сигналы браузераs
  └─ Solves the challenge with human-like behavior
      ↓
  Returns valid g-recaptcha-response token
      ↓
Your automation:
  Submits token to target website
      ↓
Target website validates token with Google
  → Google sees a legitimate solve from a trusted environment
  → Token validated: success = true

Ключевая информация: Ваша система автоматизации никогда не взаимодействует с reCAPTCHA напрямую. Решатель выполняет все действия по снятию сигналы браузера, поведенческому анализу и выполнению задач в среде, оптимизированной для прохождения каждого уровня обнаружения. Вашему коду нужно только отправить полученный токен.

Пример Python

import requests
import time

API_KEY = "YOUR_API_KEY"

# Your automation only needs sitekey and pageurl
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
    "pageurl": "https://https://staging.example.com/qa-login",
    "json": 1,
})

task_id = submit.json()["request"]

# Poll for token
for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        # Submit this token to the target site's form
        print("Token received — submit to target form")
        break

Пример Node.js

const axios = require("axios");

async function solveRecaptcha(sitekey, pageurl) {
    const API_KEY = "YOUR_API_KEY";

    const { data: submit } = await axios.post(
        "https://ocr.captchaai.com/in.php",
        new URLSearchParams({
            key: API_KEY,
            method: "userrecaptcha",
            googlekey: sitekey,
            pageurl: pageurl,
            json: 1,
        })
    );

    const taskId = submit.request;

    for (let i = 0; i < 60; i++) {
        await new Promise(r => setTimeout(r, 5000));
        const { data: result } = await axios.get(
            "https://ocr.captchaai.com/res.php",
            { params: { key: API_KEY, action: "get", id: taskId, json: 1 } }
        );

        if (result.status === 1) return result.request;
    }

    throw new Error("Timeout");
}

Часто задаваемые вопросы

Может ли reCAPTCHA обнаружить, что использовался решатель API?

reCAPTCHA проверяет токен по своим собственным записям. Если среда решателя создала законное решение с человеческим поведением, токен действителен. Google видит решение обычного человека, а не стороннего сервиса. Сам токен не несет информации о том, как он был сгенерирован.

Всегда ли использование Selenium вызывает обнаружение reCAPTCHA?

Selenium по умолчанию с ChromeDriver по умолчанию обнаруживается немедленно из-за сигнал WebDriver = true, отсутствия API-интерфейсов Chrome и HTTP-заголовков ChromeDriver. Selenium со скрытой настройкой (undetected-chromedriver, стандартная конфигурация браузера-плагины) может снизить уровень обнаружения, но не устраняет его. Решение на основе API полностью позволяет избежать этой проблемы, поскольку не взаимодействует с reCAPTCHA в вашем браузере.

Как быстро reCAPTCHA обновляет свои методы обнаружения?

Google постоянно обновляет эвристику обнаружения reCAPTCHA. Основные обновления происходят каждые несколько месяцев. Новые методы обнаружения автономных браузеров обычно внедряются в течение нескольких недель после выпуска нового инструмента автоматизации. Службы решения API, такие как CaptchaAI, немедленно адаптируются к этим изменениям, поскольку поддерживают собственные оптимизированные среды решения.

Обменивает ли reCAPTCHA данные обнаружения между веб-сайтами?

Да. Анализ рисков reCAPTCHA включает межсайтовые сигналы через файл cookie _GRECAPTCHA и серверную аналитику Google. Плохое поведение на одном сайте, защищенном reCAPTCHA, может снизить оценки на других сайтах, использующих тот же профиль браузера.


Краткое содержание

reCAPTCHA обнаруживает автоматизацию на пяти уровнях: зондирование среды JavaScript (headless обнаружение), снятие сигналы браузера Canvas/WebGL, поведенческий анализ (мышь, клавиатура, прокрутка), сетевая репутация /IP и межсессионный анализ. Решатели на основе API, такие какCaptchaAIобрабатывать все пять уровней, решая задачи в отдельной оптимизированной среде и возвращая действительный токен. Ваш код автоматизации никогда напрямую не взаимодействует с reCAPTCHA, что делает его невидимым для системы обнаружения.

Похожие статьи

  • Как решить обратный вызов Recaptcha V2 с помощью API
  • Cloudflare Turnstile Recaptcha V2. Обработка на той же площадке.
  • Подробное описание Recaptcha Enterprise Assessment API
Комментарии для этой статьи отключены.