///
Как совместить прокси MobileProxy.Space и решение CAPTCHA для стабильной автоматизации
Команда CapMonster Cloud
Команда CapMonster Cloud
Эксперты по автоматизации
7 августа 2026 г.
9 мин
Пожалуйста, ознакомьтесь с правилами использования материалов на данном ресурсе.

Как совместить прокси MobileProxy.Space и решение CAPTCHA для стабильной автоматизации


Большинство проектов автоматизации падают не из‑за плохого кода. Они ломаются из‑за двух вещей, которые не имеют отношения к логике парсера: репутации IP и CAPTCHA.

Вы пишете чистый скрапер, тестируете локально — всё работает. Затем масштабируетесь до 20 потоков и внезапно получаете 403, бесконечные экраны «verify you are human» и пустые результаты. Классическая реакция — купить больше прокси. Вторая — купить решатель CAPTCHA. Но настоящее решение — заставить оба компонента работать как одну систему.

В этом руководстве показано, как связать мобильные прокси от MobileProxy.Space с автоматизированным API решения CAPTCHA, чтобы workflow выдерживал длинные прогоны — с примерами кода, логикой повторов и чек‑листом ошибок, которые тихо убивают success rate.мобильные прокси от MobileProxy.Space с автоматизированным API решения CAPTCHA, чтобы workflow выдерживал длинные прогоны — с примерами кода, логикой повторов и чек‑листом ошибок, которые тихо убивают success rate.

Почему одних прокси недостаточно

Мобильные прокси — самый сильный вариант для автоматизации: мобильные IP делятся сотнями реальных пользователей через carrier NAT. Агрессивная блокировка одного адреса бьёт по настоящим клиентам, поэтому антибот‑системы относятся к мобильным диапазонам терпимее.

Но терпимость — не иммунитет. Даже с идеальным мобильным IP вы всё равно столкнётесь с CAPTCHA, когда:

  • отправляете запросы быстрее, чем мог бы человек;
  • отпечаток браузера выглядит автоматизированным;
  • целевой сайт показывает CAPTCHA всем на определённых маршрутах (логин, checkout, поиск);
  • cookies сессии отсутствуют или несогласованы.

Почему одного решателя CAPTCHA тоже недостаточно

Теперь наоборот. Предположим, вы используете только сервис решения с датацентрового IP. Что происходит?

  • reCAPTCHA v3 возвращает низкий score, и сайт отклоняет токен, хотя он «валидный»;
  • сразу после решения предыдущей CAPTCHA появляется новая;
  • валидация токена падает, потому что IP, запросивший CAPTCHA, и IP, отправивший токен, не совпадают.

Ключевой принцип: прокси снижают частоту появления CAPTCHA. Решатель обрабатывает те случаи, которые всё же возникают. Нужны оба компонента — и они должны разделять один и тот же контекст сессии.

 


 

Архитектура

Вот цикл, которому следует стабильный workflow:

┌──────────────┐
│  Task queue  │
└──────┬───────┘
       │
       ▼
┌────────────────────┐     ┌──────────────────────┐
│  Worker (session)  │────▶│ MobileProxy.Space    │
│  cookies + UA      │     │ mobile IP + rotation │
└──────┬─────────────┘     └──────────────────────┘
       │
       │ CAPTCHA detected?
       ▼
┌────────────────────────┐
│  CAPTCHA solving API   │──▶ token
└──────┬─────────────────┘
       │
       ▼
┌────────────────────┐
│ Submit + validate  │──▶ success / rotate IP / retry
└────────────────────┘

image.png
 


 

Шаг 1. Подготовьте мобильный прокси

В дашборде MobileProxy.Space вы получаете прокси с:

  • хостом и портом (отдельные порты для HTTP/HTTPS и SOCKS5);
  • логином и паролем для авторизации;
  • ссылкой на ротацию IP — URL, который вы вызываете, чтобы принудительно сменить мобильный IP;
  • опциональным интервалом авто‑ротации (например, каждые 5–15 минут);
  • выбором гео, чтобы страна прокси совпадала с целевой аудиторией сайта.

Для автоматизации важнее всего две настройки:

1. Режим ротации. Используйте ручную ротацию по ссылке для логик‑ориентированных workflow (ротация только при блокировке). Используйте ротацию по таймеру для широкого, stateless‑краулинга.

2. Интервал ротации. Если вы ротируете каждые 60 секунд, пока идёт login‑flow, вы сами сломаете сессию. Держите интервал длиннее самой длинной одиночной задачи.

Быстрая проверка перед написанием любой логики:

curl -x http://LOGIN:PASSWORD@proxy.host:PORT https://api.ipify.org
# → returns the current mobile IP

curl "https://mobileproxy.space/api.html?command=reboot&proxy_key=YOUR_KEY"
# → forces IP rotation (use your actual rotation link from the dashboard)

curl -x http://LOGIN:PASSWORD@proxy.host:PORT https://api.ipify.org
# → should return a different IP

 

Если IP не меняется, исправьте это до отладки всего остального.

 


 

Шаг 2. Привяжите клиент к одной identity сессии

Одна сессия = один прокси + одна cookie jar + один User-Agent + один набор заголовков. Никогда не смешивайте.

Python requests

import requests

PROXY = "http://LOGIN:PASSWORD@proxy.host:PORT"

session = requests.Session()
session.proxies = {"http": PROXY, "https": PROXY}
session.headers.update({
    "User-Agent": ("Mozilla/5.0 (Linux; Android 13; SM-S918B) "
                   "AppleWebKit/537.36 (KHTML, like Gecko) "
                   "Chrome/121.0.0.0 Mobile Safari/537.36"),
    "Accept-Language": "en-US,en;q=0.9",
})

 

Небольшая, но важная деталь: если вы используете мобильный прокси, используйте мобильный User-Agent и мобильный viewport. Desktop Chrome UA на carrier IP — несогласованность, которую замечают системы fingerprinting.

Playwright

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server": "http://proxy.host:PORT",
            "username": "LOGIN",
            "password": "PASSWORD",
        }
    )
    context = browser.new_context(
        user_agent=("Mozilla/5.0 (Linux; Android 13; SM-S918B) "
                    "AppleWebKit/537.36 (KHTML, like Gecko) "
                    "Chrome/121.0.0.0 Mobile Safari/537.36"),
        viewport={"width": 412, "height": 915},
        is_mobile=True,
        has_touch=True,
        locale="en-US",
    )
    page = context.new_page()
    page.goto("https://example.com")

 

 


 

Шаг 3. Добавьте автоматическое решение CAPTCHA

Когда появляется CAPTCHA, воркеру нужен токен, а не человек. Здесь подключается API‑решатель: вы отправляете параметры CAPTCHA, получаете токен или текст и сабмитите его в том же request flow.

В этом туториале я использую CapMonster Cloud — AI‑решатель CAPTCHA, который обрабатывает reCAPTCHA v2/v3, Cloudflare Turnstile, image CAPTCHA и другие распространённые типы через простой API из двух вызовов. Важно для нас то, что он поддерживает proxy-bound tasks — именно то, что нужно при работе с мобильными IP.

Два режима задач

Режим

Когда использовать

Компромисс

Proxyless

Простые image CAPTCHA, низкочувствительная reCAPTCHA v2

Быстрее и дешевле, но возможен IP mismatch

With proxy

reCAPTCHA v3, score‑sensitive сценарии, логины, checkout

Решатель работает с вашего мобильного IP → согласованный контекст

Правило большого пальца: если сайту важны scores или сессии, передавайте учётные данные MobileProxy.Space в задачу.

Извлечение sitekey

Прежде чем что‑либо решать, возьмите sitekey со страницы:

import re

html = session.get("https://target-site.com/login").text
match = re.search(r'data-sitekey="([^"]+)"', html)
sitekey = match.group(1) if match else None

 

В Playwright:

sitekey = page.get_attribute("[data-sitekey]", "data-sitekey")

Создание задачи и polling

import time, requests

API = "https://api.capmonster.cloud"
CLIENT_KEY = "YOUR_CLIENT_KEY"

def solve_recaptcha_v2(website_url, sitekey, proxy=None):
    if proxy:
        task = {
            "type": "RecaptchaV2Task",
            "websiteURL": website_url,
            "websiteKey": sitekey,
            "proxyType": "http",
            "proxyAddress": proxy["host"],
            "proxyPort": proxy["port"],
            "proxyLogin": proxy["login"],
            "proxyPassword": proxy["password"],
        }
    else:
        task = {
            "type": "RecaptchaV2TaskProxyless",
            "websiteURL": website_url,
            "websiteKey": sitekey,
        }

    r = requests.post(f"{API}/createTask",
                      json={"clientKey": CLIENT_KEY, "task": task},
                      timeout=30).json()
    if r.get("errorId"):
        raise RuntimeError(r.get("errorCode"))

    task_id = r["taskId"]

    for _ in range(40):                    # ~2 minutes max
        time.sleep(3)
        res = requests.post(f"{API}/getTaskResult",
                            json={"clientKey": CLIENT_KEY, "taskId": task_id},
                            timeout=30).json()
        if res.get("status") == "ready":
            return res["solution"]["gRecaptchaResponse"]
        if res.get("errorId"):
            raise RuntimeError(res.get("errorCode"))

    raise TimeoutError("CAPTCHA task timed out")

 

Затем вставьте токен в форму и отправьте его через ту же сессию и тот же прокси:

token = solve_recaptcha_v2("https://target-site.com/login", sitekey, PROXY_CFG)

resp = session.post("https://target-site.com/login", data={
    "username": "user",
    "password": "pass",
    "g-recaptcha-response": token,
})

 

Для browser automation задайте токен в DOM и вызовите callback сайта:

page.evaluate("""(token) => {
    document.querySelector('[name="g-recaptcha-response"]').value = token;
}""", token)
page.click("button[type=submit]")

 

Если не хотите писать polling‑логику сами, в документации CapMonster есть официальные SDK и гайды по интеграции для Python, Node.js, C# и браузерных расширений.

 


 

Шаг 4. Склеивающая логика: когда ротировать, когда решать

Именно отсюда берётся стабильность. Считайте каждый ответ сигналом и реагируйте соответственно.

def handle(response, ctx):
    if response.status_code == 200 and not has_captcha(response.text):
        return "OK"

    if has_captcha(response.text):
        ctx["captcha_count"] += 1
        # solve first, rotate only if solving keeps failing
        if ctx["captcha_count"] <= 2:
            return "SOLVE"
        return "ROTATE_AND_RETRY"

    if response.status_code in (403, 429):
        return "ROTATE_AND_RETRY"

    if response.status_code >= 500:
        return "BACKOFF_RETRY"

    return "FAIL"

 

Правила ротации, которые работают на практике

  1. Никогда не ротируйте mid-flow. Ротация между «загрузить CAPTCHA» и «отправить токен» делает токен невалидным.
  2. Ротируйте после N подряд блокировок, а не после каждой одиночной ошибки.
  3. Сбрасывайте сессию при ротации. Новый IP → новая cookie jar → новый UA. Возвращающийся cookie на свежем мобильном IP выглядит подозрительно.
  4. Добавляйте jitter. Sleep random.uniform(1.5, 4.0) между запросами вместо фиксированной задержки.
  5. Ограничивайте concurrency на IP. Один мобильный IP с 50 параллельными потоками — сам по себе fingerprint. 3–8 concurrent requests на прокси — разумный стартовый диапазон.
import random, time

def rotate(ctx):
    requests.get(ROTATION_LINK, timeout=60)
    time.sleep(random.uniform(8, 15))   # let the carrier assign a new IP
    ctx["session"] = new_session()      # fresh cookies + headers
    ctx["captcha_count"] = 0

 

 


 

Шаг 5. Измеряйте то, что важно

Логируйте эти четыре метрики на каждый прогон — они точно покажут, какой слой падает:

Метрика

Здоровый диапазон

Если отклонение

CAPTCHA rate (% запросов)

< 5–10%

Замедлитесь, исправьте fingerprint, проверьте интервал ротации

Solve success rate

> 90%

Переключитесь на proxy-bound tasks, проверьте sitekey и websiteURL

Блокировок на IP до ротации

> 50 запросов

Снизьте concurrency, добавьте jitter

Среднее время задачи

5–20 с

Увеличьте timeout, распараллельте solving

Полезный диагноз: если CAPTCHA rate высокий, но solve success тоже высокий — нужно работать над прокси и pacing. Если CAPTCHA rate низкий, а solve success плохой — ошибка в логике сабмита токена или привязке прокси.

 


 

Чек‑лист типичных ошибок

  • ❌ Desktop User-Agent на мобильном прокси
  • ❌ Отправка websiteURL как API endpoint вместо URL страницы
  • ❌ Решение CAPTCHA с одного IP и сабмит с другого
  • ❌ Повторное использование токена (они одноразовые и короткоживущие)
  • ❌ Нет timeout на polling loop → зависшие воркеры
  • ❌ Ротация IP на каждую ошибку — сжигание IP и сессий
  • ❌ Игнорирование Accept-Language / timezone vs. несоответствие geo прокси
  • ❌ Хардкод sitekey, которые сайт ротирует

 


 

Мини‑кейс: стабилизация мониторинга цен

Команда, скрапящая ~35 000 страниц товаров в день, имела success rate 61%. Их сетап: датацентровые прокси, фиксированная задержка 1 секунда, proxyless‑решение CAPTCHA.

Что изменили:

  1. Перешли на мобильные прокси с ручной ротацией по сигналам блокировок вместо таймера.
  2. Согласовали mobile UA + viewport + is_mobile с типом прокси.
  3. Перевели score‑sensitive endpoints на proxy-bound solving tasks.
  4. Добавили рандомизированные задержки 1.5–4 с и ограничили concurrency до 6 на IP.
  5. Добавили retry с exponential backoff на 5xx.

Результат через неделю: success rate 94%, CAPTCHA rate упал с 23% до 6%, а затраты на solver пошли вниз — потому что CAPTCHA стало появляться меньше изначально.

В этом вся суть: прокси и решение CAPTCHA — не конкурирующие статьи расходов. Лучшие прокси снижают счёт за solver, а надёжный solver не даёт тратить прокси на бессмысленные retry.

 


 

Финальный чек‑лист деплоя

  •  Прокси проверен через curl + ссылка ротации протестирована
  •  Интервал ротации длиннее самой длинной одиночной задачи
  •  Одна сессия = один прокси + одна cookie jar + один fingerprint
  •  Mobile UA и viewport для мобильных IP
  •  Sitekey извлекается динамически, не захардкожен
  •  Proxy-bound solving tasks для score‑sensitive сценариев
  •  Timeout + лимит retry на каждый solving‑вызов
  •  Структурированное логирование четырёх ключевых метрик
  •  Graceful degradation: возвращайте задачу в очередь вместо дропа

Соберите цикл один раз, логируйте всё и тюньте по данным, а не по догадкам. Так хрупкий скрипт превращается в automation workflow, который можно оставить работать на ночь.


NB: Пожалуйста, обратите внимание, что продукт предназначен для автоматизации тестирования исключительно ваших собственных веб-сайтов и ресурсов, к которым у вас есть законное право доступа.
ItGuy
geear
Партнёрская программа для разработчиков софта
Зарабатывайте до 30% от трат ваших пользователей на обход капчи
✅ Заявка отправлена
Спасибо за интерес к нашей партнёрской программе! Мы свяжемся с вами в течение 7 рабочих дней.
Заявка на подключение
Заполните форму, чтобы отправить заявку на подключение к партнёрской программе
Больше статей