CloakBrowser 与 AI Agent 集成实战指南

本文详细介绍如何将 CloakBrowser 的隐身 Chromium 与 Browser-Use、Crawl4AI、Scrapling、LangChain、Crawlee、Selenium 等主流 AI Agent 和自动化框架集成,实现 0.9 reCAPTCHA 评分下的无检测浏览器自动化。

亿牛云技术团队2026年7月12日8 分钟阅读

概述

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-autoinstaller

undetected-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-UseCDP 连接10 行需要额外配置AI Agent 多步骤任务
Crawl4AICDP 连接10 行需要额外配置LLM 数据采集
ScraplingCDP 连接10 行需要额外配置自适应网页抓取
LangChainCDP 连接15 行需要额外配置RAG / LLM 文档加载
Crawlee二进制替换30 行自动支持大规模爬虫部署
Selenium二进制替换10 行需要额外配置传统 WebDriver 项目
undetected-chromedriver二进制替换10 行需要额外配置双层隐身防护
agent-browser二进制替换5 行需要额外配置Node.js AI Agent CLI
AWS LambdaCDP + 二进制参考示例需要额外配置无服务器按需爬取

最佳实践

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 目录。

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。