Налаштування обходу захисту від парсингу для 1С-Bitrix
Джерело даних оновило захист — і парсер, який працював місяцями, перестав отримувати контент. Замість 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 Bitrix безсилий — він не виконує JavaScript. Рішення — headless-браузер.
Puppeteer / Playwright запускаються як окремий сервіс (Node.js), парсер Bitrix звертається до нього через 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.
Ротація TLS fingerprint
Для обходу 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).
- Інтеграція з парсером Bitrix — отримання cookies/HTML.
- Тестування на реальному джерелі, підбір затримок.
- Документування поведінки захисту для подальшої підтримки.







