Настройка обхода защиты от парсинга для 1С-Битрикс
Источник данных обновил защиту — и парсер, работавший месяцами, перестал получать контент. Вместо HTML с ценами приходит страница с капчей, JavaScript-челленджем или пустой body. Это реальность промышленного парсинга: защитные системы развиваются, и парсер нужно адаптировать. Разберём основные типы защит и технические подходы к их обработке.
Типы защит и их признаки
JavaScript Challenge (Cloudflare, DataDome). Сервер отдаёт HTTP 503 с JS-кодом, который должен выполниться в браузере и установить cookie cf_clearance или datadome. Признак: body содержит <noscript> и window._cf_chl_opt или аналогичный обфусцированный скрипт.
Rate Limiting. HTTP 429 или 403 после N запросов за период. Может быть по IP, по cookie-сессии или по fingerprint. Признак: запросы работают первые минуты, потом блокируются.
Browser Fingerprinting. Сервер проверяет TLS fingerprint (JA3), порядок HTTP-заголовков, наличие JavaScript API (navigator, canvas). Обычный cURL с дефолтными настройками имеет характерный JA3, отличающийся от браузерного.
Honeypot-ссылки. Скрытые через CSS ссылки (display:none, visibility:hidden), по которым кликает только бот. Переход по такой ссылке — мгновенный бан IP.
Headless-браузер для JavaScript Challenge
Когда источник требует выполнения JS, HttpClient Битрикс бессилен — он не исполняет JavaScript. Решение — headless-браузер.
Puppeteer / Playwright запускаются как отдельный сервис (Node.js), парсер Битрикс обращается к нему по HTTP API. Схема:
- PHP-парсер отправляет URL на внутренний сервис:
http://localhost:3000/render?url=... - Node.js-сервис открывает страницу в Chromium, ждёт выполнения JS, получает cookies и отрендеренный HTML.
- Возвращает HTML и cookies в PHP.
- PHP-парсер использует полученные cookies для последующих запросов через обычный
HttpClient— JS Challenge выдаёт cookie на 15-30 минут.
Это позволяет не гонять каждый запрос через браузер (медленно и ресурсоёмко), а получить «пропуск» один раз и использовать его для серии обычных HTTP-запросов.
Важно: headless-браузер нужно маскировать. Стандартный Puppeteer определяется по navigator.webdriver = true, отсутствию плагинов, характерным размерам окна. Используйте puppeteer-extra с плагином stealth или аналог для Playwright.
Ротация отпечатков
Для обхода fingerprinting недостаточно менять IP. Нужно менять TLS fingerprint. В PHP/cURL это делается через опции:
-
CURLOPT_SSLVERSION— задаёт версию TLS. -
CURLOPT_SSL_CIPHER_LIST— задаёт порядок шифров, формирующий JA3.
Библиотека curl-impersonate (форк cURL) позволяет эмулировать TLS fingerprint конкретных браузеров (Chrome, Firefox, Safari). Устанавливается на сервер как замена стандартному cURL.
Обработка капчи
Если источник показывает CAPTCHA, варианты:
- Сервис распознавания (2Captcha, Anti-Captcha) — парсер отправляет изображение, получает ответ через API, подставляет в форму. Стоимость: $2-3 за 1000 решений. Задержка: 10-30 секунд.
- Снижение частоты — часто капча появляется как реакция на rate limiting. Уменьшение частоты запросов и ротация прокси могут убрать капчу полностью.
Интеграция с 2Captcha из PHP-парсера:
$taskId = file_get_contents("http://2captcha.com/in.php?key={$apiKey}&method=base64&body=" . base64_encode($captchaImage));
// Ожидание решения (polling)
$result = file_get_contents("http://2captcha.com/res.php?key={$apiKey}&action=get&id={$taskId}");
Защита от honeypot
Перед переходом по ссылке проверяйте computed styles элемента: display, visibility, opacity, position (за пределами viewport). Если парсер работает через DOM (DOMDocument в PHP), проверяйте inline-стили и классы. Если через headless-браузер — используйте getComputedStyle() для проверки видимости.
Что настраиваем за один день
- Диагностика типа защиты на конкретном источнике.
- Настройка headless-рендерера (если JS Challenge) или ротации заголовков (если fingerprinting).
- Интеграция с парсером Битрикс — получение cookies/HTML.
- Тестирование на реальном источнике, подбор задержек.
- Документирование поведения защиты для дальнейшей поддержки.







