Эта статья была полезной?
Как обойти POW Captcha на сайте Filecrypt
Технический специалист
Сайт Filecrypt (filecrypt.cc) использует специфическую Proof-of-Work (POW) капчу для защиты процессов скачивания и расшифровки контейнеров. Главная особенность этой капчи заключается в том, что для её решения недостаточно передать только URL страницы.
Система требует передачи уникальной ссылки на JSON-файл сессии (data_session), который генерируется динамически при каждом появлении капчи. В этом руководстве мы разберем, как перехватить этот параметр, отправить задачу через API и получить токен для обхода защиты.
Примечание: На данный момент официальная текстовая документация по этому конкретному методу отсутствует. Данное руководство составлено на основе рабочего примера кода и анализа сетевого трафика сайта.
Параметры задачи (API v1)
Для отправки задачи используется классический метод in.php.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| key | String | Да | Ваш API-ключ |
| method | String | Да | Должен быть установлен в pow_captcha |
| pageurl | String | Да | Полный URL страницы, где находится капча |
| data_session | String | Да | Уникальная ссылка на JSON-файл сессии капчи (например, https://filecrypt.cc/captchasession/XXXX.json) |
| useragent | String | Да | User-Agent браузера. Должен точно совпадать с тем, который используется в запросе |
| proxy | String | Нет | Прокси в формате LOGIN:PASS@IP:PORT (если требуется) |
| proxytype | String | Нет | Тип прокси (HTTP, HTTPS, SOCKS4, SOCKS5) |
| json | Integer | Нет | Установите 1, чтобы получить ответ в формате JSON |
Как найти параметры
Параметр data_session является динамическим и меняется при каждой новой попытке скачивания. Его необходимо перехватывать из сетевого трафика.
- Откройте страницу контейнера или скачивания на https://filecrypt.cc в браузере.
- Нажмите F12, чтобы открыть Инструменты разработчика (DevTools), и перейдите на вкладку Сеть (Network).
- Включите сохранение логов (Preserve log).
- Нажмите кнопку, которая инициирует проверку (например, "Download", "Decrypt" или "Show Download Links").
- В фильтре вкладки Сеть введите
captchasessionили.json. - Вы увидите запрос к файлу, похожему на
https://filecrypt.cc/captchasession/DFE4FE0B68.json. - Скопируйте полный URL этого запроса. Это и есть значение для параметра
data_session. - Скопируйте основной URL страницы из адресной строки (это
pageurl) и ваш текущий User-Agent из заголовков любого запроса.
Примеры кода
Python + requests
Исправленный и оптимизированный пример отправки задачи и опроса результата на основе предоставленного кода.
python
import os
import requests
import time
# Рекомендуется хранить ключ в переменных окружения
my_key = os.environ.get("APIKEY", "ВАШ_API_КЛЮЧ_ПО_УМОЛЧАНИЮ")
API_URL = "https://api.2captcha.com/in.php"
API_RES_URL = "https://api.2captcha.com/res.php"
# Прокси указывается, только если сайт требует его использования
# proxy_target = "LOGIN:PASS@IP:PORT"
data = {
"method": "pow_captcha",
"key": my_key,
# "proxy": proxy_target,
# "proxytype": "HTTP",
"pageurl": "https://filecrypt.cc/Container/8CF37462DC.html",
"useragent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
"data_session": "https://filecrypt.cc/captchasession/DFE4FE0B68.json",
"json": 1
}
# Важно: для метода in.php с json=1 лучше передавать данные как form-data,
# но если API принимает JSON, можно использовать json=data.
# Стандартный способ 2captcha - это form-data (data=data).
response = requests.post(API_URL, data=data)
result = response.json()
print("Response:", result)
if result.get("status") == 1:
captcha_id = result['request']
print(f"Задача создана, ID: {captcha_id}")
# Небольшая задержка перед первым опросом
time.sleep(15)
for i in range(10):
time.sleep(2)
check_data = {
"id": captcha_id,
"key": my_key,
"action": "get",
"json": 1
}
check_response = requests.get(API_RES_URL, params=check_data)
check_result = check_response.json()
print(f"Attempt {i + 1}: {check_result}")
if check_result.get("status") == 1:
print(f"Капча решена! Токен: {check_result['request']}")
break
elif "CAPCHA_NOT_READY" in str(check_result):
continue
else:
print("Ошибка при получении результата.")
break
else:
print(f"Ошибка создания задачи: {result.get('request')}")
Python + Playwright (Автоматический перехват)
Этот скрипт автоматически находит ссылку на data_session при нажатии кнопки, отправляет задачу и получает токен.
python
from playwright.sync_api import sync_playwright
import requests
import time
import os
API_KEY = os.environ.get("APIKEY", "ВАШ_API_КЛЮЧ")
TARGET_URL = "https://filecrypt.cc/Container/8CF37462DC.html"
def solve_filecrypt_pow():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
session_url = None
# Перехватываем ответы сервера, чтобы найти JSON сессии
def handle_response(response):
nonlocal session_url
if "captchasession" in response.url and response.url.endswith(".json"):
session_url = response.url
page.on("response", handle_response)
try:
page.goto(TARGET_URL)
# Здесь должно быть действие, вызывающее капчу
# Например, клик по кнопке скачивания. Селектор нужно актуализировать.
# page.click("button:has-text('Download')")
# Ждем появления URL сессии или таймаута
for _ in range(20):
if session_url:
break
time.sleep(1)
if not session_url:
raise Exception("Не удалось перехватить data_session. Проверьте действия на странице.")
print(f"Перехвачен data_session: {session_url}")
# Формируем запрос к API
api_url = "https://api.2captcha.com/in.php"
payload = {
"method": "pow_captcha",
"key": API_KEY,
"pageurl": page.url,
"useragent": page.evaluate("navigator.userAgent"),
"data_session": session_url,
"json": 1
}
# Отправка задачи
response = requests.post(api_url, data=payload).json()
if response.get("status") != 1:
raise Exception(f"Ошибка создания задачи: {response.get('request')}")
captcha_id = response['request']
print(f"Задача создана, ID: {captcha_id}")
# Ожидание решения
res_url = "https://api.2captcha.com/res.php"
token = None
for _ in range(15):
time.sleep(3)
check_params = {"id": captcha_id, "key": API_KEY, "action": "get", "json": 1}
res = requests.get(res_url, params=check_params).json()
if res.get("status") == 1:
token = res['request']
break
if "CAPCHA_NOT_READY" not in str(res):
print(f"Ошибка: {res}")
break
if token:
print(f"Токен получен: {token}")
# Примечание: Точный механизм применения токена зависит от внутренней логики Filecrypt.
# Обычно его необходимо передать в заголовках или теле последующего запроса на скачивание,
# либо выполнить определенный JS-коллбэк на странице.
else:
print("Не удалось получить токен.")
except Exception as e:
print(f"Ошибка: {e}")
finally:
# browser.close()
if __name__ == '__main__':
solve_filecrypt_pow()
Как использовать полученный токен
Поскольку официальная документация по внедрению этого конкретного токена отсутствует, основываясь на поведении подобных POW-систем, токен обычно используется одним из двух способов:
- Он должен быть добавлен в качестве параметра или заголовка к следующему HTTP-запросу на скачивание/расшифровку, который вы отправляете после решения капчи.
- В некоторых случаях сайт ожидает выполнения определенной JavaScript-функции с этим токеном для разблокировки интерфейса. Рекомендуется проанализировать сетевой трафик (вкладку Network) при ручном успешном скачивании, чтобы увидеть, куда именно уходит этот токен.
Частые ошибки и решения
| Ошибка / Проблема | Причина | Решение |
|---|---|---|
| ERROR_WRONG_USER_KEY | Неверный или пустой API-ключ. | Проверьте переменную окружения APIKEY или укажите ключ напрямую. |
| ERROR_BAD_PARAMETERS | Отсутствует обязательный параметр или есть опечатки. | Убедитесь, что в словаре data нет лишних пробелов в ключах (например, "method " вместо "method"). |
| Ошибка получения сессии | Ссылка data_session устарела или неверна. | Перехватывайте ссылку на .json файл заново при каждой новой попытке скачивания. |
| CAPCHA_NOT_READY (вечно) | Сессия капчи истекла до того, как она была решена. | Увеличьте скорость между появлением капчи и отправкой запроса к API. |
Полезные ссылки
- Песочница для тестирования API: https://2captcha.com/setting#sandbox
- Python SDK на GitHub: https://github.com/2captcha/2captcha-python
- Другие примеры обхода капч на сайтах: https://2captcha.com/h?category=sites