Puppeteer — это мощный инструмент для автоматизации браузеров, использующий API для взаимодействия с Chrome или Chromium. Одной из задач, с которой сталкиваются разработчики при использовании Puppeteer, является подмена отпечатков браузера. Это необходимо для обхода защит, которые проверяют наличие автоматизированных скриптов, и для имитации реального пользователя, чтобы не быть заблокированным системами защиты от ботов.
Отпечаток браузера (browser fingerprint) — это уникальные характеристики, которые позволяют определить, что браузер или устройство использует именно этот пользователь. Подмена этих характеристик помогает сделать автоматизированные тесты более правдоподобными.
Отпечаток браузера формируется на основе различных данных, которые можно извлечь с помощью JavaScript. Вот несколько ключевых характеристик:
Для тестирования или обхода защиты важно не только заменить некоторые из этих параметров, но и сделать это таким образом, чтобы система не заметила изменений.
Puppeteer предоставляет широкие возможности для управления браузером и
изменения его характеристик. Для подмены отпечатков браузера можно
воспользоваться различными методами, такими как изменение
User-Agent, настройки экрана или локальных данных.
С помощью Puppeteer можно легко изменить строку User-Agent,
чтобы имитировать другой браузер или устройство. Это можно сделать через
page.setUserAgent().
const puppeteer = require(&
(async () => { const browser = await puppeteer.launch(); const page =
await browser.newPage(); await page.setUserAgent('Mozilla/5.0 (Windows
NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/58.0.3029.110 Safari/537.3'); await
page.goto('https://www.whatismybrowser.com/'); await browser.close();
})();
Этот метод полезен, когда нужно скрыть или изменить информацию о
браузере, но стоит учитывать, что простая подмена
User-Agent не всегда достаточно для скрытия использования
Puppeteer.
Размер экрана является одним из важных признаков, по которому можно
отличить реального пользователя от бота. В Puppeteer можно подменить
разрешение экрана, задав его через page.setViewport().
const puppeteer = require('puppeteer');
(async () => { const browser = await puppeteer.launch(); const page =
await browser.newPage(); await page.setViewport({ width: 1366, height:
768 }); await page.goto('https://www.whatismybrowser.com/'); await
browser.close(); })();
Использование этого метода позволяет создать сценарии, в которых экран пользователя имеет разрешение, типичное для обычных устройств.
Время и временная зона также могут быть использованы для идентификации
пользователя. Чтобы изменить временную зону в Puppeteer, необходимо
использовать page.emulateTimezone().
const puppeteer = require('puppeteer');
(async () => { const browser = await puppeteer.launch(); const page =
await browser.newPage(); await page.emulateTimezone('Europe/Moscow');
await page.goto('https://www.whatismybrowser.com/'); await
browser.close(); })();
Этот метод позволяет установить временную зону, совпадающую с той, что используется у реального пользователя.
Для более сложных сценариев нужно подменить данные, хранящиеся в
LocalStorage и Cookies. Это можно сделать с помощью методов
page.setCookie() и page.evaluate() для
изменения значений LocalStorage.
const puppeteer = require('puppeteer');
(async () => { const browser = await puppeteer.launch(); const
page = await browser.newPage();
// Изменение cookies await page.setCookie({ name: 'session_id',
value: '1234567890', domain: 'example.com' });
// Изменение LocalStorage await page.evaluate(() => {
localStorage.setItem('user', 'testUser'); });
await page.goto('https://www.example.com'); await browser.close();
})();
Эти методы полезны для тестирования сценариев, где необходимо подменить информацию, которая сохраняется между сессиями.
Canvas и WebGL fingerprinting Некоторые сайты
используют сложные методы fingerprinting, такие как Canvas
fingerprinting и WebGL fingerprinting. Они создают
уникальные отпечатки браузера, которые сложно подменить стандартными
методами Puppeteer. Для подмены таких данных потребуется более глубокая
модификация поведения браузера или использование специализированных
библиотек.
WebDriver Detection Множество сайтов используют методы
для обнаружения использования WebDriver, а значит, автоматизации через
Puppeteer. Такие методы могут включать проверку наличия объекта
navigator.webdriver. Чтобы скрыть использование WebDriver,
можно изменить этот объект через page.evaluate():
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
});
});
await page.goto('https://www.whatismybrowser.com/');
await browser.close();
})();
Этот код скроет наличие WebDriver, что поможет избежать блокировки.
Подмена отпечатков браузера с помощью Puppeteer позволяет эффективно обходить защиту от ботов и имитировать реальных пользователей. Важно помнить, что для достижения максимальной анонимности нужно учитывать не только изменение стандартных характеристик, но и сложные методы fingerprinting. Реализация таких подмен может зависеть от конкретных требований проекта, а также от сложности системы защиты, с которой предстоит работать.