Изменение user-agent

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

Строка user-agent

User-agent — это строка, передаваемая в заголовке HTTP-запроса браузером при обращении к веб-странице. Она используется сервером для определения информации о браузере, операционной системе и устройстве пользователя. Строка может включать данные о версии браузера, платформе, и даже о типе устройства (мобильный, десктопный).

Пример строки user-agent для Chrome на Windows:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36

Настройка user-agent в Puppeteer

Для изменения user-agent в Puppeteer необходимо использовать метод setUserAgent(), который позволяет задать новую строку user-agent для страницы. Этот метод применяется после создания браузера и открытия страницы, но до выполнения любых действий, требующих специфической настройки заголовков.

Пример простого изменения user-agent в Puppeteer:

const puppeteer = require(&

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Устанавливаем новый user-agent
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

  // Переходим на сайт
  await page.goto('https://example.com');

  await browser.close();
})();

В данном примере после открытия страницы мы устанавливаем новый user-agent, а затем переходим на сайт. Все последующие запросы от этой страницы будут отправляться с изменённой строкой user-agent.

Получение текущего user-agent

Для проверки текущей строки user-agent можно использовать метод page.evaluate(), который позволяет выполнить код на странице и вернуть результат в Node.js.

Пример получения текущего user-agent:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Переходим на сайт
  await page.goto('https://www.whatismybrowser.com/');

  // Получаем строку user-agent
  const userAgent = await page.evaluate(() => navigator.userAgent);

  console.log(userAgent);

  await browser.close();
})();

Этот код откроет сайт, который показывает строку user-agent, и выведет её в консоль.

Модификация user-agent на мобильные устройства

Puppeteer позволяет не только изменять строку user-agent, но и эмулировать мобильные устройства, что полезно для тестирования адаптивных сайтов. Для этого необходимо настроить параметры устройства и установить соответствующую строку user-agent.

Пример эмуляции мобильного устройства с изменённым user-agent:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Эмуляция мобильного устройства (iPhone X)
  const iPhone = puppeteer.devices['iPhone X'];
  await page.emulate(iPhone);

  // Строка user-agent для мобильного устройства
  await page.setUserAgent(iPhone.userAgent);

  // Переходим на сайт
  await page.goto('https://example.com');

  await browser.close();
})();

В этом примере используется встроенный в Puppeteer профиль мобильного устройства iPhone X. Параметры устройства, такие как размер экрана и ориентация, настраиваются через метод emulate(), а строка user-agent устанавливается через setUserAgent().

Замена user-agent для обхода блокировок

Многие сайты могут блокировать доступ, если определяют, что запросы приходят от автоматизированных систем. Изменение user-agent может помочь обойти такие блокировки. Часто в таких случаях используются строки user-agent популярных браузеров, чтобы имитировать действия реальных пользователей.

Пример обхода блокировки с помощью изменённого user-agent:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Строка user-agent для Google Chrome
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

  // Переход на сайт с возможной блокировкой
  await page.goto('https://example.com');

  await browser.close();
})();

Такой подход помогает избежать блокировки по user-agent, но важно помнить, что использование этого метода без разрешения может нарушать правила использования сайта.

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

  1. Интеграция с прокси-серверами. Часто изменение user-agent используется в связке с прокси-серверами для ещё большего сокрытия автоматизированного трафика. В таком случае, вместе с изменением user-agent, важно настроить прокси.

  2. Сетевые ограничения. Некоторые сайты используют дополнительные методы защиты, такие как проверка cookies, IP-адресов и поведенческих шаблонов. Изменение user-agent может помочь обойти некоторые из этих блокировок, но оно не является универсальным решением.

  3. Генерация реалистичных user-agent. Для сложных тестов, таких как многократный обход капчи, важно использовать реалистичные строки user-agent. Для этого можно воспользоваться специализированными библиотеками для генерации строк user-agent, которые имитируют поведение реальных пользователей.

Заключение

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