Безопасность
Playwright Bot Bypass
greekr4/playwright-bot-bypassClaude Code скилл для обхода систем обнаружения ботов (Google CAPTCHA, Cloudflare и др.) на базе rebrowser-playwright. Поддерживает реальный GPU-фингерпринт, имитацию поведения человека, сохранение cookies и прокси. Работает с Node.js и Python.
Установка
terminal
bash
npx skills add greekr4/playwright-bot-bypassREADME
playwright-bot-bypass v2.0
Claude Code скилл для обхода обнаружения ботов с использованием
rebrowser-playwrightи 8 стелс-патчами.
Установка
npx skills add greekr4/playwright-bot-bypass
Возможности
- Прохождение всех тестов bot.sannysoft.com
- Поиск в Google без CAPTCHA
- Скрапинг Twitter/X без авторизации
- Реальный GPU-фингерпринт (Apple M2, NVIDIA и др.)
- 8 патчей фингерпринта (webdriver, plugins, languages, permissions, canvas и др.)
- Имитация поведения человека (движение мыши, задержки при вводе)
- Сохранение cookies и поддержка прокси
- Работает с Node.js и Python
A/B-тест: bluer.co.kr (реальная защита от ботов)
Тестирование на Blue Ribbon Survey — сайте с активной защитой от ботов:
| Метрика | Стелс (этот скилл) | Обычный Playwright |
|---|---|---|
| HTTP-статус | 200 OK | 403 Forbidden |
navigator.webdriver | undefined | true |
navigator.plugins | 3 (патч) | 0 (обнаружен) |
navigator.languages | [ko-KR, ko, en-US, en] | [en-US] |
outerWidth - innerWidth | 16 (реальный Chrome) | 0 (headless) |
chrome.runtime | Присутствует | Отсутствует |
| WebGL Renderer | Apple M2 (реальный GPU) | SwiftShader (программный) |
| User-Agent | Чистый Chrome | HeadlessChrome |
A/B-тест bot.sannysoft.com
| Стандартный Playwright (обнаружен) | rebrowser-playwright (обход) |
|---|---|
![]() | ![]() |
Стелс-патчи (8 векторов)
| # | Патч | Обходит |
|---|---|---|
| 1 | Удаление navigator.webdriver | Все детекторы ботов |
| 2 | Объект chrome.runtime | Cloudflare, sannysoft |
| 3 | navigator.plugins (3 плагина) | Cloudflare Bot Management |
| 4 | navigator.languages (ko-KR, en) | Akamai (перекрёстная проверка HTTP-заголовка) |
| 5 | Нормализация Permissions API | PerimeterX |
| 6 | hardwareConcurrency / deviceMemory | Продвинутые фингерпринтеры |
| 7 | Смещение outerWidth / outerHeight | Обнаружение headless-режима |
| 8 | Шум canvas-фингерпринта | Cloudflare Turnstile |
Дополнительно: --disable-blink-features=AutomationControlled, --no-sandbox, реальный Chrome через channel: 'chrome'
Быстрый старт
Node.js (рекомендуется)
npm init -y && npm install rebrowser-playwright
Использование шаблона (рекомендуется)
js
import { createStealthBrowser, humanDelay, humanType, simulateMouseMovement } from './scripts/stealth-template.mjs';
const { browser, page } = await createStealthBrowser();
try {
await page.goto('https://example.com');
await simulateMouseMovement(page); // Естественное движение мыши
await humanType(page, 'input', 'query'); // Ввод текста как человек
await humanDelay(300, 800);
} finally {
await browser.close();
}Параметры шаблона
js
createStealthBrowser({
headless: false, // Обязательно для стелс-режима (по умолчанию)
viewport: { width: 1280, height: 800 },
locale: 'ko-KR', // Локаль браузера
storageState: './session.json', // Сохранение cookies
proxy: { server: 'http://proxy:8080' } // Поддержка прокси
});Ручная настройка
js
import { chromium } from 'rebrowser-playwright';
const browser = await chromium.launch({
headless: false,
channel: 'chrome',
args: ['--disable-blink-features=AutomationControlled', '--no-sandbox']
});
const context = await browser.newContext({
locale: 'ko-KR',
extraHTTPHeaders: { 'Accept-Language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7' }
});
await context.addInitScript(() => {
delete Object.getPrototypeOf(navigator).webdriver;
// ... полный список патчей см. в SKILL.md
});
const page = await context.newPage();
try {
await page.goto('https://google.com');
} finally {
await browser.close();
}Python
pip install undetected-chromedriver
py
import undetected_chromedriver as uc
driver = uc.Chrome() # автоматически определяет версию Chrome
driver.get('https://google.com')
playwright-stealthдля Python патчит только на уровне JS — WebGL по-прежнему показывает SwiftShader. Вместо него используйтеundetected-chromedriver.
Результаты тестирования
| Окружение | bot.sannysoft.com | Google Search | bluer.co.kr |
|---|---|---|---|
| Стандартный Playwright | Обнаружен | CAPTCHA | 403 |
| rebrowser-playwright (этот скилл) | Пройден | Работает | 200 |
| playwright-stealth (Python) | Пройден | CAPTCHA | - |
| undetected-chromedriver | Пройден | Работает | - |
Включённые скрипты
skills/playwright-bot-bypass/
scripts/
stealth-template.mjs # Переиспользуемая стелс-фабрика (импортируется во всех примерах)
bot-detection-test.mjs # Проверка обхода на bot.sannysoft.com
examples/
stealth-google-search.mjs # Поиск в Google без CAPTCHA
ab-test.mjs # Сравнение: обнаружен vs стелс
stealth-twitter-scrape.mjs # Скрапинг профилей Twitter/X
package.json # Зависимости (type: module)
marketplace.json
SKILL.md # Полная документация для агентов Claude Code
Требования
- Node.js 18+ (ESM /
.mjs) - Установленный Google Chrome (не только Chromium)
- Режим с отображением окна (
headless: false)
Устранение неполадок
| Проблема | Решение |
|---|---|
ERR_MODULE_NOT_FOUND | Выполните npm install rebrowser-playwright в директории скрипта |
| Браузер не открывается | Проверьте Chrome: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version |
| WebGL показывает SwiftShader | Убедитесь, что импорт идёт из rebrowser-playwright, а не из playwright |
| Всё равно обнаруживается | Добавьте simulateMouseMovement() и humanDelay() между действиями |
| Процесс зависает | Убедитесь, что browser.close() находится в блоке finally |
Лицензия
MIT

