Эта статья была полезной?
Как обойти CaptchaFox на сайте register.gmx.net
Технический специалист
Страница регистрации почтового сервиса GMX (register.gmx.net) защищена капчей CaptchaFox. Обычно скрипт этой капчи загружается с сервера самой CaptchaFox, но GMX подключает его со своего адреса — s.uicdn.com. Это отдельная версия капчи, и токен у неё тоже отдельный: правильный токен начинается с MAM_
Для успешного решения критически важно передать в задачу параметр apiServer с адресом сборки GMX. Если его не указать или указать неверно - вы получите обычный токен без префикса, а сайт отклонит его с ошибкой HTTP 424. Кроме того, для CaptchaFox обязательны прокси и User-Agent, без них задача не создастся.
Параметры задачи
Для решения используется тип задачи CaptchaFoxTask.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| type | String | Да | Должен быть установлен в CaptchaFoxTask |
| websiteURL | String | Да | Полный URL страницы регистрации: https://register.gmx.net/ |
| websiteKey | String | Да | Ключ сайта, начинается с sk_ |
| apiServer | String | Да для GMX | Адрес сборки капчи. Для GMX: https://s.uicdn.com/mampkg/@mamdev/core.frontend.libs.captchafox/. Формально поле необязательное, но без него токен придёт в неверном формате |
| userAgent | String | Да | User-Agent браузера. Должен совпадать с реальным |
| proxyType | String | Да | Тип прокси: http, socks4 или socks5 |
| proxyAddress | String | Да | IP-адрес прокси-сервера или имя хоста |
| proxyPort | Число | Да | Порт прокси-сервера |
| proxyLogin | String | Нет | Логин для авторизации на прокси |
| proxyPassword | String | Нет | Пароль для авторизации на прокси |
Как найти параметры
Ключ сайта у GMX постоянный, на момент написания статьи это sk_vpYGVnHsK9Aw5o8t2pweWzOMHAWHt. Проверить и достать его заново можно так.
- Откройте https://register.gmx.net/ и нажмите F12, чтобы открыть инструменты разработчика.
- Перейдите на вкладку «Элементы» (Elements) и найдите на странице тег captcha-widget.
- Ключ лежит в его атрибуте data-sitekey, а адрес страницы — в data-pageurl:
html
<captcha-widget data-captcha-type="captchafox"
data-sitekey="sk_vpYGVnHsK9Aw5o8t2pweWzOMHAWHt"
data-pageurl="https://register.gmx.net/">
Адрес сборки капчи виден на вкладке «Сеть» (Network). Отфильтруйте запросы по captchafox и посмотрите, откуда грузится api.js. У GMX это https://s.uicdn.com/mampkg/@mamdev/core.frontend.libs.captchafox/api.js — путь до имени файла и есть значение apiServer. Если бы скрипт грузился с cdn.captchafox.com, сборка была бы обычной и параметр не понадобился бы.
User-Agent берите тот, которым открываете сайт. В скрипте его удобно взять прямо из браузера, не переписывая руками.
Примеры кода
Python + requests
Отправка задачи и опрос результата без дополнительных библиотек.
python
import time
import requests
API_KEY = "ВАШ_API_КЛЮЧ"
WEBSITE_KEY = "sk_vpYGVnHsK9Aw5o8t2pweWzOMHAWHt"
API_SERVER = "https://s.uicdn.com/mampkg/@mamdev/core.frontend.libs.captchafox/"
USER_AGENT = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
task = {
"type": "CaptchaFoxTask",
"websiteURL": "https://register.gmx.net/",
"websiteKey": WEBSITE_KEY,
"apiServer": API_SERVER,
"userAgent": USER_AGENT,
"proxyType": "http",
"proxyAddress": "1.2.3.4",
"proxyPort": 8080,
"proxyLogin": "user23",
"proxyPassword": "p4$w0rd",
}
created = requests.post(
"https://api.rucaptcha.com/createTask",
json={"clientKey": API_KEY, "task": task},
timeout=30,
).json()
if created.get("errorId") != 0:
raise RuntimeError(f"Задача не создана: {created}")
task_id = created["taskId"]
print("Задача создана:", task_id)
for _ in range(24):
time.sleep(5)
result = requests.post(
"https://api.rucaptcha.com/getTaskResult",
json={"clientKey": API_KEY, "taskId": task_id},
timeout=30,
).json()
if result.get("status") == "ready":
token = result["solution"]["token"]
print("Токен получен:", token[:20], "…")
break
if result.get("errorId") != 0:
raise RuntimeError(f"Ошибка: {result}")
else:
raise RuntimeError("Решение не пришло за отведённое время")
Проверьте начало токена: он должен начинаться с MAM_. Если префикса нет, значит, задача ушла без apiServer или с неверным значением.
Python + Playwright
Скрипт открывает страницу, забирает ключ сайта и User-Agent из браузера, отправляет задачу и получает токен. Ключ берётся из атрибута виджета, а не поиском по коду страницы: так он не перепутается с другой строкой.
python
import os
from playwright.sync_api import sync_playwright
from twocaptcha import TwoCaptcha
API_KEY = os.getenv("APIKEY_RUCAPTCHA", "ВАШ_API_КЛЮЧ")
TARGET_URL = "https://register.gmx.net/"
API_SERVER = "https://s.uicdn.com/mampkg/@mamdev/core.frontend.libs.captchafox/"
PROXY_BROWSER = {"server": "http://1.2.3.4:8080", "username": "user23", "password": "p4$w0rd"}
PROXY_API = {"type": "HTTP", "uri": "user23:p4$w0rd@1.2.3.4:8080"}
solver = TwoCaptcha(API_KEY, server="rucaptcha.com")
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, proxy=PROXY_BROWSER)
page = browser.new_page()
try:
page.goto(TARGET_URL)
page.wait_for_load_state("networkidle")
widget = page.locator("captcha-widget[data-sitekey]").first
if widget.count() == 0:
raise RuntimeError("Виджет капчи на странице не найден")
website_key = widget.get_attribute("data-sitekey")
user_agent = page.evaluate("navigator.userAgent")
print("Ключ сайта:", website_key)
result = solver.captchafox(
sitekey=website_key,
pageurl=TARGET_URL,
userAgent=user_agent,
proxy=PROXY_API,
api_server=API_SERVER,
)
token = result["code"]
print("Токен получен:", token[:20], "…")
page.evaluate("""(token) => {
const field = document.querySelector('textarea[name="cf-captcha-response"]');
if (!field) {
throw new Error('Поле cf-captcha-response на странице не найдено');
}
field.value = token;
}""", token)
print("Токен подставлен, форму можно отправлять")
except Exception as e:
print(f"Ошибка: {e}")
finally:
browser.close()
Как использовать полученный токен (Скрытое поле формы)
CaptchaFox сам добавляет в форму скрытое поле для токена, и при отправке формы токен уходит на сервер вместе с остальными данными как параметр cf-captcha-response. Вызывать функцию обратного вызова не нужно.
На странице регистрации GMX поле выглядит так:
html
<div class="captchafox">
<div>
<div class="cf-button cf-1dxnin"></div>
<textarea name="cf-captcha-response" id="cf-response-fcb9c972316d98"></textarea>
</div>
</div>
Две детали, из-за которых легко ошибиться. Это textarea, а не input, так что искать по типу поля бесполезно. И его идентификатор генерируется заново при каждой загрузке страницы, поэтому селектор по id работать не будет. Ищите по имени.
python
page.evaluate("""(token) => {
const field = document.querySelector('textarea[name="cf-captcha-response"]');
if (!field) {
throw new Error('Поле cf-captcha-response на странице не найдено');
}
field.value = token;
}""", token)
Проверка нужна: без неё скрипт отправит форму с пустым полем и сообщит об успешной отправке.
После этого отправляйте форму обычным способом — токен уйдёт вместе с остальными полями.
Частые ошибки и решения
| Ошибка / Проблема | Причина | Решение |
|---|---|---|
| Сайт отвечает HTTP 424 | Токен пришёл в стандартном формате, без префикса MAM_ | Передайте в задачу apiServer со значением https://s.uicdn.com/mampkg/@mamdev/core.frontend.libs.captchafox/ |
| Токен начинается не с MAM_ | Параметр apiServer не передан или указан неверно | Проверьте значение и сверьте с адресом, с которого страница грузит скрипт капчи |
| Задача уходит без прокси | В proxy передан пустой словарь или None | SDK молча отбрасывает такие значения. Передавайте заполненный словарь: для CaptchaFox прокси обязателен |
| Виджет капчи не найден | Капча появляется не сразу, а после начала заполнения формы | Дождитесь загрузки страницы, начните заполнять форму и только потом ищите тег captcha-widget |
| ERROR_BAD_PARAMETERS при создании задачи | Ключ сайта на странице сменился | Откройте страницу и сверьте data-sitekey с тем, что в коде |
| Форма уходит без токена | Поле искали по id, а он генерируется заново при каждой загрузке | Ищите поле по имени: textarea[name="cf-captcha-response"] |
| Поле для токена не найдено | Капча ещё не отрисовалась, поле появляется вместе с виджетом | Дождитесь появления виджета и только потом подставляйте токен |
Полезные ссылки
- Документация API по CaptchaFox: https://rucaptcha.com/api-docs/captchafox
- Как обойти CaptchaFox: https://rucaptcha.com/p/captchafox-solver
- CaptchaFox на signup.mail.com: https://rucaptcha.com/h/how-to-solve-captchafox-captcha-on-signupmailcom
- Песочница для тестирования API: https://rucaptcha.com/api-docs/debugging
- Работа с прокси: https://rucaptcha.com/api-docs/proxy
- Python SDK на GitHub: https://github.com/2captcha/2captcha-python
- Другие примеры обхода капч на сайтах: https://rucaptcha.com/h?category=sites