Looking for international version of our service? Go to 2captcha.com

Логотип «RuCaptcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти CaptchaFox

Мэттью Моди
Мэттью Моди

Технический специалист

Введение

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

Как работает CaptchaFox?

Система отслеживает и оценивает:

  • Траекторию движения курсора — плавность, ускорение, микро-колебания
  • Временные метки — задержки между действиями, время загрузки страницы до первого клика
  • Поведенческие паттерны — как пользователь скроллит, кликает, взаимодействует с формами
  • Технические сигналы — заголовки браузера, параметры Canvas, WebGL, шрифты
  • Сетевой контекст — репутация IP, геолокация, согласованность данных

Если система обнаруживает признаки автоматизации (например, мгновенные действия, отсутствие «человеческого шума» в движениях мыши, несоответствие заголовков), она блокирует доступ или выдаёт усложнённую проверку.

Почему обычный скрипт не справится?

Попытка обойти CaptchaFox простым HTTP-запросом или headless-браузером без эмуляции поведения обречена на провал. Капча «понимает», что за запросом стоит не человек, а скрипт. Именно поэтому для работы с CaptchaFox критически важны два компонента:

  1. Прокси — с «чистой» репутацией, соответствующий гео целевого сайта
  2. Настоящий User-Agent — совпадающий с версией браузера, ОС и архитектурой устройства

Пошаговая стратегия обхода CaptchaFox

Как найти websiteKey: три надёжных способа

Способ 1: Исходный код страницы

  1. Откройте страницу → Ctrl+U
  2. Поиск (Ctrl+F) по строкам: captchafox, sk_, data-key, CaptchaFox.init
  3. Пример того, что вы ищете:
    html Copy
    <div id="captchafox-container" data-key="sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G"></div>
    или
    javascript Copy
    window.CaptchaFox.init({ key: "sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G", ... });

Способ 2: Сетевые запросы (DevTools → Network)

  1. Откройте DevTools (F12) → вкладка Network
  2. Обновите страницу или выполните действие, вызывающее капчу
  3. В фильтре введите: captchafox, uicdn, challenge, init
  4. Найдите запрос к домену captchafox.com или uicdn.com
  5. В параметрах запроса (Query String) или в теле ответа ищите поле key или websiteKey

Способ 3: Консоль JavaScript

Иногда конфигурация капчи доступна глобально:

javascript Copy
// Попробуйте выполнить в консоли:
console.log(window.CaptchaFoxConfig);
console.log(window.__CFVUE?.captcha?.key);
console.log(document.querySelector('[data-key]')?.dataset.key);

Важно: websiteKey может быть динамическим и меняться при обновлении страницы или сессии. Если задача не решается — обновите ключ.
Максимально надежный способ — 2


Шаг 1: Отправка задачи на решение

Endpoint: POST https://api.rucaptcha.com/createTask

Структура задачи (CaptchaFoxTask)

json Copy
{
  "clientKey": "ВАШ_КЛЮЧ",
  "task": {
    "type": "CaptchaFoxTask",
    "websiteURL": "https://example.com/protected-page",
    "websiteKey": "sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...",
    "proxyType": "http",
    "proxyAddress": "1.2.3.4",
    "proxyPort": 8080,
    "proxyLogin": "optional_user",
    "proxyPassword": "optional_pass",
    "apiServer": "https://cdn.captchafox.com/"
  }
}

Разбор ключевых полей

Поле Зачем нужно
type Говорит API, какой решатель использовать
websiteURL Воркер загружает страницу в реальном браузере
websiteKey Идентифицирует конкретную капчу
userAgent Определяет «личность» браузера
proxy Обеспечивает правильный сетевой контекст
apiServer Указывает, откуда загружать скрипты капчи

Про apiServer: По умолчанию используется https://cdn.captchafox.com/. Но некоторые сайты подключают CaptchaFox через альтернативные источники, например:
https://s.uicdn.com/mampkg/@mamdev/core.frontend.libs.captchafox/
В этом случае токен будет иметь префикс MAM_. Если вы получаете токен не того формата — найдите в исходном коде страницы, откуда подключается скрипт капчи, и укажите этот адрес в apiServer.

Успешный ответ

json Copy
{
  "errorId": 0,
  "taskId": 987654321,
  "status": "processing"
}

Сохраните taskId — по нему вы будете получать результат.


Шаг 2: Получение токена

Endpoint: POST https://api.rucaptcha.com/getTaskResult

json Copy
{
  "clientKey": "a1b2c3d4e5f6g7h8",
  "taskId": 987654321
}

Ответ с готовым решением

json Copy
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "7828075fb55ecbd9146745ee6f2bec475b88076d36e23050f1fb28359ffca15d"
  },
  "cost": "0.00145",
  "createTime": 1695214711,
  "endTime": 1695214720,
  "solveCount": 1
}

Что делать с токеном?

Полученный токен — это криптографическое доказательство того, что «человек прошёл проверку». Теперь его нужно правильно передать целевому сайту.

Как узнать, куда вставлять токен?

  1. Откройте целевой сайт в браузере с включённым DevTools → Network
  2. Выполните действие, которое должно пройти капчу (отправка формы, покупка, регистрация)
  3. Найдите запрос, который отправляется после успешного прохождения
  4. Посмотрите, в каком поле передаётся токен:
    • Параметр формы: cf_token, captcha_response, captchafox_token
    • Заголовок: X-Captcha-Token, CF-Token
    • Тело JSON: {"captcha": {"token": "..."}}

Пример использования токена в запросе:

python Copy
import requests

token = "7828075fb55ecbd9146745ee6f2bec475b88076d36e23050f1fb28359ffca15d"

response = requests.post(
    "https://example.com/api/submit",
    headers={
        "User-Agent": "Mozilla/5.0 ...",  # Тот же, что использовался при решении!
        "X-Captcha-Token": token  # Или другое имя заголовка
    },
    data={
        "field1": "value1",
        "cf_token": token  # Или другое имя поля
    },
    proxies={
        "http": "http://user:[email protected]:8080",  # Тот же прокси!
        "https": "http://user:[email protected]:8080"
    }
)

Критически важно: Запрос с токеном должен идти через тот же прокси и с тем же User-Agent, что и задача на решение. Иначе сайт увидит несоответствие и отклонит токен.
Также учитывайте в запросе Headers и другие необходимые параметры.


Готовый рабочий пример на Python

python Copy
import requests
import time
from typing import Dict, Optional

class CaptchaFoxSolver:
    """Класс для обхода CaptchaFox через ruCaptcha API"""
    
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.create_url = "https://api.rucaptcha.com/createTask"
        self.result_url = "https://api.rucaptcha.com/getTaskResult"
    
    def create_task(self, website_url: str, website_key: str, 
                   user_agent: str, proxy: Dict) -> Optional[str]:
        """Создаёт задачу на решение капчи"""
        
        payload = {
            "clientKey": self.api_key,
            "task": {
                "type": "CaptchaFoxTask",
                "websiteURL": website_url,
                "websiteKey": website_key,
                "userAgent": user_agent,
                "proxyType": proxy["type"],
                "proxyAddress": proxy["address"],
                "proxyPort": proxy["port"],
            }
        }
        
        # Добавляем авторизацию прокси при наличии
        if proxy.get("login") and proxy.get("password"):
            payload["task"]["proxyLogin"] = proxy["login"]
            payload["task"]["proxyPassword"] = proxy["password"]
        
        # Кастомный API-сервер, если нужен
        if proxy.get("api_server"):
            payload["task"]["apiServer"] = proxy["api_server"]
        
        response = requests.post(self.create_url, json=payload, timeout=30)
        result = response.json()
        
        if result.get("errorId") != 0:
            raise RuntimeError(f"Ошибка создания задачи: {result}")
        
        return result.get("taskId")
    
    def get_result(self, task_id: str, timeout: int = 120) -> str:
        """Получает токен решения, опрашивая API"""
        
        start_time = time.time()
        
        while time.time() - start_time < timeout:
            time.sleep(5)  # Интервал опроса
            
            response = requests.post(
                self.result_url,
                json={"clientKey": self.api_key, "taskId": task_id},
                timeout=30
            )
            result = response.json()
            
            if result.get("errorId") != 0:
                raise RuntimeError(f"Ошибка получения результата: {result}")
            
            if result["status"] == "ready":
                return result["solution"]["token"]
            
            # Статус ещё processing — продолжаем ждать
            continue
        
        raise TimeoutError(f"Превышено время ожидания ({timeout}с) для задачи {task_id}")
    
    def solve(self, website_url: str, website_key: str,
              user_agent: str, proxy: Dict) -> str:
        """Полный цикл: создание задачи → ожидание → возврат токена"""
        
        task_id = self.create_task(website_url, website_key, user_agent, proxy)
        print(f"✅ Задача создана: {task_id}")
        
        token = self.get_result(task_id)
        print(f"✅ Токен получен: {token[:20]}...")
        
        return token


# ==================== ПРИМЕР ИСПОЛЬЗОВАНИЯ ====================
if __name__ == "__main__":
    
    # Инициализация решателя
    solver = CaptchaFoxSolver(api_key="your_api_key_here")
    
    # Параметры целевого сайта
    config = {
        "website_url": "https://example.com/checkout",
        "website_key": "sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "proxy": {
            "type": "http",
            "address": "185.12.34.56",
            "port": 8080,
            "login": "proxy_user",      # опционально
            "password": "proxy_pass",   # опционально
            # "api_server": "https://s.uicdn.com/mampkg/@mamdev/..."  # если нужно
        }
    }
    
    try:
        # Решаем капчу
        token = solver.solve(
            website_url=config["website_url"],
            website_key=config["website_key"],
            user_agent=config["user_agent"],
            proxy=config["proxy"]
        )
        
        # Используем токен в целевом запросе
        response = requests.post(
            url="https://example.com/api/submit",
            headers={
                "User-Agent": config["user_agent"],
                "X-Captcha-Token": token
            },
            data={"order_id": "12345", "cf_token": token},
            proxies={
                "http": f"http://{config['proxy']['login']}:{config['proxy']['password']}@{config['proxy']['address']}:{config['proxy']['port']}",
                "https": f"http://{config['proxy']['login']}:{config['proxy']['password']}@{config['proxy']['address']}:{config['proxy']['port']}"
            }
        )
        
        print(f"🎯 Ответ сайта: {response.status_code}")
        print(response.text)
        
    except Exception as e:
        print(f"❌ Ошибка: {e}")

Диагностика проблем: что делать, если не работает

Токен получен, но сайт его отклоняет

Это самая коварная ситуация: задача решена, токен есть, но сайт не принимает.

Возможные причины:

  1. Несоответствие контекста
    Запрос с токеном отправлен с другого IP или User-Agent.
    Решение: Используйте тот же прокси и тот же User-Agent, что и при создании задачи.

  2. Истёк срок действия токена
    Токены CaptchaFox живут 2-5 минут.
    Решение: Отправляйте запрос с токеном сразу после получения.

  3. Неверное поле/заголовок
    Сайт ждёт токен в одном месте, а вы отправляете в другое.
    Решение: Через DevTools → Network найдите, как сайт принимает токен при ручном прохождении.


Полезные ссылки


Частые вопросы

В: Можно ли обойти CaptchaFox без сторонних сервисов?
О: Теоретически — да, но это потребует глубокой эмуляции браузера, поведения и сетевой среды. На практике проще и надёжнее использовать специализированный сервис.

В: Что если на странице несколько капч?
О: Берите websiteKey той капчи, которая блокирует нужное вам действие. Обычно он привязан к конкретной форме или кнопке.

В: Как понять, нужен ли параметр apiServer?
О: По умолчанию не указывайте его. Если токен приходит не того формата (сайт ждёт MAM_..., а вы получаете обычный) — найдите в исходном коде страницы, откуда подключается скрипт captchafox.js, и укажите этот базовый URL в apiServer.

В: Можно ли использовать один прокси для разных сайтов?
О: Технически — да. Но для максимальной успешности подбирайте прокси под гео и тематику целевого ресурса.


Вывод

CaptchaFox это не «непроходимая» защита, а просто более умная система, которая оценивает поведение и контекст. В большинстве случаев проблемы возникают не из за самой капчи, а из за несоответствия параметров: прокси, User-Agent или способа использования токена.

Если вы соблюдаете базовые правила, используете реальные браузерные данные, сохраняете единое окружение и корректно работаете с токеном, решение будет стабильным и предсказуемым.

А если возникают ошибки, лучше не тратить время на догадки: разбор конкретного запроса и обращение в поддержку с деталями почти всегда позволяет быстро найти причину и исправить проблему.