如何使用Node.js/TypeScript+pnpm的Playwright绕过reCAPTCHA?
解决Playwright提交带reCAPTCHA表单的错误及依赖安装问题
一、先解决playwright-recaptcha-solver安装失败的问题
如果用pnpm/npm直接安装报错,试试这些办法:
- 临时关闭严格依赖检查:执行
pnpm install playwright-recaptcha-solver --strict-peer-dependencies false,部分依赖冲突问题能缓解 - 手动克隆源码安装:
- 把仓库源码克隆到本地项目的
./packages/playwright-recaptcha-solver目录 - 进入该目录执行
pnpm install安装依赖 - 在项目的
package.json中添加本地依赖:"playwright-recaptcha-solver": "file:./packages/playwright-recaptcha-solver"
- 把仓库源码克隆到本地项目的
- 查仓库Issues:看看该库有没有未修复的安装bug,或者其他用户分享的临时修复方案
二、替代方案:绕过reCAPTCHA的其他方法
1. 使用第三方验证码服务(推荐)
像2Captcha、DeathByCaptcha这类服务提供API接口,能自动识别reCAPTCHA并返回验证token,直接填充到页面即可。示例TypeScript代码:
import { chromium } from 'playwright'; import TwoCaptcha from '2captcha'; const solver = new TwoCaptcha('你的API密钥'); (async () => { const browser = await chromium.launch({ headless: 'new' }); const page = await browser.newPage(); await page.goto('目标表单URL'); // 获取reCAPTCHA的site key const siteKey = await page.getAttribute('iframe[src*="recaptcha"]', 'data-sitekey'); if (!siteKey) throw new Error('未找到reCAPTCHA site key'); // 调用API求解 const solveResult = await solver.recaptcha(siteKey, page.url()); // 填充验证token到页面 await page.evaluate((token) => { const responseEl = document.getElementById('g-recaptcha-response'); if (responseEl) { responseEl.innerHTML = token; // 触发reCAPTCHA的验证回调 window.grecaptcha?.execute(); } }, solveResult.data); // 提交表单 await page.click('button[type="submit"]'); await browser.close(); })();
2. 模拟人类行为降低检测风险
reCAPTCHA会识别自动化工具的特征,调整Playwright配置让行为更接近真实用户:
- 用新版无头模式:
await chromium.launch({ headless: 'new' }),比旧版无头更难被检测 - 增加随机操作延迟:在点击、输入等操作前加
await page.waitForTimeout(Math.random() * 1200 + 600); - 设置真实用户代理:从你的Chrome/Firefox复制UA字符串,用
await page.setUserAgent('你的UA字符串') - 启用浏览器权限:创建上下文时添加权限,比如
const context = await browser.newContext({ permissions: ['geolocation'] });
3. 申请测试环境白名单
如果是测试自己开发的网站,直接找管理员添加测试IP白名单,或者搭建跳过reCAPTCHA的测试环境,这是最合规且稳定的办法
注意事项
- 绕过reCAPTCHA可能违反目标网站的服务条款,使用前务必确认合规性
- 第三方验证码服务需要付费,且存在被网站检测到的风险
内容的提问来源于stack exchange,提问作者devlife
相关产品推荐
相关产品推荐

