В этом руководстве по Puppeteer Stealth мы рассмотрим:
- Что такое обнаружение ботов и почему оно является проблемой для Puppeteer.
- Что такое Puppeteer Extra.
- Как использовать плагин Puppeteer Extra Stealth для обхода блокировок.
Обнаружение ботов: Самый большой враг Puppeteer
Puppeteer – одна из самых распространенных библиотек JavaScript для автоматизации браузеров. Она так популярна, потому что ее поддерживает команда Chrome в Google. Ее высокоуровневый API позволяет управлять безголовыми или головными браузерами через протокол DevTools, что делает ее отличным инструментом для веб-скрапинга, автоматизированного тестирования и разработки ботов.
Однако Puppeteer может быть легко остановлен технологиями обнаружения ботов. Это особенно актуально при использовании Chrome/Chromium в режиме headless. Почему? Потому что Puppeteer автоматически устанавливает свойства и заголовки по умолчанию, которые заставляют контролируемый браузер выглядеть как экземпляр без головы. Например, он устанавливает следующий параметр Chrome: navigator.webdriver: true
.
Решения для борьбы с ботами знают об этом и анализируют эти настройки, чтобы определить, является ли текущий пользователь человеком или ботом. Если они находят подозрительные конфигурации, то помечают пользователя как бота.
Например, рассмотрим этот тест на обнаружение ботов в режиме headless. Если вы откроете тестовую страницу в браузере, то увидите:
Теперь попробуйте зайти на этот сайт с помощью Puppeteer vanilla и извлечь из него результат тестирования:
import puppeteer from "puppeteer"
(async () => {
// set up the browser and launch it
const browser = await puppeteer.launch()
// open a new blank page
const page = await browser.newPage()
// navigate the page to the target page
await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")
// extract the message of the test result
const resultElement = await page.$("#res")
const message = await resultElement.evaluate(e => e.textContent)
// print the resulting message
console.log(`The result of the test is "%s"`, message);
// close the current browser session
await browser.close()
})()
Запустите приведенный выше скрипт, и вы увидите:
The result of the test is "You are Chrome headless"
Это означает, что тест не прошел, так как страница смогла определить автоматический запрос как исходящий от безголового браузера.
По умолчанию Puppeteer является ограниченным инструментом. Чтобы избежать обнаружения ботов, вам придется вручную настраивать его и переопределять стандартные конфигурации. Избежать всего этого можно с помощью Puppeteer Extra!
Puppeteer Extra: Расширяемая версия Puppeteer
Puppeteer Extra – это легкая оболочка, созданная вокруг Puppeteer и расширяющая его за счет поддержки плагинов. Другими словами, puppeteer-extra
– это готовая замена puppeteer
. Помимо того, что она работает так же, как и популярная библиотека автоматизации браузеров, она предоставляет метод use()
для регистрации плагинов.
Каждый плагин добавляет в Puppeteer дополнительную функциональность. Среди наиболее полезных плагинов можно выделить следующие
puppeteer-extra-plugin-stealth
: Чтобы технологии обнаружения ботов было сложнее выявлять безголовые экземпляры браузера.puppeteer-extra-plugin-recaptcha
: автоматическое решение reCAPTCHA и hCaptchas.puppeteer-extra-plugin-adblocker
: удаляет рекламу и трекеры, сокращая пропускную способность и время загрузки.puppeteer-extra-plugin-devtools
: Обеспечивает возможность отладки браузера из любого места путем создания безопасного туннеля к DevTools.puppeteer-extra-plugin-repl
: чтобы сделать отладку увлекательной с помощью интерактивного интерфейса REPL (Read-Eval-Print-Loop).puppeteer-extra-plugin-block-resources
: Блокирует динамические ресурсы страницы, такие как изображения, медиа, CSS и JS-файлы.puppeteer-extra-plugin-anonymize-ua
: Для анонимизации заголовка User-Agent при навигации по странице. О том, почему это важно, читайте в нашем руководстве по User Agents для веб-скрапинга.puppeteer-extra-plugin-user-preferences
: Установка пользовательских настроек Chrome/Chromium.
Теперь давайте подробнее рассмотрим плагин Puppeteer Stealth.
Что представляет собой плагин Puppeteer Extra Stealth и что он делает
puppeteer-extra-plugin-stealth
– это плагин для Puppeteer Extra, который включает в себя набор конфигураций, позволяющих избежать обнаружения бота. В деталях Puppeteer Stealth опирается на встроенные модули уклонения, которые перезаписывают утечки и свойства Puppeteer, выдающие его за бота. Например, он удаляет “HeadlessChrome” из заголовка User-Agent и удаляет свойство navigator.webdriverr
, установленное Puppeteer по умолчанию.
Цель плагина Puppeteer Extra Stealth – сделать так, чтобы экземпляр Chromium без головы, управляемый через Puppeteer, прошел все тесты на обнаружение ботов на сайте sannysoft.com. На данный момент эта цель достигнута. В то же время, как говорится в официальной документации, все еще существуют способы обнаружения безголового Chromium. Это означает, что обойти все механизмы обнаружения ботов невозможно, но идея проекта заключается в том, чтобы сделать этот процесс как можно более трудным.
Как использовать Puppeteer Stealth, чтобы избежать обнаружения ботов при скрапинге веб-страниц
Пришло время посмотреть, как интегрировать Puppeteer Stealth в скрипт скрейпинга puppeteer, чтобы избежать блокировки.
Выполните следующие шаги!
Шаг 1: Установите Puppeteer Extra и плагин Stealth
Выполните приведенную ниже команду, чтобы добавить Puppeteer Extra и плагин Puppeteer Stealth в зависимости вашего проекта:
npm install puppeteer-extra puppeteer-extra-plugin-stealth
Отлично! Вы только что выполнили все необходимые условия для интеграции плагина Stealth в ваш автоматический сценарий Puppeteer.
Шаг 2: Настройте Puppeteer Extra и зарегистрируйте плагин Stealth
Сначала замените puppeteer импорта puppeteer
на эту инструкцию:
import puppeteer from "puppeteer-extra"
Другими словами, убедитесь, что импортируете объект puppeteer
из "puppeteer-extra``"
, а не из "puppeteer``"
.
Затем импортируйте StealthPlugin из puppeteer-extra-plugin-stealth
:
import StealthPlugin from "puppeteer-extra-plugin-stealth"
Если вы используете CommonJS, вам понадобится:
const puppeteer = require("puppeteer-extra")
const StealthPlugin = require("puppeteer-extra-plugin-stealth")
Затем зарегистрируйте плагин Stealth, передав его объекту puppeteer
через метод use()
:
puppeteer.use(StealthPlugin())
Потрясающе! Вы только что добавили в Puppeteer возможности уклонения по умолчанию, поддерживаемые плагином.
Обратите внимание, что конструктор StealthPlugin()
принимает необязательный объект с набором строк, соответствующих уклонениям, которые необходимо включить:
// enable only a few evasion techniques
puppeteer.use(StealthPlugin({
enabledEvasions: new Set(["chrome.app", "chrome.csi", "defaultArgs", "navigator.plugins"])
}))
В противном случае используйте приведенную ниже логику, чтобы динамически удалить определенную стратегию уклонения из плагина Stealth:
const stealthPlugin = StealthPlugin()
puppeteer.use(stealthPlugin)
// ...
// remove the "user-agent-override" evasion method
pluginStealth.enabledEvasions.delete("user-agent-override")
Шаг 3: Соберите все в единое целое
Интегрируйте Puppeteer Extra и его плагин Stealth в скрипт, который вы видели в начале статьи:
import puppeteer from "puppeteer-extra"
import StealthPlugin from "puppeteer-extra-plugin-stealth"
(async () => {
// configure the stealth plugin
puppeteer.use(StealthPlugin())
// set up the browser and launch it
const browser = await puppeteer.launch()
// open a new blank page
const page = await browser.newPage()
// navigate the page to the target page
await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")
// extract the message of the test result
const resultElement = await page.$("#res")
const message = await resultElement.evaluate(e => e.textContent)
// print the resulting message
console.log(`The result of the test is "%s"`, message);
// close the current browser session
await browser.close()
})()
Запустите этот фрагмент, и теперь он будет печататься:
The result of the test is "You are not Chrome headless"
Вуаля! Выбранная страница с функцией обнаружения ботов больше не может пометить ваш автоматизированный скрипт Puppeteer как бота
Поздравляем! Теперь вы ниндзя Puppeteer Stealth, и никакие технологии обнаружения ботов вам больше не страшны.
Заключение
В этой статье вы узнали, почему обнаружение ботов является проблемой для Puppeteer и как с ней справиться. Благодаря Puppeteer Extra вы можете расширить функциональность Puppeteer с помощью плагинов. В частности, плагин Stealth – отличный союзник в борьбе с обнаружением ботов, и здесь вы узнали, как его использовать.
Каким бы сложным ни был ваш Puppeteer Extra, продвинутые технологии защиты от ботов, такие как Cloudflare, все равно смогут обнаружить и заблокировать ваши скрипты. Вы можете выбрать другой пакет автоматизации браузера, но причиной обнаружения будет браузер, а не библиотека. Решением является масштабируемый браузер с функцией обхода ботов, который может быть интегрирован с любой библиотекой автоматизации браузера. Такой браузер существует и называется браузер для скрапинга!
Браузер для скрапинга от Bright Data – это высокомасштабируемый облачный браузер, который работает с Puppeteer, Playwright, Selenium и другими. Он автоматически меняет IP-адрес выхода при каждом запросе и может обрабатывать отпечатки пальцев браузера, разрешение CAPTCHA и автоматические повторные попытки для вас. Это возможно благодаря функциям разблокировки на основе прокси, на которые он опирается.
Прокси Bright Data используют компании из списка Fortune 500 и более 20,000 клиентов. Эта надежная всемирная прокси-сеть включает в себя:
- Прокси для дата-центров – Более 770 000 IP-адресов дата-центров.
- Резидентные прокси – Более 72 миллионов резидентных IP-адресов в более чем 195 странах.
- ISP прокси – Более 700 000 ISP IP-адресов
- Мобильные прокси – более 7 миллионов мобильных IP-адресов.
Поговорите с одним из наших торговых представителей и узнайте, какой из продуктов Bright Data лучше всего подходит для ваших потребностей.
Кредитная карта не требуется