如何在Nanobot中使用CapSolver解决验证码

Anh Tuan
Data Science Expert
26-Feb-2026

当你的AI助手自动化网络任务时,CAPTCHAs是最大的障碍。受保护的页面无法提交,登录流程停滞,整个自动化流程都会停止等待人工干预。
Nanobot 是一个超轻量级的个人AI助手框架,你可以在自己的硬件上运行。它连接你已经使用的渠道——WhatsApp、Telegram、Discord、Slack、Email等,并附带一个内置的 exec 工具,使代理能够自主编写和运行脚本。
CapSolver 提供一个AI驱动的CAPTCHA解决API。通过将Nanobot的脚本执行功能与CapSolver的REST API结合,你的代理可以检测CAPTCHA、解决它们、注入令牌并提交表单——完全无需人工干预。
最棒的是?你只需用自然语言告诉代理你想做什么。 它会编写一个Playwright脚本,提取站点密钥,调用CapSolver,注入令牌,并提交表单——全部自主完成。
什么是 Nanobot?
Nanobot 是一个由约3,500行核心Python代码构成的个人AI助手框架。它设计为轻量级、可扩展且可自托管。

核心功能
- 多渠道收件箱:通过WhatsApp、Discord、Telegram、Slack、Email、QQ等与你的AI进行交流
- 内置工具:代理可以读写文件、执行shell命令、搜索网络、获取页面、跨渠道发送消息,并启动后台任务
- 供应商无关:支持Anthropic、OpenAI、DeepSeek、Gemini、Qwen、Moonshot、Zhipu、Groq、vLLM以及OpenRouter等网关供应商
- 本地优先:在你自己的硬件上运行——你的数据将保留在你这边
- 记忆系统:每日笔记和长期记忆,可在对话间持续存在
- 技能系统:通过预装或自定义技能扩展功能,以完成专业任务
exec 工具
Nanobot的 exec 工具使浏览器自动化成为可能。代理可以运行任何shell命令,包括控制无头浏览器的Node.js脚本。当你要求代理与网页交互时,它会:
- 编写一个Playwright脚本
- 通过
exec工具执行它 - 读取输出和截图
- 通过聊天渠道将结果报告给你
可以将其视为给予AI助手完整的命令行访问权限——它可以从自然语言指令中安装工具、编写脚本并执行它们。
什么是 CapSolver?
CapSolver 是一个领先的CAPTCHA解决服务,提供AI驱动的解决方案以绕过各种CAPTCHA挑战。它支持多种CAPTCHA类型和快速响应时间,可无缝集成到自动化工作流中。
支持的CAPTCHA类型
- reCAPTCHA v2(基于图像和隐形)
- reCAPTCHA v3 & v3 Enterprise
- Cloudflare Turnstile
- Cloudflare 5秒挑战
- AWS WAF CAPTCHA
- 其他广泛使用的CAPTCHA和反机器人机制
为什么 Nanobot 的方法不同
大多数CAPTCHA解决集成分为两种:代码级API集成,你需要编写专用的服务类,或者浏览器扩展,其中Chrome扩展在后台处理一切。Nanobot采用第三种方法:代理驱动的API集成。
AI代理会自主协调整个解决流程——编写Playwright脚本,提取站点密钥,调用CapSolver API,并注入解决方案令牌——全部通过它即时编写的脚本执行。
| 浏览器扩展方法 | Nanobot的代理驱动方法 |
|---|---|
| 需要安装Chrome扩展 | 无需扩展——只需API密钥 |
| 需要兼容的Chrome版本 | 适用于任何无头浏览器 |
| 扩展自动检测CAPTCHA | 代理从页面DOM中提取站点密钥 |
| 扩展在后台调用API | 代理直接调用CapSolver REST API |
| 需要显示设备(服务器上使用Xvfb) | 完全无头运行,无需显示设备 |
关键洞察:Nanobot的代理无需浏览器扩展,因为它可以编程调用CapSolver API,从页面DOM中提取站点密钥,并注入解决方案令牌——全部通过它通过 exec 工具执行的Playwright脚本。这可以在完全无头环境中运行,无需任何显示设置。
前提条件
注意:以下示例在 Ubuntu 22.04 / 24.04 上进行测试。命令使用
apt和bash——如需请根据你的发行版进行调整。
在设置集成之前,请确保你已准备好:
- Ubuntu 22.04+(或任何基于Debian的Linux——其他发行版可以使用等效包)
- 安装 Python 3.11+(
sudo apt install python3 python3-pip python3-venv) - 安装并运行 Nanobot(
pip install nanobot-ai或pip install -e ".[dev]") - 一个 CapSolver账户 和API密钥(立即注册)
- 安装 Node.js 18+(用于运行Playwright脚本)
- 在你的工作区中安装 Playwright
分步设置
步骤1:安装 Nanobot
bash
# 从PyPI安装
pip install nanobot-ai
# 或从源码安装用于开发
git clone https://github.com/HKUDS/nanobot.git
cd nanobot
pip install -e ".[dev]"
# 初始化配置和工作区
nanobot onboard
步骤2:设置你的 CapSolver API 密钥
将你的CapSolver API密钥作为环境变量添加:
bash
export CAPSOLVER_API_KEY="CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
你可以从你的 CapSolver仪表板 获取API密钥。
对于持久化配置,将其添加到你的shell配置文件(~/.bashrc 或 ~/.zshrc)中。
步骤3:安装浏览器自动化工具
在Ubuntu上安装Playwright及其系统依赖:
bash
# 安装Playwright浏览器依赖(Ubuntu)
sudo apt install -y libnss3 libatk-bridge2.0-0 libdrm2 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libasound2t64
# 在你的Nanobot工作区中安装Playwright
cd ~/.nanobot/workspace
npm init -y
npm install playwright
npx playwright install chromium
步骤4:启动网关
bash
# 启动渠道服务(Telegram、Discord等)
nanobot gateway
# 或用于交互式测试
nanobot agent
步骤5:验证设置
通过任何连接的渠道向代理发送测试消息:
你有哪些可用的工具?
代理应列出 exec 工具——这就是它运行浏览器自动化脚本的方式。
内置的 CapSolver 技能
Nanobot 包含一个内置的 capsolver 技能,该技能会始终加载到代理的系统提示中。这意味着每次消息中,代理已经拥有正确的 CapSolver API 文档、任务类型、代码模式和执行说明——它不需要猜测或查找。
Nanobot 中的技能是如何工作的
技能是位于 nanobot/skills/{name}/SKILL.md 的markdown文件,带有YAML frontmatter。当在元数据中设置 always: true 时,技能内容会自动注入到代理的系统提示中。代理不需要调用 read_file——它直接知道。
技能文件(nanobot/skills/capsolver/SKILL.md)
要安装该技能,请创建文件 nanobot/skills/capsolver/SKILL.md,内容如下:
markdown
---
name: capsolver
description: "使用 Playwright 通过 CapSolver REST API 解决 CAPTCHA。支持 reCAPTCHA v2、reCAPTCHA v3 和 Cloudflare Turnstile。用于自动化表单提交或页面交互时遇到 CAPTCHA 挑战的情况。"
metadata: {"nanobot":{"emoji":"🔓","always":true,"requires":{"bins":["node"],"env":["CAPSOLVER_API_KEY"]}}}
---
# CapSolver
## 重要:必须执行
当用户要求你解决CAPTCHA时,你**必须立即调用工具**。不要用“正在运行...”或“我将开始...”或“我已经启动自动化...”等文本回复。
你的**第一步操作**必须是:
1. 调用 `write_file` 保存一个Node.js脚本,然后调用 `exec` 运行它
2. 调用 `spawn` 并提供详细任务描述用于后台执行
如果仅用文本回复而没有工具调用,用户将看不到任何操作。始终执行。
## API端点
- **创建任务**: `POST https://api.capsolver.com/createTask`
- **获取结果**: `POST https://api.capsolver.com/getTaskResult`
## 任务类型
| CAPTCHA | 任务类型 | 站点密钥位置 |
|---|---|---|
| reCAPTCHA v2 | `ReCaptchaV2TaskProxyLess` | `data-sitekey` 属性 |
| reCAPTCHA v3 | `ReCaptchaV3TaskProxyLess` | `grecaptcha.execute` 调用或页面源代码 |
| Cloudflare Turnstile | `AntiTurnstileTaskProxyLess` | Turnstile div 的 `data-sitekey` |
企业版本:`ReCaptchaV2EnterpriseTaskProxyLess`、`ReCaptchaV3EnterpriseTaskProxyLess`。
## 工作流程
1. 使用Playwright(无头Chromium)导航到页面
2. 从DOM中提取站点密钥(`[data-sitekey]` 属性)
3. 使用站点密钥和页面URL调用 `createTask`
4. 每2秒轮询一次 `getTaskResult` 直到 `status: "ready"`
5. 将令牌注入页面(隐藏表单字段)
6. 提交表单
## 核心代码模式
```javascript
const CAPSOLVER_API_KEY = process.env.CAPSOLVER_API_KEY;
// 步骤1:创建任务
const createRes = await fetch('https://api.capsolver.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: CAPSOLVER_API_KEY,
task: {
type: 'ReCaptchaV2TaskProxyLess', // 或 ReCaptchaV3TaskProxyLess、AntiTurnstileTaskProxyLess
websiteURL: pageUrl,
websiteKey: siteKey
}
})
});
const { taskId } = await createRes.json();
// 步骤2:轮询结果
let token;
while (true) {
await new Promise(r => setTimeout(r, 2000));
const res = await fetch('https://api.capsolver.com/getTaskResult', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ clientKey: CAPSOLVER_API_KEY, taskId })
});
const result = await res.json();
if (result.status === 'ready') { token = result.solution.gRecaptchaResponse || result.solution.token; break; }
if (result.status === 'failed') throw new Error('解决失败');
}
// 步骤3:注入令牌(reCAPTCHA)
await page.evaluate((t) => {
document.querySelectorAll('textarea[name="g-recaptcha-response"]')
.forEach(el => { el.value = t; el.innerHTML = t; });
}, token);
```
对于Turnstile,令牌字段通常是 `input[name="cf-turnstile-response"]`,解决方案在 `result.solution.token` 中。
## 完整API参考
查看 `{baseDir}/references/api.md` 以获取所有任务类型的完整参数文档、可选字段和示例响应。
关键点:
always: true标志确保该技能在每次对话中加载——代理始终在上下文中拥有API文档requires字段会检查node是否安装和CAPSOLVER_API_KEY是否设置- “必须执行”部分防止代理仅描述它将做什么——它强制进行实际的工具调用
API参考(references/api.md)
该技能还包含一个完整的API参考,代理可以按需读取以获得详细参数文档。以下是它涵盖的内容:
reCAPTCHA v2
必需参数: type、websiteURL、websiteKey
可选参数: isInvisible(布尔值)、pageAction(字符串)、recaptchaDataSValue(字符串)、enterprisePayload(对象)、apiDomain(字符串)
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://www.google.com/recaptcha/api2/demo",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
"isInvisible": false
}
}
响应令牌:solution.gRecaptchaResponse → 注入到 textarea[name="g-recaptcha-response"] 中
reCAPTCHA v3
必需参数: type、websiteURL、websiteKey
可选参数: pageAction(字符串 —— 从 grecaptcha.execute(key, {action: "..."}) 中获取,常见值:login、submit、homepage)、enterprisePayload(对象)、apiDomain(字符串)
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": "https://www.example.com",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-",
"pageAction": "login"
}
}
响应令牌:solution.gRecaptchaResponse → 注入到 textarea[name="g-recaptcha-response"] 中
Cloudflare Turnstile
必需参数: type(AntiTurnstileTaskProxyLess)、websiteURL、websiteKey
可选参数: metadata.action(字符串 —— 从 data-action 属性获取)、metadata.cdata(字符串 —— 从 data-cdata 属性获取)
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": "https://www.example.com",
"websiteKey": "0x4XXXXXXXXXXXXXXXXX",
"metadata": {
"action": "login",
"cdata": "0000-1111-2222-3333-example-cdata"
}
}
}
响应令牌:solution.token → 注入到 input[name="cf-turnstile-response"] 中
典型解决时间
| CAPTCHA类型 | 解决时间 |
|---|---|
| reCAPTCHA v2 | 1-10秒 |
| reCAPTCHA v3 | 1-10秒 |
| Cloudflare Turnstile | 1-20秒 |
它是如何工作的
当你要求Nanobot与受CAPTCHA保护的页面交互时,后台会发生以下事情:
你的消息 Nanobot 代理
────────────────────────────────────────────────────
"前往该页面, ──► 代理接收消息
填写表单, │
解决CAPTCHA, ▼
并提交它" 代理编写自动化脚本
│
▼
exec 工具运行脚本
┌─────────────────────────────────┐
│ 无头Chromium │
│ │
│ 1. 导航到目标页面 │
│ 2. 从DOM中提取站点密钥 │
│ (data-sitekey 属性) │
│ │
│ 3. 调用 CapSolver REST API: │
│ POST /createTask │
│ POST /getTaskResult (轮询) │
│ │
│ 4. 将令牌注入隐藏的 │
│ 文本区域/输入字段 │
│ │
│ 5. 点击提交 │
│ 6. 验证成功 │
│ 7. 截图 │
└─────────────────────────────────┘
│
▼
Agent 读取输出 + 截图
│
▼
"表单提交成功!
页面显示:验证
成功... 太好了!"
CapSolver API 流程
集成的核心是两个 API 调用:
1. 创建任务 — 将 CAPTCHA 网站密钥和页面 URL 发送到 CapSolver:
javascript
const response = await fetch('https://api.capsolver.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: CAPSOLVER_API_KEY,
task: {
type: 'ReCaptchaV2TaskProxyLess',
websiteURL: pageUrl,
websiteKey: siteKey
}
})
});
2. 轮询结果 — 每隔 2 秒检查直到 CapSolver 返回解决的令牌:
javascript
const result = await fetch('https://api.capsolver.com/getTaskResult', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: CAPSOLVER_API_KEY,
taskId: taskId
})
});
// result.solution.gRecaptchaResponse 包含令牌
3. 注入令牌 — 将其设置在 reCAPTCHA 期望的隐藏表单字段中:
javascript
await page.evaluate((token) => {
const textarea = document.querySelector('textarea[name="g-recaptcha-response"]');
if (textarea) {
textarea.value = token;
textarea.innerHTML = token;
}
}, captchaToken);
完整工作示例
这是 Nanobot 的代理生成并执行的实际脚本,用于在 Google 示例页面上解决 reCAPTCHA。代理通过 write_file 编写此脚本,然后通过 exec 运行它——所有操作均通过一条 Discord 消息自主完成:
javascript
const { chromium } = require('playwright');
const https = require('https');
const CAPSOLVER_API_KEY = process.env.CAPSOLVER_API_KEY;
const PAGE_URL = 'https://www.google.com/recaptcha/api2/demo';
function httpsPost(url, data) {
return new Promise((resolve, reject) => {
const req = https.request(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
}, (res) => {
let body = '';
res.on('data', chunk => body += chunk);
res.on('end', () => resolve(JSON.parse(body)));
});
req.on('error', reject);
req.write(JSON.stringify(data));
req.end();
});
}
async function solveRecaptcha(siteKey, pageUrl) {
console.log('创建 Capsolver 任务...');
const createRes = await httpsPost('https://api.capsolver.com/createTask', {
clientKey: CAPSOLVER_API_KEY,
task: {
type: 'ReCaptchaV2TaskProxyLess',
websiteURL: pageUrl,
websiteKey: siteKey
}
});
const { taskId } = createRes;
console.log(`任务 ID: ${taskId}`);
let token;
while (true) {
await new Promise(r => setTimeout(r, 2000));
const res = await httpsPost('https://api.capsolver.com/getTaskResult', {
clientKey: CAPSOLVER_API_KEY,
taskId
});
if (res.status === 'ready') {
token = res.solution.gRecaptchaResponse;
console.log(`收到令牌!长度: ${token.length}`);
break;
}
if (res.status === 'failed') {
throw new Error('Capsolver 任务失败');
}
}
if (!token) throw new Error('未能获取令牌');
return token;
}
async function main() {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
console.log('导航到页面...');
await page.goto(PAGE_URL, { waitUntil: 'domcontentloaded', timeout: 30000 });
console.log('提取 sitekey...');
const siteKey = await page.locator('[data-sitekey]').getAttribute('data-sitekey');
console.log(`Sitekey: ${siteKey}`);
console.log('使用 Capsolver 解决 reCAPTCHA...');
const token = await solveRecaptcha(siteKey, PAGE_URL);
console.log('注入令牌...');
await page.evaluate((t) => {
document.querySelectorAll('textarea[name="g-recaptcha-response"]')
.forEach(el => { el.value = t; el.innerHTML = t; });
}, token);
console.log('提交表单...');
await page.locator('input[type="submit"]').click();
console.log('等待结果...');
await page.waitForTimeout(3000);
const successText = await page.textContent('body');
if (successText.includes('Success') || successText.includes('Verification')) {
console.log('\n✅ 成功!reCAPTCHA 已解决且表单提交成功!');
console.log('成功消息:', successText.slice(0, 200));
} else {
console.log('\n❌ 结果不明确。页面内容:', successText.slice(0, 300));
}
await page.screenshot({ path: 'recaptcha_result.png' });
console.log('截图已保存到 recaptcha_result.png');
await browser.close();
}
main().catch(console.error);
运行它:
bash
CAPSOLVER_API_KEY=CAP-XXX node solve_recaptcha.js
如何与 Nanobot 一起使用
一旦设置完成,使用 CapSolver 与 Nanobot 非常简单,只需发送一条消息即可。
示例 1:解决 reCAPTCHA 示例
通过 Telegram、Discord、WhatsApp 或任何连接的渠道发送以下消息给您的代理:
转到 https://www.google.com/recaptcha/api2/demo 并使用 CapSolver API 解决 reCAPTCHA,
然后提交表单并告诉我是否成功。
会发生什么:
- 代理会编写一个 Playwright 脚本
- 脚本会导航到页面并从 DOM 中提取 reCAPTCHA sitekey
- 它会使用 sitekey 调用 CapSolver 的
createTaskAPI - 每隔 2 秒轮询
getTaskResult直到令牌就绪(约 18 秒) - 它会将令牌注入隐藏的
g-recaptcha-response字段 - 它会点击提交并检查是否成功
- 代理会返回消息:"表单提交成功!页面显示:验证成功... 太好了!"
示例 2:登录受保护的网站
转到 https://example.com/login,用
"[email protected]" 填写电子邮件和 "mypassword" 填写密码,检测并
解决页面上的任何 CAPTCHA,然后点击登录并告诉我发生了什么。
示例 3:提交联系表单
打开 https://example.com/contact,填写姓名、电子邮件和
消息字段,解决 CAPTCHA,提交表单,并告诉我确认消息。
为什么这有效
因为 Nanobot 的代理具有:
exec工具 — 运行任何 shell 命令,包括 Node.js 脚本web_fetch工具 — 获取页面内容以了解页面结构- 文件工具 — 可以编写、编辑和读取自动化脚本
- 记忆 — 记住有效的解决方案以供未来任务使用
- 内置的
capsolver技能 — 始终加载到代理的上下文中(参见上面的 内置的 CapSolver 技能),包括任务类型、代码模式、API 参考和执行说明,确保代理编写并运行脚本,而不仅仅是描述它会做什么
幻觉重试:确保代理执行
LLM 驱动的代理的一个挑战是,某些模型会返回文本如 "正在运行自动化..." 而没有实际调用任何工具。用户看到的消息听起来像有进展,但后台没有任何操作。
Nanobot 通过代理循环中的 幻觉重试机制 解决了这个问题。当 LLM 在第一次迭代中返回文本且该文本包含像 "现在运行"、"我已经开始" 或 "正在执行" 这样的动作短语时——但没有调用任何工具——Nanobot 会检测到并自动发送纠正提示:
"您描述了开始任务但没有调用任何工具。除非您使用 exec、write_file 或 spawn 等工具,否则用户无法看到您的进度。请现在调用适当的工具。"
LLM 然后会重试并调用实际的工具(例如,spawn 来启动后台自动化任务)。这会透明地发生——用户只会看到结果在几秒后出现。
这是 Nanobot 的通用功能,提高了所有工具使用任务的可靠性,而不仅仅是 CAPTCHA 解决。结合 CapSolver 技能的明确执行说明,它确保代理始终采取行动,而不仅仅是描述它会做什么。
推荐的代码更改
为了启用幻觉重试和其他可靠性改进,请对您的 Nanobot 安装进行以下三个更改:
1. 幻觉重试 (nanobot/agent/loop.py)
在 _process_message 方法中,替换处理无工具调用响应的 else 分支:
python
else:
# 无工具调用 — 但检查 LLM 是否出现幻觉
if iteration == 1 and self._seems_like_hallucinated_action(response.content):
logger.warning("LLM 描述了动作但没有调用工具 — 重试以进行纠正")
messages.append({"role": "assistant", "content": response.content})
messages.append({
"role": "user",
"content": (
"[System: 您描述了开始任务但没有调用任何工具。除非您使用 exec、"
"write_file 或 spawn 等工具,否则用户无法看到您的进度。请现在调用适当的工具以"
"实际执行任务。]"
),
})
continue
final_content = response.content
break
并向 AgentLoop 类添加此检测方法:
python
@staticmethod
def _seems_like_hallucinated_action(content: str | None) -> bool:
"""检测 LLM 是否描述了动作但没有调用工具。"""
if not content:
return False
lower = content.lower()
phrases = [
"running now", "i've started", "i'll start", "starting the",
"i've begun", "i'll begin", "executing now", "i'm working on",
"let me run", "running the", "i've kicked off", "launched the",
"i've initiated", "working on it",
]
return any(phrase in lower for phrase in phrases)
2. 子代理中的技能 (nanobot/agent/subagent.py)
没有此更改,通过 spawn 工具生成的子代理不会在其上下文中拥有 capsolver 技能。添加导入并注入始终加载的技能到子代理提示中:
python
# 添加导入
from nanobot.agent.skills import SkillsLoader
# 在 __init__ 中添加:
self._skills = SkillsLoader(workspace)
# 在 _build_subagent_prompt() 的末尾,返回前添加:
always_skills = self._skills.get_always_skills()
if always_skills:
skills_content = self._skills.load_skills_for_context(always_skills)
if skills_content:
prompt += f"\n\n## 参考文档\n\n{skills_content}"
return prompt
3. Exec 超时 (nanobot/config/schema.py)
浏览器自动化脚本需要超过默认的 60 秒——CapSolver 轮询本身可能需要 20+ 秒。增加超时时间:
python
class ExecToolConfig(BaseModel):
"""Shell exec 工具配置。"""
timeout: int = 120 # 原为 60
应用这些更改后,重启 Nanobot(pm2 restart nanobot 或重新运行服务)。
性能结果
我们在 Google 的 reCAPTCHA v2 示例页面上测试了该集成。以下是我们的演示运行的实际结果:
| 指标 | 值 |
|---|---|
| 代理思考 + 脚本生成 | 约 10 秒 |
| 脚本执行(总时间) | 约 34 秒 |
页面加载(domcontentloaded) |
约 2 秒 |
| sitekey 提取 | < 1 秒 |
| CAPTCHA 解决(CapSolver API) | 约 20 秒 |
| 令牌注入 + 表单提交 | 约 3 秒 |
| 成功验证 + 截图 | 约 3 秒 |
| 端到端(消息 → 响应) | 约 45 秒 |
| 结果 | 验证成功 |
代理保存了最终截图(recaptcha_result.png),显示表单提交后的成功页面。
故障排除
"无法找到模块 'playwright'"
Playwright 未在工作区中安装。运行:
bash
cd ~/.nanobot/workspace && npm install playwright && npx playwright install chromium
Ubuntu 上缺少浏览器库
如果 Chromium 启动失败并出现关于缺少共享库的错误,请安装系统依赖项:
bash
sudo apt install -y libnss3 libatk-bridge2.0-0 libdrm2 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libasound2t64
CAPTCHA 解决超时
- 检查您的 CapSolver API 密钥是否有效
- 在 capsolver.com/dashboard 检查您的 CapSolver 账户余额
- 脚本会每隔 2 秒轮询直到 CapSolver 返回
ready或failed— 如果卡住,请检查您的 API 密钥和余额
未找到 sitekey
脚本从 reCAPTCHA DOM 元素的 data-sitekey 属性中提取 sitekey。如果未找到带有 data-sitekey 的元素,页面可能以其他方式嵌入密钥——代理可以编写修改后的脚本以从 iframe URL 或页面源中提取它。
浏览器在 Docker/容器中崩溃
将以下标志添加到 Playwright 的启动选项中:
javascript
chromium.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage']
});
代理未使用 CapSolver
确保在启动 Nanobot 之前设置了 CAPSOLVER_API_KEY 环境变量。代理会在脚本运行时检查它。
最佳实践
1. 将 API 密钥设置为环境变量
不要在脚本中硬编码密钥。使用 process.env.CAPSOLVER_API_KEY 以便代理可以自动获取。
2. 在服务器上使用无头模式
Nanobot 的基于 API 的方法在 完全无头环境 中工作——不需要 Xvfb 或虚拟显示。这是对基于扩展的方法的重大优势。
3. 监控您的 CapSolver 余额
每个CAPTCHA解决需要消耗积分。请定期在capsolver.com/dashboard查看您的余额。
4. 保持Playwright更新
CAPTCHA服务商在不断进化。保持Playwright和Chromium更新以避免被检测到:
bash
cd ~/.nanobot/workspace && npm update playwright && npx playwright install chromium
结论
Nanobot + CapSolver集成与基于扩展的CAPTCHA解决方法有根本性区别。不是加载Chrome扩展,AI代理本身协调整个解决流程:
- 使用Playwright导航到目标页面
- 从
data-sitekey属性中提取站点密钥 - 通过直接调用CapSolver的REST API进行解决
- 将解决方案令牌注入隐藏表单字段
- 提交表单并验证成功
这为您带来以下优势:
- 无需Chrome扩展依赖 — 可与任何无头浏览器配合使用
- 无头服务器支持 — 无需显示或Xvfb
- 自然语言控制 — 只需告诉代理您想完成什么
准备好开始了吗? 注册CapSolver 并使用优惠码 NANOBOT 在首次充值时获得额外6%的奖励!

FAQ
Nanobot如何与浏览器扩展不同解决CAPTCHA?
Nanobot直接使用CapSolver的REST API。代理会编写并执行调用createTask和getTaskResult的脚本以获取解决方案令牌,然后将其注入页面DOM。无需浏览器扩展。
是否需要特殊的Chrome版本?
不需要。与需要Chrome for Testing的扩展方法不同(因为品牌Chrome 137+禁用了扩展加载),Nanobot可与任何Chromium构建配合使用 — 包括Playwright的内置Chromium、标准Chromium包,甚至无头Chrome。
CapSolver支持哪些CAPTCHA类型?
CapSolver支持reCAPTCHA v2(复选框和不可见)、reCAPTCHA v3、Cloudflare Turnstile、AWS WAF CAPTCHA等。我们使用ReCaptchaV2TaskProxyLess任务类型对Nanobot集成进行了reCAPTCHA v2测试。对于其他CAPTCHA类型,代理可以使用适当的CapSolver任务类型编写脚本 — 详见CapSolver文档获取完整列表。
能否在无头服务器上使用?
可以 — 这正是Nanobot方法的优势所在。由于没有涉及浏览器扩展,您无需Xvfb或虚拟显示。Playwright默认即可在完全无头模式下运行。
CapSolver的费用是多少?
CapSolver根据CAPTCHA类型和数量提供具有竞争力的定价。访问capsolver.com查看当前定价。
Nanobot是免费的吗?
Nanobot是开源的,可在自己的硬件上免费运行。您需要所选AI模型提供商的API密钥,以及CapSolver账户和积分用于CAPTCHA解决。
CAPTCHA解决需要多长时间?
在我们的reCAPTCHA v2测试中,CapSolver API在约20秒内返回解决方案。代理每2秒轮询一次,一旦令牌就绪就会继续。总脚本执行时间(导航+解决+注入+提交)为约34秒,从消息到响应的完整端到端时间(包括代理编写脚本)约为45秒。
合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。
更多

如何在Nanobot中使用CapSolver解决验证码
使用 Nanobot 和 CapSolver 自动化验证码解决。使用 Playwright 自主解决 reCAPTCHA 和 Cloudflare。

Anh Tuan
26-Feb-2026

数据即服务(DaaS):它是什么以及为何在2026年重要
了解2026年的数据即服务(DaaS)。探索其优势、应用场景以及如何通过实时洞察和可扩展性改变企业。

Rajinder Singh
12-Feb-2026

如何在RoxyBrowser中通过CapSolver集成解决验证码
将 CapSolver 与 RoxyBrowser 集成,以自动化浏览器任务并绕过 reCAPTCHA、Turnstile 及其他验证码。

Ethan Collins
04-Feb-2026

在 Node.js 中进行网页爬虫:使用 Node Unblocker 和 CapSolver
掌握Node.js中的网络爬虫技术,利用Node Unblocker绕过限制,并使用CapSolver解决CAPTCHAs。本指南提供高效且可靠的数据提取进阶策略。

Lucas Mitchell
04-Feb-2026

如何在EasySpider中通过CapSolver集成解决验证码
EasySpider 是一个可视化、无代码的网页抓取和浏览器自动化工具,当与 CapSolver 结合使用时,它可以可靠地解决 reCAPTCHA v2 和 Cloudflare Turnstile 等验证码,从而实现在网站间无缝的自动化数据提取。

Emma Foster
04-Feb-2026

如何在 Relevance AI 中通过 CapSolver 集成解决 reCAPTCHA v2
使用CapSolver构建一个Relevance AI工具来解决reCAPTCHA v2。通过API自动完成表单提交,无需浏览器自动化。

Ethan Collins
03-Feb-2026

