playwright-bot-bypass by greekr4/playwright-bot-bypass
npx skills add https://github.com/greekr4/playwright-bot-bypass --skill playwright-bot-bypass使用 rebrowser-playwright 配合隐身技术绕过机器人检测系统。此方法成功通过了 bot.sannysoft.com 等机器人检测测试,并能在具有激进机器人防护的网站(如 Google、Cloudflare 等)上实现自动化。
标准 Playwright/Puppeteer 暴露了多种自动化特征:
| 检测点 | 标准 Playwright | 本解决方案 |
|---|---|---|
| WebDriver 属性 | navigator.webdriver = true | 已移除 |
| WebGL 渲染器 | SwiftShader(软件) | 真实 GPU(Apple M2 等) |
| 用户代理 | 包含 "HeadlessChrome" | 干净的 Chrome UA |
| Chrome 运行时 | 缺少属性 | 完整的 chrome.runtime |
npm install rebrowser-playwright
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
import { chromium } from 'rebrowser-playwright';
const browser = await chromium.launch({
headless: false,
channel: 'chrome' // 使用真实的 Chrome 浏览器
});
const context = await browser.newContext();
// 移除 WebDriver 属性
await context.addInitScript(() => {
delete Object.getPrototypeOf(navigator).webdriver;
});
const page = await context.newPage();
await page.goto('https://example.com');
可直接替换 playwright,用于修补自动化检测:
navigator.webdriver 属性是最常见的检测方法:
await context.addInitScript(() => {
delete Object.getPrototypeOf(navigator).webdriver;
});
始终使用 channel: 'chrome' 来启动用户已安装的 Chrome:
chromium.launch({
headless: false,
channel: 'chrome'
});
查看 examples/stealth-google-search.mjs 获取一个完整的工作示例,该示例:
在 https://bot.sannysoft.com 验证绕过效果:
node scripts/bot-detection-test.mjs
所有项目都应显示为绿色(通过)。
scripts/bot-detection-test.mjs - 测试机器人检测状态scripts/stealth-template.mjs - 可复用的隐身浏览器模板examples/stealth-google-search.mjs - 无需验证码的 Google 搜索examples/ab-test.mjs - 并排比较被检测与隐身模式examples/stealth-twitter-scrape.mjs - 无需登录的 Twitter/X 个人资料抓取headless: false(有头模式)channel: 'chrome')Python 的 playwright-stealth 无法完全绕过机器人检测。
| 环境 | bot.sannysoft.com | Google 搜索 |
|---|---|---|
| Node.js rebrowser-playwright | ✅ 通过 | ✅ 有效 |
| Python playwright-stealth | ✅ 通过 | ❌ 出现验证码 |
为什么?
rebrowser-playwright:Chromium 二进制级别补丁 → 使用真实 GPUplaywright-stealth:仅 JavaScript 级别补丁 → SwiftShader 暴露undetected-chromedriver 在 Python 中完全绕过机器人检测!
| 库 | bot.sannysoft.com | Google 搜索 |
|---|---|---|
| playwright-stealth | ✅ 通过 | ❌ 出现验证码 |
| undetected-chromedriver | ✅ 通过 | ✅ 有效! |
pip install undetected-chromedriver
import undetected_chromedriver as uc
# 在 chrome://version 检查你的 Chrome 版本
driver = uc.Chrome(version_main=133)
driver.get("https://www.google.com")
search_box = driver.find_element("name", "q")
search_box.send_keys("your search query")
search_box.submit()
version_mainchrome://version对于 Electron/Node.js 应用,可以从 Python 调用 Node.js 脚本:
import subprocess
result = subprocess.run(['node', 'stealth-script.mjs', query], capture_output=True)
rebrowser-playwright,而不是 playwrightchannel: 'chrome' 已设置addInitScript 在导航前运行# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --version
# Linux
google-chrome --version
这在使用常规 playwright 时会发生。确认导入来自 rebrowser-playwright:
// 正确
import { chromium } from 'rebrowser-playwright';
// 错误 - 会被检测到
import { chromium } from 'playwright';
每周安装量
312
仓库
GitHub 星标数
137
首次出现
2026年1月29日
安全审计
安装于
opencode253
gemini-cli248
openclaw240
codex240
github-copilot232
kimi-cli226
Bypass bot detection systems using rebrowser-playwright with stealth techniques. This approach successfully passes bot detection tests like bot.sannysoft.com and enables automation on sites with aggressive bot protection (Google, Cloudflare, etc.).
Standard Playwright/Puppeteer exposes several automation signatures:
| Detection Point | Standard Playwright | This Solution |
|---|---|---|
| WebDriver property | navigator.webdriver = true | Removed |
| WebGL Renderer | SwiftShader (software) | Real GPU (Apple M2, etc.) |
| User Agent | Contains "HeadlessChrome" | Clean Chrome UA |
| Chrome runtime | Missing properties | Complete chrome.runtime |
npm install rebrowser-playwright
import { chromium } from 'rebrowser-playwright';
const browser = await chromium.launch({
headless: false,
channel: 'chrome' // Use real Chrome browser
});
const context = await browser.newContext();
// Remove WebDriver property
await context.addInitScript(() => {
delete Object.getPrototypeOf(navigator).webdriver;
});
const page = await context.newPage();
await page.goto('https://example.com');
Drop-in replacement for playwright that patches automation detection:
The navigator.webdriver property is the most common detection method:
await context.addInitScript(() => {
delete Object.getPrototypeOf(navigator).webdriver;
});
Always use channel: 'chrome' to launch the user's installed Chrome:
chromium.launch({
headless: false,
channel: 'chrome'
});
See examples/stealth-google-search.mjs for a complete working example that:
Verify bypass effectiveness at https://bot.sannysoft.com:
node scripts/bot-detection-test.mjs
All items should show green (passed).
scripts/bot-detection-test.mjs - Test bot detection statusscripts/stealth-template.mjs - Reusable stealth browser templateexamples/stealth-google-search.mjs - Google search without CAPTCHAexamples/ab-test.mjs - Compare detected vs stealth side-by-sideexamples/stealth-twitter-scrape.mjs - Twitter/X profile scraping without loginheadless: false (headed mode)channel: 'chrome')Pythonplaywright-stealth cannot fully bypass bot detection.
| Environment | bot.sannysoft.com | Google Search |
|---|---|---|
| Node.js rebrowser-playwright | ✅ Pass | ✅ Works |
| Python playwright-stealth | ✅ Pass | ❌ CAPTCHA |
Why?
rebrowser-playwright: Chromium binary-level patch → uses real GPUplaywright-stealth: JavaScript-level patch only → SwiftShader exposedundetected-chromedriver fully bypasses bot detection in Python!
| Library | bot.sannysoft.com | Google Search |
|---|---|---|
| playwright-stealth | ✅ Pass | ❌ CAPTCHA |
| undetected-chromedriver | ✅ Pass | ✅ Works! |
pip install undetected-chromedriver
import undetected_chromedriver as uc
# Check your Chrome version at chrome://version
driver = uc.Chrome(version_main=133)
driver.get("https://www.google.com")
search_box = driver.find_element("name", "q")
search_box.send_keys("your search query")
search_box.submit()
version_main matching your Chrome versionchrome://versionFor Electron/Node.js apps, call Node.js script from Python:
import subprocess
result = subprocess.run(['node', 'stealth-script.mjs', query], capture_output=True)
rebrowser-playwright, not playwrightchannel: 'chrome' is setaddInitScript runs before navigation# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --version
# Linux
google-chrome --version
This happens with regular playwright. Confirm import is from rebrowser-playwright:
// Correct
import { chromium } from 'rebrowser-playwright';
// Wrong - will be detected
import { chromium } from 'playwright';
Weekly Installs
312
Repository
GitHub Stars
137
First Seen
Jan 29, 2026
Security Audits
Gen Agent Trust HubWarnSocketPassSnykWarn
Installed on
opencode253
gemini-cli248
openclaw240
codex240
github-copilot232
kimi-cli226
通过 LiteLLM 代理让 Claude Code 对接 GitHub Copilot 运行 | 高级变通方案指南
22,200 周安装
Docassemble 表单构建器技能 - 创建智能动态问卷与文档生成工具
257 周安装
Fastify TypeScript 生产级后端框架指南:高性能 Node.js Web 开发与 JSON 模式验证
257 周安装
AI 演示文稿生成器 | 一键创建专业幻灯片,支持 Marp 格式输出
257 周安装
Mapbox搜索模式指南:地理编码、POI搜索与位置发现最佳实践
257 周安装
Zustand适配器:为json-render提供状态管理后端,支持嵌套切片与Zustand v5+
257 周安装
Blender MCP 插件使用指南:3D 场景自动化与 Python 脚本控制教程
257 周安装