Для работы в headless среде необходимо установить Puppeteer через npm:
npm install puppeteer
Импорт и инициализация браузера выполняются следующим образом:
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Ключевые моменты:
headless: true запускает браузер без графического
интерфейса.
async/await обеспечивает последовательное
выполнение асинхронных операций.
page.goto(url) загружает страницу по указанному URL.
Puppeteer позволяет гибко настраивать headless режим через объект конфигурации при запуске браузера:
const browser = await puppeteer.launch({
headless: 'new', // современный режим headless
args: ['--no-sandbox', '--disable-setuid-sandbox'],
defaultViewport: { width: 1280, height: 800 }
});
Важно:
args полезны для запуска в контейнерах или CI/CD средах.
defaultViewport задает размеры окна браузера, что критично
для корректного рендеринга элементов на странице.
Headless режим не ограничивает стандартные возможности Puppeteer. Основные операции:
await page.goto('https://example.com');
await page.waitForSelector('#login'); // ожидание элемента
await page.type('#username', 'user123'); // ввод текста
await page.click('#submit'); // клик по элементу
await page.waitForNavigation(); // ожидание перехода
Особенности headless режима:
puppeteer-extra-plugin-stealth.
Puppeteer позволяет управлять DOM напрямую:
const title = await page.$eval('h1', el => el.textContent);
const links = await page.$$eval('a', anchors => anchors.map(a => a.href));
Различия headless режима:
eval < /code > и < code>$eval
безопасно работают в headless браузере.
Даже без графического интерфейса возможно сохранять визуальные состояния страницы:
await page.screenshot({ path: 'screenshot.png', fullPage: true });
await page.pdf({ path: 'document.pdf', format: 'A4' });
Пояснения:
fullPage: true захватывает всю страницу, а не только
видимую область.
Headless среда поддерживает эмуляцию мобильных устройств и условий сети:
const iPhone = puppeteer.devices['iPhone 12'];
await page.emulate(iPhone);
await page.setOfflineMode(true); // эмуляция офлайн
await page.setUserAgent('Custom User Agent'); // изменение UA
Ключевые моменты:
Headless браузеры позволяют ускорить тестирование за счет:
await page.setRequestInterception(true);
page.on('request', req => {
if (['image', 'stylesheet', 'font'].includes(req.resourceType())) {
req.abort();
} else {
req.continue();
}
});
const pages = await Promise.all([
browser.newPage(),
browser.newPage(),
browser.newPage()
]);
headless: ‘new’ для улучшенной
производительности в последних версиях Chromium.
Несмотря на отсутствие GUI, Puppeteer поддерживает инструменты отладки:
const browser = await puppeteer.launch({ headless: false, devtools: true });
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
Headless режим идеально подходит для автоматизированного тестирования:
test('Проверка заголовка страницы', async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://example.com');
const title = await page.title();
expect(title).toBe('Example Domain');
await browser.close();
});
Headless среда Puppeteer обеспечивает:
Этот режим является оптимальным выбором для надежного и быстрого тестирования веб-приложений на JavaScript.