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

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

Как обойти капчу Imperva (Incapsula)

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

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

Введение

Imperva (также известная как Incapsula) — это мощное решение класса Web Application Firewall (WAF), которое используется для защиты сайтов от ботов, DDoS-атак и автоматизированного парсинга. В отличие от классических капч с виджетами, Imperva часто работает в невидимом режиме, анализируя сетевые отпечатки, или блокирует доступ на уровне сети, возвращая страницу с JavaScript-вызовом (challenge).

Для автоматизации это означает, что нам нужно не просто получить токен, а успешно пройти сетевую проверку и получить специфические cookies защиты, которые привязываются к IP-адресу. В этом руководстве мы разберем, как автоматизировать обход Imperva с помощью API 2Captcha.

Как найти параметры для решения

Поскольку Imperva — это WAF, вам нужно извлечь из страницы и сетевых запросов несколько критически важных параметров.

Как их найти на практике:

  1. Откройте Инструменты разработчика (F12) и перейдите на вкладку Network.
  2. Обновите страницу и посмотрите на заголовки ответа (Response Headers). Если вы видите заголовок X-CDN: Incapsula или X-Iinfo, значит, сайт использует Imperva.
  3. Перейдите на вкладку Application (или Storage) -> Cookies. Если вы видите cookies с названиями, начинающимися на incap или visid_incap_, это подтверждает использование Incapsula.
  4. Скопируйте полный URL страницы из адресной строки. Это будет ваш websiteURL.
  5. Найдите в исходном коде страницы (вкладка Elements или Sources) тег <script>, загружающий скрипт Incapsula. Обычно это URL вида https://example.com/_Incapsula_Resource?SCRIPT_NAME=.... Это будет ваш incapsulaScriptUrl.
  6. Скопируйте все cookies, связанные с Incapsula (обычно это incap_Session, visid_incap_, incap_ses_ и другие). Это будет ваш incapsulaCookies.
  7. Если на сайте используется дополнительная защита Reese84, найдите в сетевых запросах URL, связанный с Reese84 (обычно содержит слово reese84). Это будет ваш reese84UrlEndpoint.

Главное правило для Imperva: защита жестко привязывает выданные cookies к IP-адресу, с которого был сделан запрос. Поэтому использование прокси является не просто рекомендацией, а обязательным условием.

Параметры API

API 2Captcha использует тип задачи ImpervaTask. Поскольку защита привязана к IP, передача параметров прокси обязательна. Все параметры представлены в таблице ниже:

Параметр Обязательность Описание
type Да Тип задачи. Всегда указывайте ImpervaTask
websiteURL Да Полный URL-адрес целевой веб-страницы, защищенной WAF
userAgent Да User-Agent браузера, с которым открывается страница. Должен совпадать с тем, что используется в вашем скрипте
incapsulaScriptUrl Да URL скрипта Incapsula, загружаемого на странице. Обычно содержит _Incapsula_Resource. Найти его можно в исходном коде страницы или во вкладке Network
incapsulaCookies Да Все cookies Incapsula, полученные при первом запросе к странице. Строка формата name=value; name2=value2. Обычно включает incap_Session, visid_incap_, incap_ses_ и другие
reese84UrlEndpoint Нет URL эндпоинта Reese84, если на сайте используется дополнительная защита этого типа
proxyType Да Тип прокси (http, socks4, socks5)
proxyAddress Да IP-адрес прокси-сервера или имя хоста
proxyPort Да Порт прокси-сервера
proxyLogin Нет Логин для аутентификации на прокси-сервере
proxyPassword Нет Пароль для аутентификации на прокси-сервере

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

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

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "ImpervaTask",
        "websiteURL": "https://example.com/protected-page",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "incapsulaScriptUrl": "https://example.com/_Incapsula_Resource?SCRIPT_NAME=Incapsula_js.js",
        "incapsulaCookies": "_incap_Session_abc123=xyz789; visid_incap_def456=uvw012; incap_ses_ghi789=rst345",
        "reese84UrlEndpoint": "https://example.com/reese84/endpoint",
        "proxyType": "http",
        "proxyAddress": "1.2.3.4",
        "proxyPort": 8080,
        "proxyLogin": "user23",
        "proxyPassword": "p4$w0rd"
    }
}

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

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

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

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

Ручная реализация через requests

Если вы хотите контролировать процесс вручную или не используете SDK, можно отправлять запросы напрямую:

python Copy
import requests
import time

API_KEY = "YOUR_API_KEY"
API_HOST = "api.2captcha.com

# Создаем задачу
create_payload = {
    "clientKey": API_KEY,
    "task": {
        "type": "ImpervaTask",
        "websiteURL": "https://example.com/protected-page",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "incapsulaScriptUrl": "https://example.com/_Incapsula_Resource?SCRIPT_NAME=Incapsula_js.js",
        "incapsulaCookies": "_incap_Session_abc123=xyz789; visid_incap_def456=uvw012",
        "proxyType": "http",
        "proxyAddress": "1.2.3.4",
        "proxyPort": 8080,
        "proxyLogin": "user23",
        "proxyPassword": "p4$w0rd"
    }
}

response = requests.post(f"https://api.2captcha.com/createTask", json=create_payload)
task_id = response.json()["taskId"]
print(f"Задача создана: {task_id}")

# Ожидаем результата
while True:
    time.sleep(3)
    result_payload = {
        "clientKey": API_KEY,
        "taskId": task_id
    }
    response = requests.post(f"https://api.2captcha.com/getTaskResult", json=result_payload)
    result = response.json()
    
    if result.get("status") == "ready":
        cookies = result["solution"]["cookies"]
        print(f"Cookies получены: {cookies}")
        break
    elif result.get("errorId") != 0:
        raise Exception(f"Ошибка API: {result.get('errorDescription')}")

Внедрение решения на целевой сайт

После того как вы получили строку cookies из ответа API, их нужно внедрить в вашу сессию. Imperva не использует скрытые input-поля для токенов, как это делают обычные капчи. Вместо этого она проверяет наличие специфических cookies в заголовках ваших HTTP-запросов.

Если вы используете библиотеку requests, просто добавьте полученные cookies в сессию:

python Copy
import requests

# Создаем сессию
session = requests.Session()

# Устанавливаем User-Agent (обязательно тот же, что передавался в API)
session.headers.update({
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
})

# Парсим строку cookies из ответа API и добавляем в сессию
cookies_string = "_incap_Session_...=...; visid_incap_...=..."
for cookie in cookies_string.split(';'):
    if '=' in cookie:
        name, value = cookie.strip().split('=', 1)
        session.cookies.set(name, value)

# Настраиваем прокси (должен быть тем же самым!)
proxies = {
    'http': 'http://user23:p4$w0rd@1.2.3.4:8080',
    'https': 'http://user23:p4$w0rd@1.2.3.4:8080'
}

# Отправляем запрос к защищенной странице
response = session.get('https://example.com/protected-page', proxies=proxies)
print("Статус ответа:", response.status_code)

Если вы используете Selenium или Playwright, вам нужно будет добавить эти cookies в профиль браузера перед переходом на защищенную страницу, используя методы driver.add_cookie() или контекст браузера.

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

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

Всегда используйте одни и те же резидентские прокси на всех этапах: при передаче параметров в API и при финальном запросе к сайту. Датацентровые прокси часто блокируются Imperva на этапе выдачи challenge, поэтому настоятельно рекомендуется использовать качественные резидентские IP.

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

Обязательно передавайте incapsulaScriptUrl и incapsulaCookies. Эти параметры критически важны для успешного прохождения защиты, так как сервис использует их для эмуляции реальной сессии браузера. Без них решение может не пройти.

Если на сайте используется защита Reese84, обязательно передайте reese84UrlEndpoint. Без этого параметра решение может не пройти.

Не затягивайте с использованием cookies. Сессии Imperva имеют ограниченное время жизни. Как только вы получили решение, сразу же используйте cookies для доступа к сайту.

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

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

Отправка отчетов через HTTP-запросы

API 2Captcha предоставляет два эндпоинта для отправки отчетов:

Отчет о неверном решении (reportIncorrect)

Используется, если сайт отклонил cookies или снова вернул страницу блокировки. Средства за задачу будут возвращены на ваш баланс.

JSON-запрос:

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

Отчет о правильном решении (reportCorrect)

Используется, если сайт принял cookies без ошибок и вы получили доступ к защищенному контенту. Это помогает сервису поддерживать высокое качество распознавания.

JSON-запрос:

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

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

Если API возвращает ошибку ERROR_CAPTCHA_UNSOLVABLE, скорее всего, прокси, который вы используете, уже находится в черном списке Imperva или датацентровый IP блокируется на уровне сети. Попробуйте использовать другой резидентный прокси.

Если сайт принимает cookies, но затем все равно блокирует вас при переходе по ссылкам внутри сайта, проверьте, что вы используете один и тот же IP для всех запросов. Imperva может требовать прохождения challenge повторно при смене IP или резком изменении сетевых отпечатков.

Если вы используете Selenium и видите бесконечную перезагрузку страницы, убедитесь, что вы правильно внедрили cookies до того, как браузер начал загружать защищенный домен, и что прокси настроен на уровне самого браузера.

Если на сайте используется Reese84 и вы не передали reese84UrlEndpoint, защита может не пропустить вас даже с правильными cookies Incapsula. Обязательно проверяйте наличие этой дополнительной защиты.

Если вы получаете ошибку о неверных параметрах, убедитесь, что incapsulaScriptUrl и incapsulaCookies переданы корректно. Эти параметры обязательны и должны быть извлечены непосредственно перед отправкой задачи.

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

Заключение

Обход Imperva (Incapsula) через 2Captcha сводится к отправке URL страницы, параметров прокси, обязательных параметров incapsulaScriptUrl и incapsulaCookies, и, при необходимости, reese84UrlEndpoint в API, получению специфических cookies защиты и внедрению их в вашу HTTP-сессию. Главное помнить про критическую важность использования одного и того же резидентного прокси на всех этапах и строгой синхронизации User-Agent, так как эта защита жестко привязывает сессию к сетевым отпечаткам.