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

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

Как обойти 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. Проверить и достать его заново можно так.

  1. Откройте https://register.gmx.net/ и нажмите F12, чтобы открыть инструменты разработчика.
  2. Перейдите на вкладку «Элементы» (Elements) и найдите на странице тег captcha-widget.
  3. Ключ лежит в его атрибуте data-sitekey, а адрес страницы — в data-pageurl:
html Copy
<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 Copy
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 Copy
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 Copy
<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 Copy
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"]
Поле для токена не найдено Капча ещё не отрисовалась, поле появляется вместе с виджетом Дождитесь появления виджета и только потом подставляйте токен

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