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

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

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

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

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

Введение

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

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

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

Обход 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.2captcha.com"

# Настройки прокси (должны использоваться на всех этапах!)
PROXY = {
    "http": "http://login:password@1.2.3.4:8080",
    "https": "http://login:password@1.2.3.4: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 через 2Captcha сводится к выполнению первого запроса через прокси, извлечению HTML-страницы challenge и cookies, отправке этих данных в API и использованию полученных обновленных cookies для финального запроса. Главное помнить про критическую важность использования одного и того же прокси на всех этапах и быстрое выполнение всех шагов, так как параметры challenge имеют очень короткое время жизни.