Puppeteer — это мощная библиотека для автоматизации браузеров, которая часто используется для тестирования и веб-скрапинга. Однако, при использовании Puppeteer для автоматизации может возникнуть проблема: сайты, использующие различные механизмы защиты, могут распознать автоматизированные запросы. Это связано с тем, что Puppeteer оставляет характерные следы, которые можно легко обнаружить.
Для обхода этих ограничений был разработан Stealth plugin. Это дополнение для Puppeteer, которое помогает скрыть признаки автоматизации и позволяет взаимодействовать с веб-страницами так, как если бы это делал реальный пользователь.
Когда браузер управляется с помощью Puppeteer, он часто оставляет определённые «отпечатки», которые могут быть использованы для его распознавания. Признаки автоматизации могут включать:
navigator (например,
navigator.webdriver).
Stealth plugin решает эти проблемы, скрывая или изменяя такие данные, чтобы их невозможно было использовать для обнаружения автоматических скриптов.
Для начала необходимо установить сам Stealth plugin и интегрировать его в ваш проект с Puppeteer.
Установка Puppeteer и Stealth plugin:
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
Импорт и настройка:
Для использования Stealth plugin, необходимо импортировать его в код и включить в вашу сессию Puppeteer.
const puppeteer = require(&
const stealth = require('puppeteer-extra-plugin-stealth')();
puppeteer.use(stealth);
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://example.com');
// Ваши действия на странице
await browser.close();
})();
Stealth plugin включает несколько важных механизмов для скрытия автоматизированных действий:
Изменение параметров navigator: В
стандартном браузере navigator содержит информацию о
браузере и устройстве пользователя. Puppeteer оставляет
navigator.webdriver в значении true, что
указывает на автоматизированный контроль. Stealth plugin изменяет это
значение на false, чтобы замаскировать автоматизацию.
Модификация заголовков: По умолчанию Puppeteer
использует нестандартный User-Agent и другие заголовки,
которые могут быть использованы для обнаружения автоматизации. Stealth
plugin подменяет заголовки, чтобы они выглядели как у обычного браузера.
Включение или скрытие WebGL и Canvas: В некоторых случаях сайты могут проверять графические параметры браузера, такие как WebGL или Canvas, чтобы узнать, используется ли автоматизация. Stealth plugin скрывает следы использования этих технологий.
Скрытие от плагинов и настроек браузера: Многие сайты используют дополнительные скрипты для поиска признаков автоматизации, проверяя наличие плагинов или активность браузера. Stealth plugin скрывает наличие этих плагинов и изменяет настройки браузера, чтобы они не выделялись.
Снижение различий в временных метках: Тестируемые сайты могут проверять время исполнения различных команд или использование JavaScript, чтобы понять, что запрос был сделан не человеком. Stealth plugin уменьшает эти различия и делает сценарии более похожими на поведение реального пользователя.
Пример 1: Маскировка Puppeteer от защиты на сайте
Некоторые сайты могут использовать антиботы, которые легко распознают
автоматизацию по следам в navigator или по типу заголовков.
Stealth plugin помогает скрыть эти следы и обойти защиту.
const puppeteer = require('puppeteer-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();
puppeteer.use(stealth);
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://example.com');
// Действия на сайте
await browser.close();
})();
Этот код создаст сессию браузера, которая будет менее подвержена детектированию.
Пример 2: Использование с Puppeteer и прокси-серверами
Иногда для повышения анонимности используется прокси-сервер. Stealth plugin можно использовать в сочетании с прокси, чтобы полностью скрыть автоматизацию.
const puppeteer = require('puppeteer-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();
puppeteer.use(stealth);
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: ['--proxy-server=http://your-proxy.com']
});
const page = await browser.newPage();
await page.goto('https://example.com');
// Действия на сайте
await browser.close();
})();
В этом примере с использованием прокси-уровня автоматизация становится ещё менее заметной для сайтов.
Совместимость: Хотя Stealth plugin работает с большинством сайтов, некоторые сервисы могут использовать более сложные методы для обнаружения автоматизации. В таких случаях, возможно, потребуется дополнительная настройка или комбинация различных методов для обхода защиты.
Обновления: Веб-сайты часто обновляют свои механизмы защиты от ботов. Это может привести к тому, что некоторые функции Stealth plugin перестанут работать. Регулярное обновление как Puppeteer, так и самого плагина необходимо для поддержания эффективности.
Этика: Использование Stealth plugin для обхода защиты может нарушать правила использования некоторых сайтов. Перед использованием обязательно ознакомьтесь с политикой конфиденциальности и условиями обслуживания платформы, с которой вы работаете.
Stealth plugin предоставляет важные инструменты для обхода защиты сайтов от автоматизации с использованием Puppeteer. Он помогает маскировать действия скрипта под поведение реального пользователя, что важно для тестирования, веб-скрапинга и других автоматизированных задач.