Реалізація парсинга через Puppeteer/Playwright (headless browser)
Headless-браузери—інструмент для парсинга сайтів, які неможливо обпрацювати статичним HTML-парсером: сторінки на React/Vue/Angular, контент з lazy loading, дані за аутентифікацією, динамічні таблиці з infinite scroll.
Puppeteer vs Playwright
| Параметр | Puppeteer | Playwright |
|---|---|---|
| Браузери | Chrome/Chromium | Chrome, Firefox, Safari |
| Мова | Node.js | Node.js, Python, Java, C# |
| Auto-wait | Ні (явні ожидания) | Так (авто-ожидание елементів) |
| Швидкість розробки | Середня | Вище |
| Зрілість екосистеми | Висока | Що зростає |
Playwright бажаніший для нових проектів: його auto-wait значно скорочує кількість помилок при парсингу—ні необхідності вручну чекати появи кожного елемента.
Типовий сценарій парсинга
// Playwright: парсинг каталогу з infinite scroll
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({
userAgent: 'Mozilla/5.0 ...',
viewport: { width: 1280, height: 900 }
});
const page = await context.newPage();
await page.goto('https://example.com/catalog');
// Скролл до кінця сторінки
let prevHeight = 0;
while (true) {
const height = await page.evaluate(() => document.body.scrollHeight);
if (height === prevHeight) break;
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
await page.waitForTimeout(1500 + Math.random() * 1000);
prevHeight = height;
}
// Витяг даних
const items = await page.$$eval('.product-card', cards =>
cards.map(card => ({
title: card.querySelector('.title')?.textContent?.trim(),
price: card.querySelector('.price')?.textContent?.trim(),
url: card.querySelector('a')?.href
}))
);
Оптимізація продуктивності
Запуск браузера дорогий. Для промислового парсингу:
- Пул браузерних контекстів—один процес Chrome, кілька ізольованих контекстів
-
Вимкнення ресурсів—блокування завантаження шрифтів, картинок, аналітики через
page.route() -
Кластеризація—
playwright-clusterабо самописний пул зworker_threads
Блокування лишнього трафіку знижує час завантаження сторінки на 40–70% та витрату пам'яті.
Виявлення headless-браузерів
Сучасні захисти (DataDome, PerimeterX, Cloudflare Bot Management) детектують автоматизацію по десяткам сигналів. Основні методи обходу:
-
playwright-stealth—патчить
navigator.webdriverта інші детектуємі поля -
Реалістичні рухи миші через
playwright-mouse-helper - Унікальні fingerprints—різні viewport, timezone, locale для кожної сесії
Терміни
Базовий скрапер одного сайту: 2–4 дня. Скрапер з обходом захисту, прокси-ротацією та мониторингом: 7–10 днів.







