
Emma Foster
Machine Learning Engineer

AI驱动的网页浏览代理正在改变我们与互联网的互动方式。它们可以浏览页面、填写表单、提取数据并完成多步骤工作流——只需简单的文本指令即可。但有一个障碍会阻止每个代理的运行:验证码。
OpenBrowser 是一个自主的网页浏览框架,它使像 GPT-4o、Claude 和 Gemini 这样的 AI 模型能够直接控制真实浏览器。它功能强大,但一旦遇到受验证码保护的页面,代理就会停滞。
CapSolver 完全消除了这个问题。通过将 CapSolver Chrome 扩展加载到 OpenBrowser 的启动配置文件中,验证码会在后台自动检测并解决——无需 API 集成、无需注入令牌代码,也无需更改您的代理逻辑。
最棒的是?您的 AI 代理永远不需要知道验证码的存在。 扩展会在浏览器级别处理检测、解决和令牌注入。当代理点击提交时,验证码已经解决了。
OpenBrowser 是一个基于 TypeScript 和 Playwright 构建的 AI 自主网页浏览框架。它为大型语言模型提供对真实 Chromium 浏览器的直接、沙盒化控制——将任何 LLM 转换为具有网页功能的代理。
OpenBrowser 为 AI 模型提供了网页上的“眼睛和双手”。但验证码仍然是一个盲点。代理可以看到页面、读取表单字段并点击按钮——但它无法解决 reCAPTCHA 挑战或 Turnstile 小部件。这就是 CapSolver 的作用。
CapSolver 是一个领先的验证码解决服务,提供人工智能驱动的解决方案以绕过各种验证码挑战。支持多种验证码类型和快速响应时间,CapSolver 可无缝集成到自动化工作流中。
大多数验证码解决集成需要您编写代码——创建 API 调用、轮询结果、将令牌注入隐藏表单字段。这就是使用 Crawlee、Puppeteer 或 Playwright 等工具的工作方式。
OpenBrowser + CapSolver 根本不同:
| 传统(基于代码) | OpenBrowser(基于扩展) |
|---|---|
编写 CapSolverService 类 |
添加扩展并添加一个显式的 Chrome 允许列表参数 |
调用 createTask() / getTaskResult() |
扩展处理整个生命周期 |
通过 page.$eval() 注入令牌 |
令牌在浏览器级别自动注入 |
| 在代码中处理错误、重试、超时 | 扩展内部重试 |
| 每种验证码类型需要不同的代码 | 自动支持所有类型 |
| 与您的代理逻辑紧密耦合 | 零耦合——代理对验证码一无所知 |
关键洞察:CapSolver Chrome 扩展在 OpenBrowser 的 Playwright 浏览器上下文中运行。当代理导航到包含验证码的页面时,扩展会检测到它,在后台解决它,并注入令牌——在代理尝试提交表单之前。
您只需给予它时间。 不需要编写验证码处理代码,您只需在代理流程中添加一个简短的等待时间:
// 代理等待,然后提交——CapSolver 处理其余部分
await page.waitForTimeout(30_000);
await page.click('button[type="submit"]');
就是这样。没有验证码逻辑。没有 API 调用。没有令牌注入。
在设置集成之前,请确保您已满足以下条件:
npm install openbrowser 或从 GitHub 克隆)Google Chrome 137+(2025 年中发布)在品牌版本中默默地移除了对
--load-extension的支持。 这意味着在使用标准 Google Chrome 的自动化会话中无法加载 Chrome 扩展。没有任何错误——该标志只是被忽略。
这会影响 Google Chrome 和 Microsoft Edge。您必须使用以下替代方案之一:
| 浏览器 | 扩展加载 | 推荐? |
|---|---|---|
| Google Chrome 137+ | 不支持 | 否 |
| Microsoft Edge | 不支持 | 否 |
| Chrome for Testing | 支持 | 是 |
| Chromium(独立版) | 支持 | 是 |
| Playwright 的内置 Chromium | 支持 | 是 |
如何安装 Chrome for Testing:
# 选项 1:通过 Playwright(推荐——OpenBrowser 已经使用 Playwright)
npx playwright install chromium
# 二进制文件路径类似:
# ~/.cache/ms-playwright/chromium-XXXX/chrome-linux64/chrome (Linux)
# ~/Library/Caches/ms-playwright/chromium-XXXX/chrome-mac/Chromium.app/Contents/MacOS/Chromium (macOS)
# 选项 2:通过 Chrome for Testing 直接下载
# 访问:https://googlechromelabs.github.io/chrome-for-testing/
# 下载与您的操作系统匹配的版本
安装后,请注意二进制文件的完整路径——您将在启动配置文件中需要它。
如果您尚未安装,请安装 OpenBrowser:
npm install openbrowser
或克隆仓库以获取最新功能:
git clone https://github.com/ntegrals/openbrowser.git
cd openbrowser
npm install
下载 CapSolver Chrome 扩展并将其提取到已知目录:
CapSolver.Browser.Extension-chrome-vX.X.X.zipmkdir -p ~/.openbrowser/capsolver-extension
unzip CapSolver.Browser.Extension-chrome-v*.zip -d ~/.openbrowser/capsolver-extension/
ls ~/.openbrowser/capsolver-extension/manifest.json
您应该看到 manifest.json —— 这确认了扩展位于正确的位置。
打开扩展的配置文件 ~/.openbrowser/capsolver-extension/assets/config.js 并将 apiKey 值替换为您的:
export const defaultConfig = {
apiKey: 'CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', // 请在此处输入您的密钥
useCapsolver: true,
// ...其余配置
};
您可以在 CapSolver 仪表板 上获取您的 API 密钥。
这是 OpenBrowser 的亮点所在。使用 LaunchProfile 构建器将 CapSolver 扩展加载到浏览器中:
import { LaunchProfile, OpenBrowser } from 'openbrowser';
const profile = new LaunchProfile()
.addExtension('/home/user/.openbrowser/capsolver-extension')
.extraArgs('--disable-extensions-except=/home/user/.openbrowser/capsolver-extension')
.headless(false) // 必须——MV3 扩展需要有头浏览器
.stealthMode(); // 减少机器人检测指纹
为什么使用
headless(false)? Chrome 的 MV3(Manifest V3)扩展,包括 CapSolver,需要有头浏览器上下文。服务工作器无法在无头模式下加载。在没有显示器的服务器上,请使用 Xvfb(参见步骤 7)。重要:如果您在设置的其他地方传递自定义 Chrome 标志,请不要包含
--disable-background-networking。CapSolver 扩展的服务工作器需要出站网络访问。
import { LaunchProfile, OpenBrowser } from 'openbrowser';
const profile = new LaunchProfile()
.addExtension('/home/user/.openbrowser/capsolver-extension')
.extraArgs('--disable-extensions-except=/home/user/.openbrowser/capsolver-extension')
.headless(false)
.stealthMode();
const browser = await OpenBrowser.launch(profile);
// 导航到受验证码保护的页面
await browser.goto('https://example.com/protected-form');
// 等待 CapSolver 检测并解决验证码
await browser.page.waitForTimeout(30_000);
// 提交表单——验证码令牌已注入
await browser.page.click('button[type="submit"]');
// 读取目标页面或确认元素
const result = await browser.page.textContent('body');
console.log(result); // 例如,网站返回的任何确认文本
await browser.close();
OpenBrowser 的真正威力在于让 AI 模型控制浏览器。以下是将其与 CapSolver 集成的方法:
import { LaunchProfile, OpenBrowser, Agent } from 'openbrowser';
const profile = new LaunchProfile()
.addExtension('/home/user/.openbrowser/capsolver-extension')
.extraArgs('--disable-extensions-except=/home/user/.openbrowser/capsolver-extension')
.headless(false)
.stealthMode();
const browser = await OpenBrowser.launch(profile);
// 创建一个使用您首选模型的代理
const agent = new Agent({
browser,
model: 'gpt-4o', // 或 'claude-sonnet-4-20250514', 'gemini-pro' 等
});
// 给代理一个任务——无需提及验证码
await agent.run(`
前往 https://example.com/contact,
填写联系表单:
姓名: "Jane Smith"
邮箱: "jane@example.com"
消息: "我想了解更多关于您的企业计划的信息。"
等待 30 秒让页面完全加载,
然后点击提交。
告诉我出现的确认消息。
`);
await browser.close();
请注意,代理指令中说 "等待 30 秒让页面完全加载" —— 这是一种自然的表达方式,给 CapSolver 时间解决页面上的任何验证码,而 AI 完全不知道它的存在。
由于 MV3 扩展需要有头浏览器,您需要在没有显示器的服务器上设置虚拟显示:
# 安装 Xvfb
sudo apt-get install -y xvfb
# 启动虚拟显示
Xvfb :99 -screen 0 1280x720x24 &
# 在运行脚本前设置 DISPLAY
export DISPLAY=:99
然后正常运行您的 OpenBrowser 脚本。浏览器将渲染到虚拟显示,扩展将正确加载。
对于技术爱好者,以下是 CapSolver 加载到 OpenBrowser 中时的完整流程:
您的脚本 / AI 代理
──────────────────────────────────────────────────
LaunchProfile OpenBrowser
.addExtension(path) ──► 添加 --load-extension 标志
.extraArgs(...) 添加 --disable-extensions-except
.headless(false) 到 Playwright 启动参数
.stealthMode() │
▼
Playwright 启动 Chromium
┌───────────────────────────────┐
│ Chromium 进程 │
│ │
│ 1. 扩展服务工作器 │
│ 激活(background.js) │
│ │
│ 2. 内容脚本注入 │
│ 到每个页面 │
└───────────────────────────────┘
│
▼
代理导航到目标 URL
┌───────────────────────────────┐
│ 包含验证码小部件的页面 │
│ │
│ CapSolver 扩展: │
│ 1. 内容脚本检测 │
│ 页面上的验证码 │
│ 2. 服务工作器调用 │
│ CapSolver API │
│ 3. 接收令牌 │
│ 4. 将令牌注入到 │
│ 隐藏表单字段 │
└───────────────────────────────┘
│
▼
代理等待(30-60 秒)...
│
▼
代理点击提交
│
▼
表单提交并带有有效令牌
│
▼
网站特定的确认页面
addExtension() 如何工作.addExtension(path) 生成 --load-extension=/path/to/extension。对于此集成,您还需要通过 .extraArgs('--disable-extensions-except=/path/to/extension') 显式允许未打包的扩展。这是 OpenBrowser 通过其启动配置文件公开的相同 Chrome 开发者扩展机制。
--load-extension=/path/to/capsolver-extension--disable-extensions-except=/path/to/capsolver-extension如果Chrome扩展加载存在问题 — 或者你希望对CAPTCHA求解流程有更明确的控制 — 你可以直接使用OpenBrowser的Playwright实例调用CapSolver REST API。
import { LaunchProfile, OpenBrowser } from 'openbrowser';
const CAPSOLVER_API_KEY = process.env.CAPSOLVER_API_KEY!;
async function solveCaptchaViaAPI(
pageUrl: string,
siteKey: string
): Promise<string> {
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",
websiteURL: pageUrl,
websiteKey: siteKey,
},
}),
});
const { taskId, errorDescription } = await createRes.json();
if (!taskId) throw new Error(`createTask失败: ${errorDescription}`);
for (let i = 0; i < 40; i++) {
await new Promise((r) => setTimeout(r, 3000));
const resultRes = 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 resultRes.json();
if (result.status === "ready") {
return result.solution.gRecaptchaResponse;
}
}
throw new Error("求解超时");
}
// 无需扩展启动 — 不需要特殊Chrome标志
const profile = new LaunchProfile()
.headless(false)
.stealthMode();
const browser = await OpenBrowser.launch(profile);
const page = browser.page;
await page.goto("https://example.com/protected-page");
// 检测sitekey
const siteKey = await page.evaluate(() => {
const el = document.querySelector(".g-recaptcha[data-sitekey]");
return el?.getAttribute("data-sitekey") ?? "";
});
console.log("Sitekey:", siteKey);
// 通过API求解
const token = await solveCaptchaViaAPI(page.url(), siteKey);
console.log("收到令牌,长度:", token.length);
// 注入令牌
await page.evaluate((t) => {
const textarea = document.querySelector(
'textarea[name="g-recaptcha-response"]'
) as HTMLTextAreaElement;
if (textarea) textarea.value = t;
}, token);
// 提交
await page.click("#recaptcha-demo-submit");
await page.waitForLoadState("networkidle");
const body = await page.textContent("body");
console.log(
body?.includes("Verification Success")
? "通过API解决CAPTCHA!"
: body?.slice(0, 200)
);
await browser.close();
| 扩展 | API | |
|---|---|---|
| 设置 | 配置扩展 + Chrome标志 | 仅需API密钥 |
| Chrome版本 | 需要Chrome进行测试(137+的注意事项) | 适用于任何Chrome |
| 检测 | 自动(内容脚本) | 手动(查询DOM) |
| 令牌注入 | 自动 | 手动(评估JS) |
| 无头模式 | 需要有头模式(MV3) | 也可在无头模式下运行 |
| 最佳用途 | 持续自动化 | 一次性求解,无头环境 |
症状: 浏览器启动但CAPTCHAs未被解决。chrome://extensions中没有扩展相关条目。
原因: 你使用的是品牌Google Chrome 137+,它会静默忽略 --load-extension。
解决方法: 切换到Chrome for Testing或Playwright的内置Chromium。如果需要指定自定义可执行文件:
const profile = new LaunchProfile()
.addExtension('/path/to/capsolver-extension')
.extraArgs('--disable-extensions-except=/path/to/capsolver-extension')
.executablePath('/path/to/chrome-for-testing/chrome')
.headless(false)
.stealthMode();
验证你的Chrome版本:
/path/to/your/chrome --version
# Chrome for Testing: "Chromium 143.0.7499.4"
# 品牌Chrome: "Google Chrome 143.0.7499.109"
症状: 扩展在有头模式下加载但在无头模式下未加载。
原因: Chrome的MV3(Manifest V3)扩展需要有头浏览器环境。在 --headless 或 --headless=new 模式下服务工作线程不会初始化。
解决方法: 在你的LaunchProfile中始终使用 .headless(false)。在服务器上,使用Xvfb提供虚拟显示:
Xvfb :99 -screen 0 1280x720x24 &
export DISPLAY=:99
可能原因:
assets/config.js--disable-background-networking 添加到Chrome参数中,请将其移除。扩展需要网络访问权限以调用CapSolver API。症状: 即使启用了 .stealthMode(),页面仍检测到浏览器为自动化。
解决方法: 确保你使用的是Playwright的内置Chromium或Chrome for Testing。某些隐身补丁是针对特定Chromium版本的。同时确保你没有传递覆盖隐身设置的冲突Chrome标志。
更多的等待时间总是更安全。CAPTCHA通常在5-20秒内解决,但网络延迟、复杂挑战或重试可能会增加时间。30-60秒是最佳时间。
| CAPTCHA类型 | 典型解决时间 | 推荐等待时间 |
|---|---|---|
| reCAPTCHA v2(复选框) | 5-15秒 | 30-60秒 |
| reCAPTCHA v2(不可见) | 5-15秒 | 30秒 |
| reCAPTCHA v3 | 3-10秒 | 20-30秒 |
| Cloudflare Turnstile | 3-10秒 | 20-30秒 |
当通过OpenBrowser向AI代理提供指令时,保持语言自然,避免提及CAPTCHAs:
良好示例:
"转到该页面,等待大约一分钟以加载所有内容,然后提交表单。"
避免:
"等待CAPTCHA被解决,然后提交。"
自然语言与LLM配合更好,并避免触发安全拒绝。AI不需要知道CAPTCHAs的存在 — 扩展会完全隐蔽地处理一切。
对于使用reCAPTCHA v3或不可见reCAPTCHA v2的网站,请确保在扩展配置(assets/config.js)中启用令牌模式。令牌模式确保扩展在无需任何可见交互的情况下解决挑战并注入令牌。
每次CAPTCHA解决都会消耗积分。定期在 capsolver.com/dashboard 检查余额,以避免中断。
stealthMode()在生产环境中始终在LaunchProfile中启用 .stealthMode()。这会应用指纹规避技术,降低浏览器被标记为自动化浏览器的可能性 — 从而减少遇到严格CAPTCHAs的可能性。
const profile = new LaunchProfile()
.addExtension('/path/to/capsolver-extension')
.extraArgs('--disable-extensions-except=/path/to/capsolver-extension')
.headless(false)
.stealthMode(); // 生产环境中始终启用
DISPLAYChrome扩展即使在无头服务器上也需要显示。使用Xvfb创建虚拟显示:
# 安装Xvfb
sudo apt-get install -y xvfb
# 启动虚拟显示
Xvfb :99 -screen 0 1280x720x24 &
# 为你的OpenBrowser脚本设置DISPLAY
export DISPLAY=:99
OpenBrowser + CapSolver集成代表了AI浏览器自动化中解决CAPTCHA的最简洁方法。你无需编写CAPTCHA检测逻辑、管理API调用、轮询结果或注入令牌 — 你只需:
.addExtension('/path/to/capsolver-extension') 加上 .extraArgs('--disable-extensions-except=/path/to/capsolver-extension')headless(false) 并在服务器上使用Xvfb--disable-background-networking 覆盖无需修改你的代理逻辑。无需CAPTCHA特定代码。无需将你的AI模型与求解服务耦合。扩展在浏览器级别运行,对代理完全不可见。
这就是真正自动化的CAPTCHA解决:隐形、零代码、与模型无关。
准备好了吗? 在CapSolver注册 并使用优惠码 OPENBROWSER 在首次充值时获得额外6%的奖励!
不需要。 CapSolver扩展完全在浏览器级别运行 — 你的AI代理(GPT-4o、Claude、Gemini等)永远不需要知道CAPTCHAs的存在。只需在代理指令中包含合理的等待时间(例如,“等待30秒以让页面完全加载”),以给扩展时间解决任何挑战。
Google Chrome 137+(2025年中发布)在品牌版本中移除了 --load-extension 命令行标志的支持。这意味着无法在自动化会话中加载Chrome扩展。你需要Chrome for Testing或独立Chromium,它们仍然支持此标志。由于OpenBrowser使用Playwright作为后端,最简单的选择是 npx playwright install chromium。
不直接有效。 Chrome的MV3(Manifest V3)扩展需要有头浏览器上下文 — 服务工作线程在无头模式下不会初始化。在没有显示的服务器上,使用Xvfb创建虚拟显示(Xvfb :99 & 和 export DISPLAY=:99)。浏览器将渲染到虚拟显示,扩展将正常加载。
CapSolver支持reCAPTCHA v2(复选框和不可见)、reCAPTCHA v3、reCAPTCHA Enterprise、Cloudflare Turnstile、Cloudflare 5秒挑战、AWS WAF CAPTCHA等。Chrome扩展会自动检测CAPTCHA类型并相应解决。
CapSolver提供基于CAPTCHA类型和数量的有竞争力的定价。访问 capsolver.com 查看当前定价。使用优惠码 OPENBROWSER 在首次充值时获得额外6%的奖励。
是的。 由于CapSolver通过Chrome扩展在浏览器级别运行,它与任何AI模型的工作方式相同 — GPT-4o、Claude、Gemini或任何其他支持的模型。模型永远不会与CAPTCHA求解过程交互。