puppeteer-extra-plugin-stealth — самый популярный Anti-Detection пакет для Puppeteer. Он до сих пор собирает 600K+ загрузок в неделю на npm. При этом с марта 2023 года не вышло ни одного обновления. Версия 2.11.2 — последний релиз, и ситуация не изменится: поддержка прекращена, issues на GitHub копятся, а Anti-Bot системы давно ушли вперёд.
TL;DR: Stealth-плагины патчат сигналы детекции через JavaScript-override на уровне страницы. В 2026 году Anti-Bot системы вроде Cloudflare, Akamai и DataDome проверяют сигналы, до которых JavaScript не дотягивается: TLS fingerprints, артефакты протокола CDP и различия рендеринга на уровне движка. Решение — не лучший плагин. Это другой слой: пропатченный драйвер, скрывающий утечки протокола, или пропатченный браузер, обрабатывающий fingerprints на уровне движка.
Что Stealth-плагины на самом деле делают
puppeteer-extra-plugin-stealth включает 11 evasion-модулей, запускаемых через evaluateOnNewDocument. Каждый модуль патчит одну поверхность детекции:
| Модуль | Что патчит |
|---|---|
webdriver |
Удаляет navigator.webdriver = true |
chrome.runtime |
Подделывает объект chrome.runtime |
chrome.csi / chrome.app |
Добавляет отсутствующие стабы Chrome API |
navigator.plugins |
Подделывает массив плагинов |
navigator.languages |
Переопределяет языковые настройки |
navigator.permissions |
Исправляет поведение permission query |
media.codecs |
Подделывает поддержку кодеков |
sourceurl |
Скрывает //# sourceURL из инжектированных скриптов |
iframe.contentWindow |
Исправляет детекцию cross-origin iframe |
webgl.vendor |
Подделывает строки WebGL vendor/renderer |
user-agent-override |
Устанавливает реалистичный заголовок User-Agent |
Эти патчи работали в 2021-2022, когда Anti-Bot системы проверяли в основном свойства JavaScript на уровне страницы. Против того, что проверяют современные системы детекции, они бессильны.
Почему Stealth-плагины не работают в 2026
Anti-Bot детекция ушла ниже слоя JavaScript. Сигналы, которые сейчас решают всё — те, до которых evaluateOnNewDocument не дотягивается.
Утечки протокола CDP
Когда Puppeteer подключается к Chrome, он отправляет CDP-команды вроде Runtime.enable, Page.enable и Network.enable. Эти команды оставляют артефакты во внутреннем состоянии браузера, которые Anti-Bot скрипты умеют обнаруживать. Stealth-плагин не трогает CDP, потому что работает на уровне страницы, а не на уровне протокола.
Одной команды Runtime.enable достаточно для идентификации автоматизированной сессии. Никакой page-level patching не скроет факт отправки CDP-команд.
TLS Fingerprinting
Cloudflare проверяет TLS fingerprints (JA3/JA4) до того, как отдаст любой HTML. Если TLS fingerprint не совпадает, сессия получает challenge или блокируется — ещё до того, как JavaScript-патчи Stealth-плагина успеют загрузиться. Плагин работает на уровне страницы и не имеет доступа к TLS-слою. Подробное объяснение работы TLS Fingerprinting в стеке детекции смотрите в разделе о сетевом слое статьи Автоматизация браузера без блокировок.
Детекция JavaScript-override
Anti-Bot скрипты проверяют не только значение navigator.webdriver. Они проверяют property descriptor. В настоящем браузере webdriver определён как native getter на прототипе Navigator. Stealth-плагин переопределяет его через Object.defineProperty, что меняет флаг configurable дескриптора и вывод toString() getter-функции. Скрипты детекции тестируют именно эти расхождения.
То же касается других override. chrome.runtime, массивы плагинов и permission queries имеют обнаруживаемые отличия, когда их нативные реализации заменены JavaScript-стабами.
Различия рендеринга в Headless
Даже с --headless=new (новым headless-режимом) Chrome рендерит немного иначе, чем в headed-режиме. Метрики шрифтов, GPU-ускоренный вывод Canvas и API размеров экрана возвращают другие значения. Stealth-плагин патчит некоторые свойства navigator, но не может изменить то, как работает сам движок рендеринга.
Что пришло на смену Stealth-плагинам
Экосистема разделилась на два подхода: пропатченные драйверы (исправляют слой протокола) и пропатченные браузеры (исправляют слой движка). Они решают разные задачи.
Пропатченные драйверы: Rebrowser и Patchright
Rebrowser предлагает drop-in замену для Puppeteer и Playwright (rebrowser-puppeteer, rebrowser-playwright). Патчи нацелены на артефакты протокола CDP: они меняют взаимодействие Runtime.enable и других команд с браузером, чтобы не оставлять обнаруживаемых следов. Вы заменяете имя пакета в коде — всё остальное остаётся без изменений.
// Before: detected
const puppeteer = require('puppeteer');
// After: CDP artifacts patched
const puppeteer = require('rebrowser-puppeteer');Patchright делает то же самое для Playwright с фокусом на Python. Патчит утечки Runtime.enable и активно поддерживается.
Ограничение: Пропатченные драйверы решают проблему protocol detection, но не затрагивают Browser Fingerprinting. Если сайт проверяет Canvas, WebGL, AudioContext или рендеринг шрифтов — вы всё ещё видны. Пропатченные драйверы отвечают на вопрос «ты автоматизирован?», но не на «ты настоящее устройство?»
Пропатченные браузеры: Anti-Detect движки
Пропатченный браузер модифицирует сам Chromium, чтобы сигналы fingerprint были когерентными на уровне движка. Вывод Canvas, рендеринг WebGL, данные AudioContext, метрики шрифтов, размеры экрана, часовой пояс и locale сообщают значения, соответствующие одному реальному профилю устройства.
Именно это делает Clawbrowser. Это форк Chromium с патчами fingerprint на уровне движка по 20+ поверхностям, встроенной маршрутизацией прокси, защитой от утечек WebRTC и нативной поддержкой CDP. Ваш существующий код на Puppeteer или Playwright подключается к нему по CDP:
from playwright.async_api import async_playwright
async def automate_without_detection():
async with async_playwright() as p:
# Connect to Clawbrowser instead of stock ChromeЧто это покрывает в сравнении со Stealth-плагинами:
- Когерентность Canvas/WebGL/AudioContext на уровне движка (не JavaScript-стабы)
- TLS fingerprint, совпадающий с реальной сессией Chrome
- CDP-соединение без артефактов
Runtime.enable - Защита от утечек WebRTC на уровне браузера
- Маршрутизация прокси со встроенной географической привязкой
Полный разбор сигналов fingerprint смотрите в статье Browser Fingerprinting: 20+ сигналов, которые Anti-Bot системы используют для детекции.
Как выбрать подходящий инструмент
Правильный инструмент зависит от того, что именно вас детектит.
| Тип детекции | Симптом | Решение |
|---|---|---|
| Артефакты протокола CDP | Мгновенная блокировка при загрузке страницы, без CAPTCHA | Пропатченный драйвер (Rebrowser, Patchright) |
| Несовпадение Browser Fingerprint | CAPTCHA на каждой странице или тихие расхождения в данных | Пропатченный браузер (Clawbrowser) |
| Несовпадение TLS Fingerprint | Блокировка до загрузки страницы (403 на первом запросе) | Пропатченный браузер с маршрутизацией прокси |
| Репутация IP | Блокировка с datacenter IP | Residential proxy (любой подход) |
| Поведенческая детекция | Блокировка после 5-10 страниц | Тайминг и session management в коде |
Когда пропатченных драйверов достаточно
Если вы автоматизируете сайты с базовой детекцией, которая проверяет артефакты CDP, но не строит глубокий fingerprint браузера, Rebrowser или Patchright справятся. Это покрывает множество сайтов с лёгкими конфигурациями Anti-Bot.
Когда нужен пропатченный браузер
Если сайт использует Cloudflare Bot Management, Akamai Bot Manager, DataDome или PerimeterX, нужна когерентность fingerprint на уровне движка. Page-level патчи и driver-level патчи не спасут, когда детекция проверяет 20+ поверхностей браузера одновременно.
Clawbrowser — локальный, бесплатный, основанный на Chromium Anti-Detect браузер с управляемыми fingerprints, маршрутизацией прокси, нативным CDP и встроенным MCP-сервером. Он берёт на себя идентичность браузера и сетевой слой, а ваш код занимается только поведением и session management.
Миграция со Stealth-плагинов
Если вы сейчас используете puppeteer-extra-plugin-stealth или playwright-stealth, миграция на Clawbrowser займёт меньше пяти минут.
До (Stealth-плагин)
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({ headless: false });После (Clawbrowser)
const puppeteer = require('puppeteer-core');
// Connect to Clawbrowser over CDP
const browser = await puppeteer.connect({
browserWSEndpoint: 'ws://127.0.0.1:9222'Ключевое отличие: вы полностью удаляете puppeteer-extra и puppeteer-extra-plugin-stealth из зависимостей. Никакой конфигурации плагинов. Никакого выбора evasion-модулей. Anti-detection происходит на уровне браузера, а не в вашем коде.
Паттерны, специфичные для скрейпинга (пагинация, прогрев сессий, обход Cloudflare), смотрите в статье Веб-скрейпинг без обнаружения.
FAQ
puppeteer-extra-stealth совсем бесполезен?
Он всё ещё работает на сайтах без коммерческой Anti-Bot системы. Если целевой сайт проверяет только navigator.webdriver и базовые свойства JavaScript, Stealth-плагина достаточно. Но любой сайт с Cloudflare, Akamai, DataDome, PerimeterX или соцсети вроде Facebook, Instagram, LinkedIn и X его обнаружат.
У playwright-stealth те же проблемы?
Да. playwright-stealth использует тот же подход: JavaScript-override через инжекцию на уровне страницы. Он не дотягивается до TLS fingerprints, артефактов CDP и рендеринга на уровне движка. Ограничения детекции идентичны.
Можно ли использовать Rebrowser и Clawbrowser вместе?
Не нужно. Clawbrowser закрывает и слой протокола, и слой fingerprint. Патчи Rebrowser полезны, когда вы работаете со стандартным Chrome и не можете перейти на Anti-Detect браузер. С Clawbrowser артефакты CDP уже обработаны.
Почему у Stealth всё ещё 600K загрузок в неделю?
Инерция. Большинство туториалов и ответов на Stack Overflow по-прежнему его рекомендуют. Разработчики копируют решения из 2022 года, не проверяя, поддерживается ли пакет. Высокое число загрузок не означает эффективность против современной детекции.
Хватит патчить — пора решать
Stealth-плагины были разумным решением, когда Anti-Bot детекция опиралась на проверки на уровне JavaScript. Детекция переместилась на TLS fingerprints, анализ протокола CDP и различия рендеринга на уровне движка. Патчинг на уровне страницы до этих сигналов не дотягивается.
Установите Clawbrowser, чтобы решить вопрос детекции на уровне браузера: скопируйте промпт установки с clawbrowser.ai и вставьте его в вашего AI-агента. Удалите puppeteer-extra и puppeteer-extra-plugin-stealth из зависимостей. Подключите существующий код на Puppeteer или Playwright по CDP. Anti-detection — в браузере, а не в вашем коде.
Модель детекции, лежащую в основе, смотрите в статье Автоматизация браузера без блокировок: 4-слойный стек защиты.
Continue exploring
Ask AI how Clawbrowser helps
Читайте дальше
Похожие статьи

Веб-скрейпинг без обнаружения: техники, которые работают
Практический гайд по web scraping: разведка сайта, HTTP или browser, извлечение данных, pagination, sessions и масштабирование с Playwright.
Читать статью →
Автоматизация браузера без блокировок: стек защиты из 4 уровней
Разбираем, почему автоматизация браузера ловит баны, и как закрыть каждый уровень: identity браузера, сеть, поведение и управление сессиями. Практическое руководство для разработчиков.
Читать статью →