playwright-bot-bypass
ユーザーが「ボット検知の回避」「CAPTCHAのスキップ」「ステルスブラウザ自動化」「検知されないPlaywright」「Googleのボットチェック回避」「rebrowser-playwright」などを求めた場合、またはボットを検知・ブロックするWebサイトの自動操作が必要な場合に使用するスキル。
description の原文を見る
This skill should be used when the user asks to "bypass bot detection", "avoid CAPTCHA", "stealth browser automation", "undetected playwright", "bypass Google bot check", "rebrowser-playwright", or needs to automate websites that detect and block bots.
SKILL.md 本文
Playwright ボット検出回避
rebrowser-playwright とステルス技術を使用してボット検出システムを回避します。bot.sannysoft.com をパスし、Cloudflare、Akamai、PerimeterX などの積極的なボット保護を備えたサイトの自動化を有効にします。
標準的な Playwright が検出される理由
| 検出ポイント | 標準的な Playwright | このソリューション |
|---|---|---|
navigator.webdriver | true | 削除 |
| WebGL Renderer | SwiftShader (ソフトウェア) | 実 GPU (Apple M2 など) |
| User Agent | "HeadlessChrome" を含む | クリーンな Chrome UA |
chrome.runtime | 欠落 | 完全なランタイムオブジェクト |
navigator.plugins | 空配列 | 3 つの標準プラグイン |
navigator.languages | ['en-US'] のみ | Accept-Language ヘッダに一致 |
| Permissions API | 不一致な状態 | 実際の Chrome に一致するようにパッチ |
outerWidth/Height | inner と同じ (chrome なし) | 実ブラウザのようにオフセット |
| Canvas フィンガープリント | 決定論的 | ノイズを注入 |
前提条件
- Node.js 18+ (ESM サポート付き、
.mjsファイル対応) - Google Chrome がインストール済み (Chromium だけでなく)
- ヘッドモード必須 (
headless: false) — ディスプレイがないとステルスが機能しない
Chrome がインストールされていることを確認:
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --version
# Linux
google-chrome --version
クイックスタート
1. インストール
npm init -y && npm install rebrowser-playwright
2. stealth-test.mjs を作成
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(() => {
// Remove webdriver
delete Object.getPrototypeOf(navigator).webdriver;
// chrome.runtime
if (!window.chrome) window.chrome = {};
if (!window.chrome.runtime) {
window.chrome.runtime = {
PlatformOs: { MAC: 'mac', WIN: 'win', ANDROID: 'android', CROS: 'cros', LINUX: 'linux', OPENBSD: 'openbsd' },
PlatformArch: { ARM: 'arm', X86_32: 'x86-32', X86_64: 'x86-64' }
};
}
// Plugins (Cloudflare checks this)
Object.defineProperty(navigator, 'plugins', {
get: () => {
const arr = [
{ name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
{ name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai', description: '' },
{ name: 'Native Client', filename: 'internal-nacl-plugin', description: '' }
];
arr.__proto__ = PluginArray.prototype;
return arr;
}
});
// Languages (must match Accept-Language header)
Object.defineProperty(navigator, 'languages', {
get: () => ['ko-KR', 'ko', 'en-US', 'en']
});
});
const page = await context.newPage();
try {
await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle' });
await page.screenshot({ path: '/tmp/stealth-test.png' });
console.log('Screenshot saved: /tmp/stealth-test.png');
} finally {
await browser.close();
}
3. 実行
node stealth-test.mjs
テンプレートの使用 (推奨)
scripts/stealth-template.mjs は、すべてのパッチが事前適用された再利用可能なファクトリを提供します:
import { createStealthBrowser, humanDelay, humanType, simulateMouseMovement } from './scripts/stealth-template.mjs';
const { browser, page } = await createStealthBrowser();
try {
await page.goto('https://example.com');
// 人間らしいマウス移動 (Cloudflare Turnstile を回避)
await simulateMouseMovement(page);
// 即座入力ではなく人間らしいタイピング
await humanType(page, 'input[name="q"]', 'search query');
await humanDelay(300, 800);
} finally {
await browser.close();
}
テンプレートオプション
const { browser, context, page } = await createStealthBrowser({
headless: false, // ステルス必須 (デフォルト)
viewport: { width: 1280, height: 800 }, // デフォルト
locale: 'ko-KR', // ブラウザロケール (デフォルト)
userAgent: null, // カスタム UA (オプション)
storageState: './session.json', // Cookie 永続化 (オプション)
proxy: { server: 'http://proxy:8080' } // プロキシ (オプション)
});
// セッションを再利用用に保存
import { saveSession } from './scripts/stealth-template.mjs';
await saveSession(context, './session.json');
適用されるステルスパッチ
テンプレートは addInitScript を通じてこれらのパッチを適用します:
| # | パッチ | 対象 |
|---|---|---|
| 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 オフセット | ヘッドレス検出 |
| 8 | Canvas フィンガープリントノイズ | Cloudflare Turnstile |
加えて起動引数: --disable-blink-features=AutomationControlled、--no-sandbox
スクリプト
scripts/stealth-template.mjs— 再利用可能なステルスブラウザファクトリ (すべてのサンプルがこれをインポート)scripts/bot-detection-test.mjs— bot.sannysoft.com での回避を検証
サンプル
examples/stealth-google-search.mjs— CAPTCHA なしの Google 検索examples/ab-test.mjs— 検出 vs ステルスの並行比較examples/stealth-twitter-scrape.mjs— Twitter/X プロフィールスクレイピング
注意:
ab-test.mjsにはrebrowser-playwrightとplaywrightの両方が必要です:npm install rebrowser-playwright playwright && npx playwright install chromium
すべてのスクリーンショットは予測可能なパスのため /tmp/ に保存されます。
制限事項
headless: false(ディスプレイ付きのヘッドモード) が必須- 実際の Google Chrome がインストール済みである必要 (
channel: 'chrome') - 一部サイトは動作パターンベースで検出される可能性あり —
humanDelay、humanType、simulateMouseMovementを使用 - CAPTCHA 自体は回避しない、トリガーされるのを防ぐだけ
- TLS/JA3 フィンガープリントは
channel: 'chrome'で処理 (実 Chrome バイナリを使用)
Python サポート
undetected-chromedriver (推奨)
pip install undetected-chromedriver
import undetected_chromedriver as uc
# Chrome バージョンを一致させる: chrome://version を確認
driver = uc.Chrome() # バージョンを自動検出
driver.get("https://www.google.com")
search_box = driver.find_element("name", "q")
search_box.send_keys("your search query")
search_box.submit()
Python
playwright-stealthは JS レベルでのみパッチ — WebGL は引き続き SwiftShader を表示。代わりにundetected-chromedriverを使用してください。
代替: Python から Node.js を呼び出し
import subprocess
result = subprocess.run(['node', 'stealth-script.mjs', query], capture_output=True)
トラブルシューティング
| 問題 | 解決策 |
|---|---|
ERR_MODULE_NOT_FOUND | スクリプトと同じディレクトリで npm install rebrowser-playwright を実行 |
| ブラウザが開かない | Chrome がインストールされていることを確認 (前提条件を参照) |
| WebGL が SwiftShader を表示 | インポートが playwright からではなく rebrowser-playwright からであることを確認 |
| 依然として検出される | アクション間に simulateMouseMovement() と humanDelay() を追加 |
| プロセスがハング | browser.close() が finally ブロック内にあることを確認 |
SyntaxError: await | ファイルは .mjs であるか、package.json に "type": "module" が必要 |
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- greekr4
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/greekr4/playwright-bot-bypass / ライセンス: MIT
関連スキル
newsblur-cli
ターミナルからNewsBlurを管理できます。フィードの閲覧、ストーリーの検索、記事の保存・共有、インテリジェンス分類器の学習、新しいフィードの発見、ワークフローの自動化がNewsBlur CLIで実現します。ユーザーがNewsBlurアカウントを操作したい場合、フィードの確認、購読管理、またはニュース読み込みに関するスクリプト構築時に活用してください。
caveman-compress
自然言語のメモリファイル(CLAUDE.md、todos、preferences)を「原始人形式」に圧縮し、入力トークンを削減します。技術的な内容、コード、URL、構造はすべて保持したまま圧縮します。圧縮版が元のファイルを上書きし、人間が読める形のバックアップはFILE.original.mdとして保存されます。トリガー:/caveman-compress FILEPATH または「compress memory file」
find-skills
日本語の意図から Agent Skills を発見する。「楽天SEOのスキル探して」「PDFを処理したい」「データ分析を自動化したい」などの日本語リクエストに対応。Claude Code (CLI)、Codex、Gemini CLI、claude.ai (Web) いずれでも動作。日本最大の Agent Skills データベース「Agent Skills by ALSEL」(11,000件超、全件日本語化、ダウンロード可能スキル8,600件超) から、ユーザーの意図に合うスキルを推薦・インストール案内する。
planning-and-task-breakdown
仕事を順序立てたタスクに分割します。仕様書や要件が明確にあり、実装可能なタスクに分解する必要がある場合に利用してください。タスクが大きすぎて着手しづらい場合、スコープを見積もる必要がある場合、または並列で作業を進められる場合に活用できます。
docx
このスキルは、ユーザーがWord文書(.docxファイル)を作成、読み込み、編集、操作したいときに使用します。以下の場合に実行してください:「Word文書」「.docx」などの記述、または目次・見出し・ページ番号・レターヘッドなどのフォーマットを含む専門的な文書の作成リクエスト。また、.docxファイルのコンテンツ抽出・再編成、文書への画像挿入・置換、Word形式での検索置換、変更履歴やコメント機能の使用、コンテンツを整形したWord文書への変換の場合も対象です。ユーザーが「レポート」「メモ」「手紙」「テンプレート」などの成果物をWord形式または.docxファイルで求める場合はこのスキルを使用してください。PDF、スプレッドシート、Google Docs、文書作成と無関係なコーディングタスクには使用しないでください。
idea-refine
アイデアを反復的に改善します。構造化された発散的思考と収束的思考を通じて、アイデアを洗練させることができます。「idea-refine」または「ideate」を使用してトリガーします。