
Adélia Cruz
Neural Network Developer

当你的AI驱动的网页自动化遇到验证码墙时,整个流程都会停滞。页面无法加载,表单无法提交,数据提取也会停止——这一切都是因为验证码设计用来阻止机器人。TinyFish AgentQL 是一个强大的工具套件,用于将AI连接到网络,具有自然语言查询、Playwright集成和企业级结构化数据提取功能。但像任何浏览器自动化框架一样,它也会被验证码卡住。
CapSolver 完全改变了这一点。通过将 CapSolver Chrome 扩展加载到 AgentQL 的 Playwright 驱动的浏览器上下文中,验证码会在后台自动且不可见地被解决。无需手动解决,也不需要在你的端进行复杂的 API 协调。你的自动化脚本可以继续运行,就像没有验证码一样。
最棒的是?你的 AgentQL 查询和脚本不需要任何一行验证码相关的代码。扩展程序会自行处理检测、解决和令牌注入,而你的代理则专注于它最擅长的事情——提取数据和自动化工作流程。
TinyFish AgentQL 是一个企业级工具包,用于将AI代理和LLM连接到实时网络环境。由 TinyFish 开发,它提供了一种AI驱动的查询语言,允许你使用自然语言定位页面元素并提取结构化数据——无需脆弱的CSS选择器或XPaths。
AgentQL 可以在任何页面上运行——包括经过身份验证的内容和动态生成的页面——使其成为大规模网页自动化、数据收集和AI代理工作流程的理想选择。
CapSolver 是一个领先的AI驱动的验证码解决服务,可以自动解决各种验证码挑战。凭借快速的响应时间和广泛的兼容性,CapSolver 可无缝集成到自动化工作流中。
大多数验证码解决集成需要你编写样板代码:创建任务、轮询结果、将令牌注入隐藏字段。这是使用原始 Playwright 或 Puppeteer 脚本的标准方法。
AgentQL + CapSolver 采用了根本不同的方法:
| 传统(基于代码) | AgentQL + CapSolver 扩展 |
|---|---|
| 编写 CapSolver 服务类 | 在 Playwright 上下文中加载扩展 |
调用 createTask() / getTaskResult() |
扩展自动处理一切 |
通过 page.evaluate() 注入令牌 |
令牌注入是不可见的 |
| 在代码中处理错误、重试、超时 | 扩展在内部管理重试 |
| 每种验证码类型需要不同的代码 | 自动处理所有类型 |
关键洞察:CapSolver 扩展运行在 AgentQL 的 Playwright 浏览器上下文中。当 AgentQL 导航到包含验证码的页面时,扩展会检测到它,在后台解决它,并注入令牌——在你的脚本与表单交互之前。你的自动化代码保持简洁、专注且无验证码。
在设置集成之前,请确保你已:
重要提示:Chrome 扩展仅在 Chromium 中使用 持久上下文 时有效。这是 Playwright 的要求,而不是 AgentQL 的限制。
Python SDK:
pip install agentql
playwright install chromium
JavaScript SDK:
npm install agentql
npx playwright install chromium
将 CapSolver Chrome 扩展下载到专用目录:
CapSolver.Browser.Extension-chrome-v1.17.0.zipmkdir -p ~/capsolver-extension
unzip CapSolver.Browser.Extension-chrome-v*.zip -d ~/capsolver-extension/
ls ~/capsolver-extension/manifest.json
你应该看到 manifest.json —— 这确认了扩展已放置在正确的位置。
打开扩展配置文件 ~/capsolver-extension/assets/config.js,并将 apiKey 值替换为你的密钥:
export const defaultConfig = {
apiKey: 'CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', // ← 你的密钥在这里
useCapsolver: true,
// ...其余配置
};
你可以从你的 CapSolver 仪表板 获取你的 API 密钥。
关键步骤是使用 持久上下文 启动 Playwright 的 Chromium,加载 CapSolver 扩展。
Python 示例:
import agentql
from playwright.sync_api import sync_playwright
import time
import os
# CapSolver 扩展路径
CAPSOLVER_EXTENSION_PATH = os.path.expanduser("~/capsolver-extension")
def main():
with sync_playwright() as p:
# 使用持久上下文和 CapSolver 扩展启动 Chromium
context = p.chromium.launch_persistent_context(
user_data_dir="./browser-data",
headless=False, # 扩展需要非无头模式
args=[
f"--disable-extensions-except={CAPSOLVER_EXTENSION_PATH}",
f"--load-extension={CAPSOLVER_EXTENSION_PATH}",
],
)
# 使用 AgentQL 包装页面进行 AI 驱动的查询
page = agentql.wrap(context.pages[0])
# 导航到目标页面
page.goto("https://example.com/protected-page")
# 等待 CapSolver 检测并解决任何验证码
time.sleep(30)
# 使用 AgentQL 的自然语言查询查找并点击提交按钮
response = page.query_elements("""
{
submit_button
}
""")
# 点击提交按钮 —— 验证码已解决!
response.submit_button.click()
# 提交后提取数据
result = page.query_data("""
{
confirmation_message
}
""")
print(f"结果: {result['confirmation_message']}")
context.close()
if __name__ == "__main__":
main()
JavaScript 示例:
const { chromium } = require('playwright');
const agentql = require('agentql');
const path = require('path');
const os = require('os');
const CAPSOLVER_EXTENSION_PATH = path.join(os.homedir(), 'capsolver-extension');
(async () => {
// 使用持久上下文和 CapSolver 扩展启动 Chromium
const context = await chromium.launchPersistentContext('./browser-data', {
headless: false, // 扩展需要非无头模式
args: [
`--disable-extensions-except=${CAPSOLVER_EXTENSION_PATH}`,
`--load-extension=${CAPSOLVER_EXTENSION_PATH}`,
],
});
// 获取第一个页面并用 AgentQL 包装
const page = agentql.wrap(context.pages()[0]);
// 导航到目标页面
await page.goto('https://example.com/protected-page');
// 等待 CapSolver 处理任何验证码
await page.waitForTimeout(30000);
// 使用 AgentQL 查询进行交互 —— 验证码已解决
const response = await page.queryElements(`{
submit_button
}`);
await response.submit_button.click();
// 提取结果数据
const result = await page.queryData(`{
confirmation_message
}`);
console.log('结果:', result.confirmation_message);
await context.close();
})();
启动浏览器后,你可以在浏览器窗口中导航到 chrome://extensions 来验证 CapSolver 扩展是否已激活。你应该看到 CapSolver 扩展已列出并启用。
或者,在浏览器控制台中检查 CapSolver 日志消息,确认服务工作者正在运行。
一旦设置完成,使用 CapSolver 与 AgentQL 就变得简单了。
不要编写验证码特定的代码。 只需在与验证码保护的表单交互前添加等待时间,让扩展处理其工作。
page.goto("https://example.com/contact")
# 使用 AgentQL 查询填写表单
response = page.query_elements("""
{
contact_form {
name_field
email_field
message_field
submit_button
}
}
""")
response.contact_form.name_field.fill("John Doe")
response.contact_form.email_field.fill("john@example.com")
response.contact_form.message_field.fill("Hello, I have a question about your services.")
# 等待 CapSolver 解决验证码
time.sleep(30)
# 提交 —— 验证码令牌已注入
response.contact_form.submit_button.click()
page.goto("https://example.com/login")
# 等待 CapSolver 解决 Turnstile 挑战
time.sleep(25)
# 使用 AgentQL 查找登录表单元素
response = page.query_elements("""
{
login_form {
email_input
password_input
login_button
}
}
""")
# 填写表单 —— Turnstile 已处理
response.login_form.email_input.fill("me@example.com")
response.login_form.password_input.fill("mypassword123")
# 点击登录
response.login_form.login_button.click()
page.goto("https://example.com/data")
# 等待任何验证码挑战清除
time.sleep(30)
# 使用 AgentQL 提取结构化数据
data = page.query_data("""
{
products[] {
name
price
rating
availability
}
}
""")
for product in data['products']:
print(f"{product['name']}: ${product['price']} ({product['rating']} 星)")
| 验证码类型 | 典型解决时间 | 推荐等待 |
|---|---|---|
| reCAPTCHA v2(复选框) | 5-15 秒 | 30-60 秒 |
| reCAPTCHA v2(不可见) | 5-15 秒 | 30 秒 |
| reCAPTCHA v3 | 3-10 秒 | 20-30 秒 |
| Cloudflare Turnstile | 3-10 秒 | 20-30 秒 |
提示:如果不确定,使用 30 秒。等待更长时间比过早提交更好。额外的时间不会影响结果。
以下是 AgentQL 在加载 CapSolver 扩展时发生的情况:
你的 AgentQL 脚本
───────────────────────────────────────────────────
page.goto("https://...") ──► Chromium 加载页面
│
▼
┌─────────────────────────────┐
│ 包含验证码小部件的页面 │
│ │
│ CapSolver 扩展: │
│ 1. 内容脚本检测页面上的验证码 │
│ 2. 服务工作者调用 CapSolver API │
│ 3. 接收令牌 │
│ 4. 将令牌注入隐藏表单字段 │
└─────────────────────────────┘
│
▼
time.sleep(30) 扩展解决验证码...
│
▼
page.query_elements(...) AgentQL 找到表单元素
submit_button.click() 表单提交,带有有效令牌
│
▼
"验证成功!"
当 Playwright 使用 --load-extension 标志启动 Chromium 时:
以下是 AgentQL + CapSolver 集成的完整 Python 设置:
import agentql
from playwright.sync_api import sync_playwright
import os
# 配置
CAPSOLVER_EXTENSION_PATH = os.path.expanduser("~/capsolver-extension")
USER_DATA_DIR = "./browser-data"
with sync_playwright() as p:
context = p.chromium.launch_persistent_context(
user_data_dir=USER_DATA_DIR,
headless=False,
args=[
f"--disable-extensions-except={CAPSOLVER_EXTENSION_PATH}",
f"--load-extension={CAPSOLVER_EXTENSION_PATH}",
],
)
page = agentql.wrap(context.pages[0])
# ... 你的自动化代码在这里
context.close()
| 选项 | 描述 |
|---|---|
user_data_dir |
存储浏览器配置文件数据(cookie、会话)的目录。对于持久上下文是必需的。 |
headless |
必须为 False — Chrome 扩展在无头模式下无法运行。 |
--disable-extensions-except |
限制哪些扩展可以加载(防止冲突)。 |
--load-extension |
未打包的 CapSolver 扩展目录的路径。 |
CAPSOLVER_EXTENSION_PATH |
包含 manifest.json 的已解压 CapSolver 扩展的完整路径。 |
CapSolver API 密钥直接在扩展的 assets/config.js 文件中配置(参见上文步骤 3)。
症状: CAPTCHAs 未被自动解决。
原因: 您可能使用了常规浏览器上下文而不是持久化上下文,或在无头模式下运行。
解决方案: Playwright 中的扩展需要持久化上下文和有头模式:
# ✅ 正确 — 持久化上下文,有头模式
context = p.chromium.launch_persistent_context(
user_data_dir="./browser-data",
headless=False,
args=[...扩展参数...]
)
# ❌ 错误 — 常规上下文(扩展不会加载)
browser = p.chromium.launch()
context = browser.new_context()
可能原因:
症状: 脚本运行但无扩展显示。
原因: Chrome 扩展在无头模式下无法运行。
解决方案: 在服务器上使用有头模式和虚拟显示:
# 安装 Xvfb
sudo apt-get install xvfb
# 启动虚拟显示
Xvfb :99 -screen 0 1280x720x24 &
# 设置 DISPLAY
export DISPLAY=:99
症状: 扩展标志被静默忽略。
原因: Google Chrome 137+ 移除了品牌构建中对 --load-extension 的支持。
解决方案: 使用 Playwright 的捆绑 Chromium(推荐)或 Chrome for Testing:
# 安装 Playwright 的 Chromium(推荐)
npx playwright install chromium
# 或下载 Chrome for Testing
# 访问: https://googlechromelabs.github.io/chrome-for-testing/
始终使用较长的等待时间。更长的等待时间总是更安全。CAPTCHA 通常在 5-20 秒内解决,但网络延迟、复杂挑战或重试可能会增加时间。30-60 秒是最佳选择。
保持自动化脚本简洁。不要在 AgentQL 查询中添加特定于 CAPTCHA 的逻辑。扩展会处理一切 —— 您的代码应专注于数据提取和交互。
监控您的 CapSolver 余额。每次 CAPTCHA 解决都会消耗积分。定期查看 capsolver.com/dashboard 以避免中断。
一致地使用持久化上下文。当需要扩展时,始终使用 launch_persistent_context()。这也可以在运行之间保留 cookies 和会话数据,从而减少 CAPTCHA 出现的频率。
在无头服务器上使用 Xvfb。Chrome 扩展需要显示上下文。在没有物理显示器的服务器环境中设置 Xvfb。
TinyFish AgentQL + CapSolver 集成将隐形 CAPTCHA 解决方案带入了目前最强大的网络自动化工具包之一。您无需编写复杂的 CAPTCHA 处理代码,只需:
CapSolver Chrome 扩展会处理其余部分 —— 检测 CAPTCHA、通过 CapSolver API 解决它们,并将令牌注入页面。您的 AgentQL 脚本根本不需要知道任何关于 CAPTCHA 的信息。
当您将 AI 驱动的网络自动化与 AI 驱动的 CAPTCHA 解决方案结合时,这就是 CAPTCHA 解决方案的样子:隐形、自动且无需代码。
准备好开始了吗? 注册 CapSolver 并使用优惠码 AGENTQL 在首次充值时获得额外 6% 的优惠!

不需要。CapSolver 扩展在 Playwright 浏览器上下文中完全在后台运行。在提交表单前添加 time.sleep() 或 waitForTimeout(),扩展会自动处理检测、解决和令牌注入。
Playwright 仅在使用 launch_persistent_context() 时支持 Chrome 扩展。这是 Playwright 架构的要求。通过 browser.new_context() 创建的常规浏览器上下文无法加载扩展。
不可以。Chrome 扩展需要有头浏览器。对于没有显示器的服务器环境,请使用 Xvfb(X 虚拟帧缓冲区)创建虚拟显示器。
CapSolver 支持 reCAPTCHA v2(复选框和隐形)、reCAPTCHA v3、Cloudflare Turnstile、AWS WAF CAPTCHA 等。扩展会自动检测 CAPTCHA 类型并相应解决。
CapSolver 提供基于 CAPTCHA 类型和数量的具有竞争力的定价。访问 capsolver.com 查看当前价格。
AgentQL 提供免费和付费版本。SDK 和查询语言可用于开发和测试。访问 tinyfish.ai 查看定价详情。
对于大多数 CAPTCHA,30-60 秒足够。实际解决时间通常为 5-20 秒,但添加额外的缓冲时间可以确保可靠性。如果不确定,使用 30 秒。