Эта статья была полезной?
Как обойти капчу Imperva (Incapsula)
Технический специалист
Введение
Imperva (также известная как Incapsula) — это мощное решение класса Web Application Firewall (WAF), которое используется для защиты сайтов от ботов, DDoS-атак и автоматизированного парсинга. В отличие от классических капч с виджетами, Imperva часто работает в невидимом режиме, анализируя сетевые отпечатки, или блокирует доступ на уровне сети, возвращая страницу с JavaScript-вызовом (challenge).
Для автоматизации это означает, что нам нужно не просто получить токен, а успешно пройти сетевую проверку и получить специфические cookies защиты, которые привязываются к IP-адресу. В этом руководстве мы разберем, как автоматизировать обход Imperva с помощью API 2Captcha.
Как найти параметры для решения
Поскольку Imperva — это WAF, вам нужно извлечь из страницы и сетевых запросов несколько критически важных параметров.
Как их найти на практике:
- Откройте Инструменты разработчика (F12) и перейдите на вкладку Network.
- Обновите страницу и посмотрите на заголовки ответа (Response Headers). Если вы видите заголовок X-CDN: Incapsula или X-Iinfo, значит, сайт использует Imperva.
- Перейдите на вкладку Application (или Storage) -> Cookies. Если вы видите cookies с названиями, начинающимися на incap или visid_incap_, это подтверждает использование Incapsula.
- Скопируйте полный URL страницы из адресной строки. Это будет ваш websiteURL.
- Найдите в исходном коде страницы (вкладка Elements или Sources) тег
<script>, загружающий скрипт Incapsula. Обычно это URL видаhttps://example.com/_Incapsula_Resource?SCRIPT_NAME=.... Это будет ваш incapsulaScriptUrl. - Скопируйте все cookies, связанные с Incapsula (обычно это incap_Session, visid_incap_, incap_ses_ и другие). Это будет ваш incapsulaCookies.
- Если на сайте используется дополнительная защита 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
{
"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
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Успешный ответ от API будет содержать cookies, необходимые для обхода защиты:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"cookies": "_incap_Session_...=...; visid_incap_...=...; incap_ses_...=..."
},
"cost": "0.00299",
"createTime": 1692863536,
"endTime": 1692863556
}
Ручная реализация через requests
Если вы хотите контролировать процесс вручную или не используете SDK, можно отправлять запросы напрямую:
python
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
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 предоставляет два эндпоинта для отправки отчетов:
- https://api.rucaptcha.com/reportIncorrect — для неверных решений
- https://api.rucaptcha.com/reportCorrect — для верных решений
Отчет о неверном решении (reportIncorrect)
Используется, если сайт отклонил cookies или снова вернул страницу блокировки. Средства за задачу будут возвращены на ваш баланс.
JSON-запрос:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Отчет о правильном решении (reportCorrect)
Используется, если сайт принял cookies без ошибок и вы получили доступ к защищенному контенту. Это помогает сервису поддерживать высокое качество распознавания.
JSON-запрос:
json
{
"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 переданы корректно. Эти параметры обязательны и должны быть извлечены непосредственно перед отправкой задачи.
Полезные ссылки
- Документация API Imperva: https://rucaptcha.com/api-docs/imperva-incapsula
- Отправка отчета о неверном решении: https://api.rucaptcha.com/reportIncorrect
- Отправка отчета о верном решении: https://api.rucaptcha.com/reportCorrect
- Документация по отчетам: https://rucaptcha.com/api-docs/report-correct и https://rucaptcha.com/api-docs/report-incorrect
- Подробный гайд по отправке отчетов: https://rucaptcha.com/h/how-to-submit-reports
- Статистика и отправка репортов через интерфейс: https://rucaptcha.com/statistics/uploads
- Центр поддержки: https://rucaptcha.com/support/tickets/new
- Примеры кода на GitHub: https://github.com/2captcha
Заключение
Обход Imperva (Incapsula) через 2Captcha сводится к отправке URL страницы, параметров прокси, обязательных параметров incapsulaScriptUrl и incapsulaCookies, и, при необходимости, reese84UrlEndpoint в API, получению специфических cookies защиты и внедрению их в вашу HTTP-сессию. Главное помнить про критическую важность использования одного и того же резидентного прокси на всех этапах и строгой синхронизации User-Agent, так как эта защита жестко привязывает сессию к сетевым отпечаткам.