Looking for international version of our service? Go to 2captcha.com

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

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

Как обойти TSPD капчу

Грегори Фишер
Грегори Фишер

Технический специалист

Введение

TSPD — это современная система поведенческой защиты, которая часто используется для блокировки автоматизированных запросов и ботов. В отличие от классических капч с виджетами, TSPD challenge обычно выглядит как промежуточная страница блокировки, которая возвращается сервером вместо обычного контента. Для автоматизации это означает, что нам нужно не просто получить токен, а пройти сложный сетевой challenge, эмулируя поведение реального браузера и сохраняя сессию cookies.

В этом руководстве мы разберем, как автоматизировать обход TSPD с помощью API RuCaptcha. Мы подробно рассмотрим сценарий работы, найдем необходимые параметры и интегрируем решение в ваш скрипт.

Сценарий работы

Обход TSPD отличается от решения обычных капч. Здесь мы работаем не с виджетом на странице, а с сетевыми запросами и cookies. Процесс состоит из нескольких этапов:

  1. Первый запрос. Скрипт выполняет HTTP-запрос к целевой странице через прокси, используя браузерные заголовки.
  2. Получение cookies. Из ответа сервера извлекаются cookies защиты. Если в ответе присутствует cookie TSPD_101_DID (что означает успешное прохождение защиты) либо формат cookies не соответствует ожидаемому, выполнение останавливается.
  3. Создание задачи. Скрипт отправляет данные в наш сервис для решения TSPD challenge.
  4. Получение решения. Скрипт ожидает завершения обработки задачи через API и получает обновлённые cookies.
  5. Финальный запрос. Выполняется повторный запрос к странице с использованием полученных cookies, после чего сервер возвращает обычную HTML-страницу.

Критически важно, чтобы все этапы (первый запрос, решение через API и финальный запрос) выполнялись через один и тот же IP-адрес прокси.

Как найти нужные параметры

При отправке GET-запроса на страницу с TSPD-challenge, вы получите HTML, который нужно закодировать в Base64 и передать в параметре htmlPageBase64. Также при первом запросе сервер выдаст специальные cookies (например, TS386a...400d029) — их необходимо передать в tspdcookie, так как они обязательны для корректного решения TSPD и получения ответа от API.

Важно: параметры htmlPageBase64 и tspdcookie динамические. Извлекайте их непосредственно перед отправкой задачи, иначе решение может не пройти.

Обратите внимание: если сервер возвращает cookies в специфическом формате (например, TS386a400d029=082670...87599c;) и при этом отсутствует cookie TSPD_101_DID, это означает, что запрос был перехвачен системой защиты и вместо обычного ответа была выдана страница блокировки (TSPD challenge). В такой ситуации необходимо передать полученные cookies в сервис, дождаться решения и использовать обновлённый набор для последующих запросов.

Параметры API

Для решения TSPD используется тип задачи tspdtask. Поскольку защита жестко привязана к IP-адресу, использование прокси является обязательным. Все параметры, которые необходимо передать при создании задачи, представлены в таблице ниже:

Параметр Обязательность Описание
type Да Тип задачи. Всегда указывайте tspdtask
websiteURL Да Полный URL-адрес целевой веб-страницы
tspdcookie Да Cookies, полученные на странице TSPD challenge при первом запросе
htmlPageBase64 Да Полный HTML страницы с TSPD challenge, закодированный в base64
proxyType Да Тип прокси (http, socks4, socks5)
proxyAddress Да IP-адрес прокси-сервера или имя хоста
proxyPort Да Порт прокси-сервера
proxyLogin Нет Логин для аутентификации на прокси-сервере
proxyPassword Нет Пароль для аутентификации на прокси-сервере
userAgent Нет User-Agent браузера. Рекомендуется передавать тот же, что использовался при первом запросе

Примеры JSON запросов

Запрос на создание задачи выглядит следующим образом:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "tspdtask",
        "websiteURL": "https://example.com/login",
        "tspdcookie": "TS386a400d029=082670...010245; TS386a400d078=082670...dbb3b0c",
        "htmlPageBase64": "PCFET0NUWVBFIGh0bWw+...",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
        "proxyType": "http",
        "proxyAddress": "1.2.3.4",
        "proxyPort": 8080,
        "proxyLogin": "login",
        "proxyPassword": "password"
    }
}

Запрос на получение результата стандартный:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "TASK_ID_FROM_CREATE_TASK"
}

Успешный ответ от API будет содержать обновленные cookies для внедрения:

json Copy
{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "cookies": "TSPD_101_DID=...; TS386a400d029=..."
    },
    "cost": "0.00299",
    "createTime": 1692863536,
    "endTime": 1692863556
}

Пошаговая реализация на Python

Для работы с TSPD нам понадобится библиотека requests для выполнения HTTP-запросов через прокси и официальная библиотека для работы с API.

Полный цикл: от первого запроса до получения контента

python Copy
import requests
import time
import base64
from twocaptcha import TwoCaptcha

API_KEY = "YOUR_API_KEY"
API_HOST = "api.rucaptcha.com"

# Настройки прокси (должны использоваться на всех этапах!)
PROXY = {
    "http": "http://login:[email protected]:8080",
    "https": "http://login:[email protected]:8080"
}
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
TARGET_URL = "https://example.com/protected-page"

# 1. Первый запрос к целевой странице
session = requests.Session()
session.headers.update({"User-Agent": USER_AGENT})
response = session.get(TARGET_URL, proxies=PROXY)

# Проверяем, есть ли уже cookie TSPD_101_DID (значит защита пройдена)
if "TSPD_101_DID" in session.cookies.get_dict():
    print("Защита уже пройдена!")
else:
    # 2. Извлекаем параметры для решения
    html_page = response.text
    html_base64 = base64.b64encode(html_page.encode('utf-8')).decode('utf-8')
    
    # Формируем строку cookies из ответа
    tspd_cookies = "; ".join([f"{name}={value}" for name, value in session.cookies.get_dict().items()])
    
    # 3. Отправляем задачу в API
    solver = TwoCaptcha(API_KEY, api_hostname=API_HOST)
    
    try:
        result = solver.tspdtask(
            website_url=TARGET_URL,
            tspdcookie=tspd_cookies,
            html_page_base64=html_base64,
            user_agent=USER_AGENT,
            proxy_type="http",
            proxy_address="1.2.3.4",
            proxy_port=8080,
            proxy_login="login",
            proxy_password="password"
        )
        
        # 4. Получаем новые cookies из решения
        solved_cookies = result.get('cookies', '')
        print(f"Решение получено: {solved_cookies}")
        
        # 5. Финальный запрос с новыми cookies
        # Разбираем строку cookies и добавляем их в сессию
        for cookie in solved_cookies.split(';'):
            if '=' in cookie:
                name, value = cookie.strip().split('=', 1)
                session.cookies.set(name, value)
                
        final_response = session.get(TARGET_URL, proxies=PROXY)
        print("Страница успешно загружена!")
        print(final_response.text[:500]) # Выводим начало контента
        
    except Exception as e:
        print(f"Ошибка при решении: {e}")

Важные нюансы и лучшие практики

TSPD очень чувствительна к сетевым отпечаткам и IP-адресам. Если вы сделаете первый запрос с одного IP, решите задачу, а финальный запрос отправите с другого, защита это мгновенно заметит и отклонит cookies.

Всегда используйте одни и те же резидентские прокси на всех этапах: при первом запросе, при передаче параметров в API (через proxyType, proxyAddress и т.д.) и при финальном запросе за контентом.

Синхронизируйте User-Agent. Передавайте тот же User-Agent в параметрах задачи API, который вы использовали при первом запросе к странице. Если они будут отличаться, TSPD может посчитать сессию подозрительной.

Параметры htmlPageBase64 и tspdcookie очень быстро устаревают. Извлекайте их непосредственно перед отправкой задачи в API и не делайте лишних задержек между получением challenge и его решением.

Отчеты о правильности решения

Если после финального запроса сайт снова вернул страницу блокировки вместо контента, обязательно сообщите об этом. Это помогает сервису улучшать алгоритмы и возвращает вам средства за неудачную попытку.

Отправить отчет можно двумя способами:

Первый способ — через личный кабинет. Зайдите в раздел статистики загрузок по адресу https://rucaptcha.com/statistics/uploads. Найдите в списке нужную задачу и нажмите кнопку Report incorrect.

Второй способ — через API. Если вы пишете автоматизированный скрипт, используйте эндпоинты reportIncorrect и reportCorrect, передавая ваш API ключ и taskId задачи.

Решение частых проблем

Если API возвращает ошибку ERROR_CAPTCHA_UNSOLVABLE, скорее всего, challenge устарел. Убедитесь, что вы извлекаете htmlPageBase64 и tspdcookie непосредственно перед отправкой задачи и не делаете пауз между шагами.

Если сайт принимает cookies, но затем все равно возвращает страницу блокировки при финальном запросе, проблема почти наверняка в IP-адресе. Проверьте, что прокси, используемый для первого запроса, в API и для финального запроса, абсолютно идентичен.

Если при первом запросе вы сразу получаете cookie TSPD_101_DID, это означает, что защита уже пройдена (например, прокси "чистый" и TSPD не считает вас ботом). В этом случае отправлять задачу в API не нужно.

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

Заключение

Обход TSPD через RuCaptcha сводится к выполнению первого запроса через прокси, извлечению HTML-страницы challenge и cookies, отправке этих данных в API и использованию полученных обновленных cookies для финального запроса. Главное помнить про критическую важность использования одного и того же прокси на всех этапах и быстрое выполнение всех шагов, так как параметры challenge имеют очень короткое время жизни.