Эта статья была полезной?
Как обойти TSPD капчу
Технический специалист
Введение
TSPD — это современная система поведенческой защиты, которая часто используется для блокировки автоматизированных запросов и ботов. В отличие от классических капч с виджетами, TSPD challenge обычно выглядит как промежуточная страница блокировки, которая возвращается сервером вместо обычного контента. Для автоматизации это означает, что нам нужно не просто получить токен, а пройти сложный сетевой challenge, эмулируя поведение реального браузера и сохраняя сессию cookies.
В этом руководстве мы разберем, как автоматизировать обход TSPD с помощью API 2Captcha. Мы подробно рассмотрим сценарий работы, найдем необходимые параметры и интегрируем решение в ваш скрипт.
Сценарий работы
Обход TSPD отличается от решения обычных капч. Здесь мы работаем не с виджетом на странице, а с сетевыми запросами и cookies. Процесс состоит из нескольких этапов:
- Первый запрос. Скрипт выполняет HTTP-запрос к целевой странице через прокси, используя браузерные заголовки.
- Получение cookies. Из ответа сервера извлекаются cookies защиты. Если в ответе присутствует cookie TSPD_101_DID (что означает успешное прохождение защиты) либо формат cookies не соответствует ожидаемому, выполнение останавливается.
- Создание задачи. Скрипт отправляет данные в наш сервис для решения TSPD challenge.
- Получение решения. Скрипт ожидает завершения обработки задачи через API и получает обновлённые cookies.
- Финальный запрос. Выполняется повторный запрос к странице с использованием полученных 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
{
"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
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Успешный ответ от API будет содержать обновленные cookies для внедрения:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"cookies": "TSPD_101_DID=...; TS386a400d029=..."
},
"cost": "0.00299",
"createTime": 1692863536,
"endTime": 1692863556
}
Пошаговая реализация на Python
Для работы с TSPD нам понадобится библиотека requests для выполнения HTTP-запросов через прокси и официальная библиотека для работы с API.
Полный цикл: от первого запроса до получения контента
python
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 не нужно.
Полезные ссылки
- Документация API TSPD: https://rucaptcha.com/api-docs/tspd-captcha
- Статистика и отправка репортов: https://rucaptcha.com/statistics/uploads
- Центр поддержки: https://rucaptcha.com/support/tickets/new
- Примеры кода на GitHub: https://github.com/2captcha
Заключение
Обход TSPD через 2Captcha сводится к выполнению первого запроса через прокси, извлечению HTML-страницы challenge и cookies, отправке этих данных в API и использованию полученных обновленных cookies для финального запроса. Главное помнить про критическую важность использования одного и того же прокси на всех этапах и быстрое выполнение всех шагов, так как параметры challenge имеют очень короткое время жизни.