Stealth plugin

Puppeteer — это мощная библиотека для автоматизации браузеров, которая часто используется для тестирования и веб-скрапинга. Однако, при использовании Puppeteer для автоматизации может возникнуть проблема: сайты, использующие различные механизмы защиты, могут распознать автоматизированные запросы. Это связано с тем, что Puppeteer оставляет характерные следы, которые можно легко обнаружить.

Для обхода этих ограничений был разработан Stealth plugin. Это дополнение для Puppeteer, которое помогает скрыть признаки автоматизации и позволяет взаимодействовать с веб-страницами так, как если бы это делал реальный пользователь.

Зачем нужен Stealth plugin?

Когда браузер управляется с помощью Puppeteer, он часто оставляет определённые «отпечатки», которые могут быть использованы для его распознавания. Признаки автоматизации могут включать:

  • Необычные User-Agent заголовки.
  • Ошибки или необычные свойства JavaScript.
  • Необычные элементы в объекте navigator (например, navigator.webdriver).
  • Показания временной зоны, координат и другие параметры, которые легко могут быть использованы для детектирования автоматизации.

Stealth plugin решает эти проблемы, скрывая или изменяя такие данные, чтобы их невозможно было использовать для обнаружения автоматических скриптов.

Установка и настройка Stealth plugin

Для начала необходимо установить сам Stealth plugin и интегрировать его в ваш проект с Puppeteer.

  1. Установка Puppeteer и Stealth plugin:

    npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
  2. Импорт и настройка:

    Для использования 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?

Stealth plugin включает несколько важных механизмов для скрытия автоматизированных действий:

  1. Изменение параметров navigator: В стандартном браузере navigator содержит информацию о браузере и устройстве пользователя. Puppeteer оставляет navigator.webdriver в значении true, что указывает на автоматизированный контроль. Stealth plugin изменяет это значение на false, чтобы замаскировать автоматизацию.

  2. Модификация заголовков: По умолчанию Puppeteer использует нестандартный User-Agent и другие заголовки, которые могут быть использованы для обнаружения автоматизации. Stealth plugin подменяет заголовки, чтобы они выглядели как у обычного браузера.

  3. Включение или скрытие WebGL и Canvas: В некоторых случаях сайты могут проверять графические параметры браузера, такие как WebGL или Canvas, чтобы узнать, используется ли автоматизация. Stealth plugin скрывает следы использования этих технологий.

  4. Скрытие от плагинов и настроек браузера: Многие сайты используют дополнительные скрипты для поиска признаков автоматизации, проверяя наличие плагинов или активность браузера. Stealth plugin скрывает наличие этих плагинов и изменяет настройки браузера, чтобы они не выделялись.

  5. Снижение различий в временных метках: Тестируемые сайты могут проверять время исполнения различных команд или использование JavaScript, чтобы понять, что запрос был сделан не человеком. Stealth plugin уменьшает эти различия и делает сценарии более похожими на поведение реального пользователя.

Примеры использования 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();
})();

В этом примере с использованием прокси-уровня автоматизация становится ещё менее заметной для сайтов.

Важные замечания

  1. Совместимость: Хотя Stealth plugin работает с большинством сайтов, некоторые сервисы могут использовать более сложные методы для обнаружения автоматизации. В таких случаях, возможно, потребуется дополнительная настройка или комбинация различных методов для обхода защиты.

  2. Обновления: Веб-сайты часто обновляют свои механизмы защиты от ботов. Это может привести к тому, что некоторые функции Stealth plugin перестанут работать. Регулярное обновление как Puppeteer, так и самого плагина необходимо для поддержания эффективности.

  3. Этика: Использование Stealth plugin для обхода защиты может нарушать правила использования некоторых сайтов. Перед использованием обязательно ознакомьтесь с политикой конфиденциальности и условиями обслуживания платформы, с которой вы работаете.

Заключение

Stealth plugin предоставляет важные инструменты для обхода защиты сайтов от автоматизации с использованием Puppeteer. Он помогает маскировать действия скрипта под поведение реального пользователя, что важно для тестирования, веб-скрапинга и других автоматизированных задач.