CloakBrowser 与 AI Agent 集成实战指南
本文详细介绍如何将 CloakBrowser 的隐身 Chromium 与 Browser-Use、Crawl4AI、Scrapling、LangChain、Crawlee、Selenium 等主流 AI Agent 和自动化框架集成,实现 0.9 reCAPTCHA 评分下的无检测浏览器自动化。
概述
AI Agent 正在重塑网页交互的方式——从简单的内容抓取扩展到复杂的多步骤任务执行、表单填写、数据提取和跨站点编排。然而,AI Agent 的核心瓶颈并非 LLM 的能力,而是浏览器反检测。当 Agent 驱动浏览器访问受 Cloudflare、reCAPTCHA、DataDome 等保护的站点时,检测系统会将自动化行为识别为机器人并拦截请求。
CloakBrowser 通过 66 个 C++ 源码级补丁解决了这一问题。它不仅消除了 navigator.webdriver、CDP 检测等自动化信号,还能在 reCAPTCHA v3 中获得 0.9 的人类评分,并通过 Cloudflare Turnstile 检测。更重要的是,CloakBrowser 提供了与主流 AI Agent 和自动化框架的直接集成能力。
本文将以 8 个具体框架为例,展示如何将 CloakBrowser 的隐身能力嵌入到 Agent 的工作流中。
集成概览
CloakBrowser 支持两种集成模式:
| 模式 | 说明 | 适用框架 |
|---|---|---|
| CDP 连接模式 | CloakBrowser 先启动并暴露远程调试端口,框架通过 CDP 连接到隐身浏览器 | Browser-Use、Crawl4AI、Scrapling、LangChain、Crawlee |
| 二进制替换模式 | 框架直接使用 CloakBrowser 的 Chromium 二进制文件替换默认浏览器 | Selenium、undetected-chromedriver、agent-browser |
两种模式各有适用场景:CDP 连接模式不需要修改框架的浏览器启动逻辑,适合有原生 CDP 支持的框架;二进制替换模式适合使用 WebDriver 或需要完整控制浏览器启动参数的框架。
环境准备
所有集成示例都需要安装 CloakBrowser 的 Python 包:
pip install cloakbrowser首次运行时,CloakBrowser 会自动下载约 200MB 的隐身 Chromium 二进制文件并缓存到本地。如果需要从代理 IP 自动识别时区和语言环境,可以额外安装 geoip 支持:
pip install cloakbrowser[geoip]Browser-Use 集成
Browser-Use(70K Stars,GitHub 仓库 browser-use/browser-use)是一个让 AI Agent 控制浏览器的 Python 框架,支持 GPT-4o、Claude 等多种 LLM。它通过 Playwright 或 CDP 控制浏览器,让 Agent 看到网页截图并在页面上执行操作。
CloakBrowser 与 Browser-Use 的集成采用 CDP 连接模式:CloakBrowser 提供隐身浏览器,Browser-Use 提供 Agent 逻辑。
import asyncio
from browser_use import Agent, BrowserSession, ChatOpenAI
from cloakbrowser import launch_async
async def main():
# 1. 启动 CloakBrowser(自动处理二进制、隐身参数和指纹)
cb_browser = await launch_async(
headless=True,
args=["--remote-debugging-port=9242",
"--remote-debugging-address=localhost"],
)
# 2. 通过 CDP 将 Browser-Use 连接到隐身浏览器
session = BrowserSession(cdp_url="http://localhost:9242")
# 3. 运行 AI Agent —— 它通过 CloakBrowser 浏览网页
agent = Agent(
task="访问 https://httpbin.org/anything 并获取页面内容",
llm=ChatOpenAI(model="gpt-4o-mini"),
browser_session=session,
)
result = await agent.run()
print(result)
await cb_browser.close()
if __name__ == "__main__":
asyncio.run(main())集成要点
- CloakBrowser 的隐身指纹补丁在 CDP 层面自动生效,无需额外配置
- Browser-Use 的 Agent 操作(点击、输入、滚动)通过 CDP 转发给 CloakBrowser
- 如果目标站点对鼠标行为有检测,可以启用
humanize=True参数
cb_browser = await launch_async(
headless=False,
humanize=True, # 添加贝塞尔鼠标曲线、按字符输入、真实滚动模式
args=["--remote-debugging-port=9242"],
)注意:
humanize=True是 CloakBrowser 包装器层级的特性。如果通过 CDP 从外部脚本连接到 CloakBrowser,需要额外导入人性化操作函数(参见 CloakBrowser README Human Behavior 章节)。
Crawl4AI 集成
Crawl4AI(58K Stars,GitHub 仓库 unclecode/crawl4ai)是一个专为 LLM 场景设计的网页爬虫,能自动将网页内容转换为 Markdown 格式,便于注入 LLM 上下文。
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
from cloakbrowser import launch_async
async def main():
# 1. 启动 CloakBrowser
cb_browser = await launch_async(
headless=True,
args=["--remote-debugging-port=9243"],
)
# 2. 将 Crawl4AI 连接到隐身浏览器
browser_config = BrowserConfig(
browser_mode="cdp",
cdp_url="http://localhost:9243"
)
run_config = CrawlerRunConfig()
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
"https://httpbin.org/anything",
config=run_config,
)
print(f"提取了 {len(result.markdown)} 字符的 Markdown 内容")
print(result.markdown[:500])
await cb_browser.close()
if __name__ == "__main__":
asyncio.run(main())适用场景
Crawl4AI + CloakBrowser 的组合特别适合以下场景:
- LLM 训练数据采集:自动抓取被反爬保护的站点,转换为结构化 Markdown 用于 RAG 或微调
- 竞争情报监控:定期抓取竞品网站的关键页面,提取结构化信息
- 内容聚合:构建绕过 Cloudflare 和 reCAPTCHA 的内容管道
Scrapling 集成
Scrapling(21K Stars,GitHub 仓库 D4Vinci/Scrapling)是一个自适应的网页抓取库,支持智能元素追踪和自动处理页面结构变化。
import asyncio
import json
from urllib.request import urlopen
from scrapling.fetchers import StealthyFetcher
from cloakbrowser import launch_async
async def main():
# 启动 CloakBrowser
cb_browser = await launch_async(
headless=True,
args=["--remote-debugging-port=9245"],
)
# 获取 WebSocket URL(Scrapling 需要 ws:// 协议)
info = json.loads(
urlopen("http://localhost:9245/json/version").read()
)
ws_url = info["webSocketDebuggerUrl"]
# 通过 CDP 将 Scrapling 连接到隐身浏览器
page = await StealthyFetcher.async_fetch(
"https://httpbin.org/anything",
cdp_url=ws_url,
)
print(f"标题: {page.css('title::text').get()}")
print(f"段落: {page.css('p::text').getall()}")
await cb_browser.close()
if __name__ == "__main__":
asyncio.run(main())Scrapling 的 StealthyFetcher 已内置了对隐身连接的支持,通过传入 CloakBrowser 的 CDP WebSocket URL 即可获得 C++ 级别的指纹保护。
LangChain 集成
LangChain(100K+ Stars,GitHub 仓库 langchain-ai/langchain)是最流行的 LLM 应用开发框架之一。其 PlaywrightURLLoader 等工具默认使用 Playwright 启动浏览器,但无法直接指定自定义二进制文件。
通过 CloakBrowser 的 CDP 连接模式,可以构建一个返回 LangChain Document 对象的隐身文档加载器:
import asyncio
from langchain_core.documents import Document
from cloakbrowser import launch_async
async def load_urls_stealth(urls, **launch_kwargs):
"""使用 CloakBrowser 隐身浏览器加载 URL,返回 LangChain Document 列表。"""
browser = await launch_async(headless=True, **launch_kwargs)
page = await browser.new_page()
docs = []
for url in urls:
await page.goto(url, wait_until="domcontentloaded")
text = await page.evaluate("document.body.innerText")
title = await page.title()
docs.append(Document(
page_content=text,
metadata={"source": url, "title": title},
))
await browser.close()
return docs
async def main():
urls = [
"https://httpbin.org/html",
"https://httpbin.org/anything",
]
docs = await load_urls_stealth(urls)
for doc in docs:
print(f"--- {doc.metadata['title']} ({doc.metadata['source']}) ---")
print(doc.page_content[:300])
print()
if __name__ == "__main__":
asyncio.run(main())这种方法的关键优势是:CloakBrowser 提供的 66 个 C++ 补丁对 LangChain 完全透明——LangChain 只是通过标准 Playwright API 与浏览器交互,而底层指纹修改由 CloakBrowser 自动处理。
Crawlee 集成
Crawlee(8.6K Stars,GitHub 仓库 apify/crawlee-python)是 Apify 出品的 Python 爬虫框架,支持 Playwright、BeautifulSoup 等多种爬取引擎。
与 Crawlee 的集成需要创建一个自定义的 BrowserPlugin,用 CloakBrowser 的二进制文件替换默认的 Chromium:
import asyncio
from typing_extensions import override
from cloakbrowser.config import IGNORE_DEFAULT_ARGS, get_default_stealth_args
from cloakbrowser.download import ensure_binary
from crawlee.browsers import (
BrowserPool,
PlaywrightBrowserController,
PlaywrightBrowserPlugin,
)
from crawlee.crawlers import PlaywrightCrawler, PlaywrightCrawlingContext
class CloakBrowserPlugin(PlaywrightBrowserPlugin):
"""使用 CloakBrowser 替换默认 Chromium 的浏览器插件。"""
@override
async def new_browser(self):
if not self._playwright:
raise RuntimeError("Playwright 浏览器插件未初始化。")
binary_path = ensure_binary()
stealth_args = get_default_stealth_args()
launch_options = dict(self._browser_launch_options)
launch_options.pop("executable_path", None)
launch_options.pop("chromium_sandbox", None)
existing_args = list(launch_options.pop("args", []))
launch_options["args"] = [*existing_args, *stealth_args]
return PlaywrightBrowserController(
browser=await self._playwright.chromium.launch(
executable_path=binary_path,
ignore_default_args=IGNORE_DEFAULT_ARGS,
**launch_options,
),
max_open_pages_per_browser=1,
header_generator=None,
)
async def main():
crawler = PlaywrightCrawler(
max_requests_per_crawl=10,
browser_pool=BrowserPool(plugins=[CloakBrowserPlugin()]),
)
@crawler.router.default_handler
async def request_handler(context: PlaywrightCrawlingContext):
context.log.info(f"处理 {context.request.url} ...")
title = await context.page.title()
await context.push_data({
"url": context.request.url,
"title": title,
})
await context.enqueue_links()
await crawler.run(["https://httpbin.org/anything"])
if __name__ == "__main__":
asyncio.run(main())集成要点
IGNORE_DEFAULT_ARGS用于移除 Playwright 默认添加的自动化参数get_default_stealth_args()返回 CloakBrowser 的全部隐身参数ensure_binary()自动下载并缓存隐身 Chromium 二进制文件
Selenium 集成
Selenium(GitHub 仓库 SeleniumHQ/selenium)是最传统的浏览器自动化框架,通过 WebDriver 协议控制浏览器。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from cloakbrowser.config import get_default_stealth_args
from cloakbrowser.download import ensure_binary
binary_path = ensure_binary()
stealth_args = get_default_stealth_args()
options = Options()
options.binary_location = binary_path
options.add_argument("--headless")
for arg in stealth_args:
options.add_argument(arg)
driver = webdriver.Chrome(options=options)
driver.get("https://httpbin.org/anything")
print(f"Selenium + CloakBrowser: {driver.title}")
# 验证隐身效果
result = driver.execute_script("""
return {
webdriver: navigator.webdriver,
plugins: navigator.plugins.length,
platform: navigator.platform,
}
""")
print(f"隐身检测: {result}")
driver.quit()重要提示
Selenium 集成需要 ChromeDriver 版本与 CloakBrowser 的 Chromium 版本匹配(目前 Chromium 145)。建议使用 chromedriver-autoinstaller 自动匹配版本:
pip install chromedriver-autoinstallerundetected-chromedriver 集成
undetected-chromedriver(12K Stars,GitHub 仓库 ultrafunkamsterdam/undetected-chromedriver)通过修补 ChromeDriver 的检测信号来实现隐身,与 CloakBrowser 的 C++ 层面修补形成双层防御:
import undetected_chromedriver as uc
from cloakbrowser.config import get_chromium_version, get_default_stealth_args
from cloakbrowser.download import ensure_binary
binary_path = ensure_binary()
stealth_args = get_default_stealth_args()
chromium_major = int(get_chromium_version().split(".")[0])
options = uc.ChromeOptions()
options.binary_location = binary_path
options.add_argument("--headless")
for arg in stealth_args:
options.add_argument(arg)
driver = uc.Chrome(options=options, version_main=chromium_major)
driver.get("https://httpbin.org/anything")
print(f"undetected-chromedriver + CloakBrowser: {driver.title}")
result = driver.execute_script("""
return {
webdriver: navigator.webdriver,
plugins: navigator.plugins.length,
platform: navigator.platform,
hardwareConcurrency: navigator.hardwareConcurrency,
}
""")
print(f"隐身检测: {result}")
driver.quit()这种组合的优势在于:undetected-chromedriver 处理 ChromeDriver 级别的检测(如 navigator.webdriver 在 WebDriver 协议层面的暴露),而 CloakBrowser 在浏览器内核层面处理更深层的指纹检测。
agent-browser 集成
agent-browser(GitHub 仓库 nichochar/agent-browser)是一个 Node.js CLI 工具,提供了类似 Browser-Use 的 AI Agent 浏览器自动化能力。
#!/bin/bash
# 获取 CloakBrowser 二进制路径(自动下载)
BINARY_PATH=$(python3 -c \
"from cloakbrowser.download import ensure_binary; print(ensure_binary())")
# 获取隐身参数(逗号分隔)
STEALTH_ARGS=$(python3 -c \
"from cloakbrowser.config import get_default_stealth_args; \
print(','.join(get_default_stealth_args()))")
# 将 agent-browser 指向 CloakBrowser
export AGENT_BROWSER_EXECUTABLE_PATH="$BINARY_PATH"
export AGENT_BROWSER_ARGS="$STEALTH_ARGS"
# 打开页面
agent-browser --session stealth-test open "https://httpbin.org/anything"
# 获取页面标题
agent-browser --session stealth-test eval "document.title"
# 验证隐身
agent-browser --session stealth-test eval \
"JSON.stringify({webdriver: navigator.webdriver, \
plugins: navigator.plugins.length, \
platform: navigator.platform})"部署集成:AWS Lambda
对于生产环境的无服务器部署,CloakBrowser 提供了完整的 AWS Lambda 容器镜像支持。Lambda 集成使用 Xvfb 在无头服务器环境中运行有头模式浏览器,并通过事件驱动的请求处理模型实现按需爬取。
集成细节参见 CloakBrowser 仓库的 examples/integrations/aws_lambda/ 目录,包括:
lambda_handler.py:完整的事件驱动处理函数,支持代理配置、人性化行为、智能等待和自动重试Dockerfile:基于 Chromium 兼容运行时的容器镜像构建lambda-entrypoint.sh:Xvfb 显示服务器和浏览器进程管理
集成模式对比
| 框架 | 集成模式 | 代码改动量 | humanize 支持 | 适用场景 |
|---|---|---|---|---|
| Browser-Use | CDP 连接 | 10 行 | 需要额外配置 | AI Agent 多步骤任务 |
| Crawl4AI | CDP 连接 | 10 行 | 需要额外配置 | LLM 数据采集 |
| Scrapling | CDP 连接 | 10 行 | 需要额外配置 | 自适应网页抓取 |
| LangChain | CDP 连接 | 15 行 | 需要额外配置 | RAG / LLM 文档加载 |
| Crawlee | 二进制替换 | 30 行 | 自动支持 | 大规模爬虫部署 |
| Selenium | 二进制替换 | 10 行 | 需要额外配置 | 传统 WebDriver 项目 |
| undetected-chromedriver | 二进制替换 | 10 行 | 需要额外配置 | 双层隐身防护 |
| agent-browser | 二进制替换 | 5 行 | 需要额外配置 | Node.js AI Agent CLI |
| AWS Lambda | CDP + 二进制 | 参考示例 | 需要额外配置 | 无服务器按需爬取 |
最佳实践
1. 优先使用 CDP 连接模式
如无特殊需求,优先使用 CDP 连接模式。这种模式下框架不需要修改浏览器启动逻辑,CloakBrowser 自动处理所有隐身参数和二进制管理。
2. 按需启用 humanize
只有目标站点检测鼠标轨迹、键盘输入节奏或滚动模式时才需要启用 humanize=True。对于大多数数据抓取场景,66 个 C++ 补丁已经足够通过检测。
3. 配合代理和 GeoIP 使用
对于高防护目标(如 reCAPTCHA v3 Enterprise),建议同时配置代理和 GeoIP:
browser = await launch_async(
headless=False,
proxy="http://user:pass@proxy.16yun.cn:8888",
geoip=True, # 自动将时区和语言与代理 IP 所在地匹配
humanize=True, # 人类行为模拟
)4. 使用持久化上下文避免 Incognito 检测
对于需要保持登录状态的场景,使用 launch_persistent_context() 代替普通 launch(),以保持 Cookie 和 localStorage 跨会话持久化(参见 Issue #320)。
5. 注意 humanize 的 CDP 限制
隐身指纹补丁在 CDP 层面自动生效,但 humanize=True 是包装器层级的特性。如果通过 CDP 从外部脚本连接到 CloakBrowser,需要额外导入人性化操作函数:
import { patchBrowser, resolveConfig } from 'cloakbrowser/human';
patchBrowser(browser, resolveConfig('default'));结论
CloakBrowser 的 66 个 C++ 源码级补丁为 AI Agent 和自动化框架提供了浏览器隐身能力的底层基础设施。通过与 Browser-Use、Crawl4AI、Scrapling、LangChain、Crawlee、Selenium 等主流框架的集成,开发者可以将反检测能力无缝嵌入到 Agent 的工作流中,而无需了解底层的 C++ 补丁细节。
对于生产环境,建议根据目标站点的防护等级选择合适的集成模式,并结合代理、GeoIP 和人性化行为构建完整的隐身方案。
本文基于 CloakBrowser v0.4.10(2026 年 7 月)版本。集成示例来源于 CloakBrowser 官方仓库的 examples/integrations 目录。
需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。