Реализация парсинга через 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 дней.







