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

Как обойти 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:pass@1.2.3.4:8080",  # Тот же прокси!
        "https": "http://user:pass@1.2.3.4: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 или способа использования токена.

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

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