Как обойти CaptchaFox
Введение
CaptchaFox — это современный тип поведенческой капчи, который принципиально отличается от традиционных методов проверки. Вместо того чтобы предлагать пользователю выбирать светофоры, вводить текст с картинки или нажимать на галочку, система не использует графические задачи или ввод текста. Вместо этого она анализирует модели взаимодействия, такие как движения мыши, время кликов и плавность действий, что делает сервис особенно устойчивым к обычным методам обхода.
Как работает CaptchaFox?
Система отслеживает и оценивает:
- Траекторию движения курсора — плавность, ускорение, микро-колебания
- Временные метки — задержки между действиями, время загрузки страницы до первого клика
- Поведенческие паттерны — как пользователь скроллит, кликает, взаимодействует с формами
- Технические сигналы — заголовки браузера, параметры Canvas, WebGL, шрифты
- Сетевой контекст — репутация IP, геолокация, согласованность данных
Если система обнаруживает признаки автоматизации (например, мгновенные действия, отсутствие «человеческого шума» в движениях мыши, несоответствие заголовков), она блокирует доступ или выдаёт усложнённую проверку.
Почему обычный скрипт не справится?
Попытка обойти CaptchaFox простым HTTP-запросом или headless-браузером без эмуляции поведения обречена на провал. Капча «понимает», что за запросом стоит не человек, а скрипт. Именно поэтому для работы с CaptchaFox критически важны два компонента:
- Прокси — с «чистой» репутацией, соответствующий гео целевого сайта
- Настоящий User-Agent — совпадающий с версией браузера, ОС и архитектурой устройства
Пошаговая стратегия обхода CaptchaFox
Как найти websiteKey: три надёжных способа
Способ 1: Исходный код страницы
- Откройте страницу →
Ctrl+U - Поиск (
Ctrl+F) по строкам:captchafox,sk_,data-key,CaptchaFox.init - Пример того, что вы ищете:
илиhtml
<div id="captchafox-container" data-key="sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G"></div>javascriptwindow.CaptchaFox.init({ key: "sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G", ... });
Способ 2: Сетевые запросы (DevTools → Network)
- Откройте DevTools (
F12) → вкладка Network - Обновите страницу или выполните действие, вызывающее капчу
- В фильтре введите:
captchafox,uicdn,challenge,init - Найдите запрос к домену
captchafox.comилиuicdn.com - В параметрах запроса (Query String) или в теле ответа ищите поле
keyилиwebsiteKey
Способ 3: Консоль JavaScript
Иногда конфигурация капчи доступна глобально:
javascript
// Попробуйте выполнить в консоли:
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
{
"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
{
"errorId": 0,
"taskId": 987654321,
"status": "processing"
}
Сохраните
taskId— по нему вы будете получать результат.
Шаг 2: Получение токена
Endpoint: POST https://api.rucaptcha.com/getTaskResult
json
{
"clientKey": "a1b2c3d4e5f6g7h8",
"taskId": 987654321
}
Ответ с готовым решением
json
{
"errorId": 0,
"status": "ready",
"solution": {
"token": "7828075fb55ecbd9146745ee6f2bec475b88076d36e23050f1fb28359ffca15d"
},
"cost": "0.00145",
"createTime": 1695214711,
"endTime": 1695214720,
"solveCount": 1
}
Что делать с токеном?
Полученный токен — это криптографическое доказательство того, что «человек прошёл проверку». Теперь его нужно правильно передать целевому сайту.
Как узнать, куда вставлять токен?
- Откройте целевой сайт в браузере с включённым DevTools → Network
- Выполните действие, которое должно пройти капчу (отправка формы, покупка, регистрация)
- Найдите запрос, который отправляется после успешного прохождения
- Посмотрите, в каком поле передаётся токен:
- Параметр формы:
cf_token,captcha_response,captchafox_token - Заголовок:
X-Captcha-Token,CF-Token - Тело JSON:
{"captcha": {"token": "..."}}
- Параметр формы:
Пример использования токена в запросе:
python
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
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}")
Диагностика проблем: что делать, если не работает
Токен получен, но сайт его отклоняет
Это самая коварная ситуация: задача решена, токен есть, но сайт не принимает.
Возможные причины:
-
Несоответствие контекста
Запрос с токеном отправлен с другого IP или User-Agent.
Решение: Используйте тот же прокси и тот же User-Agent, что и при создании задачи. -
Истёк срок действия токена
Токены CaptchaFox живут 2-5 минут.
Решение: Отправляйте запрос с токеном сразу после получения. -
Неверное поле/заголовок
Сайт ждёт токен в одном месте, а вы отправляете в другое.
Решение: Через DevTools → Network найдите, как сайт принимает токен при ручном прохождении.
Полезные ссылки
- Официальная документация по CaptchaFox
- Служба поддержки — создавайте тикет с
taskId, если что-то не работает
Частые вопросы
В: Можно ли обойти CaptchaFox без сторонних сервисов?
О: Теоретически — да, но это потребует глубокой эмуляции браузера, поведения и сетевой среды. На практике проще и надёжнее использовать специализированный сервис.
В: Что если на странице несколько капч?
О: Берите websiteKey той капчи, которая блокирует нужное вам действие. Обычно он привязан к конкретной форме или кнопке.
В: Как понять, нужен ли параметр apiServer?
О: По умолчанию не указывайте его. Если токен приходит не того формата (сайт ждёт MAM_..., а вы получаете обычный) — найдите в исходном коде страницы, откуда подключается скрипт captchafox.js, и укажите этот базовый URL в apiServer.
В: Можно ли использовать один прокси для разных сайтов?
О: Технически — да. Но для максимальной успешности подбирайте прокси под гео и тематику целевого ресурса.
Вывод
CaptchaFox это не «непроходимая» защита, а просто более умная система, которая оценивает поведение и контекст. В большинстве случаев проблемы возникают не из за самой капчи, а из за несоответствия параметров: прокси, User-Agent или способа использования токена.
Если вы соблюдаете базовые правила, используете реальные браузерные данные, сохраняете единое окружение и корректно работаете с токеном, решение будет стабильным и предсказуемым.
А если возникают ошибки, лучше не тратить время на догадки: разбор конкретного запроса и обращение в поддержку с деталями почти всегда позволяет быстро найти причину и исправить проблему.