Chrome DevTools Protocol (CDP)

Browser-Use深度解析:重新定义AI与浏览器的智能协作
95后打造世界首个行动型浏览器——Fellou,从「浏览」到「行动」一键直达!

browser-user能够操作浏览器网页的原理

我们可以把整个原理想象成一个 “AI数字员工” 在帮您操作电脑。这个数字员工有一个超级大脑和一双灵巧的手。


“AI数字员工”的工作流程(简化版)

整个流程的核心是一个持续的 “观察(O) -> 思考(T) -> 行动(A) -> 验证(V)” 循环,直到任务完成。

O-T-A-V 循环流程

O-T-A-V 循环流程

下面我们来详细拆解这个循环中的每一步:

第一步:观察 - 用“眼睛”看清现场

当您下达指令后,这位数字员工首先会“睁开眼睛”观察当前的浏览器状态。它通过两种方式来看:

  1. 视觉之眼(截图):就像我们人眼一样,它会对整个网页屏幕进行截图。这能让它看到页面的实际布局、图片、按钮位置等。
  2. 结构之眼(DOM分析):同时,它会读取网页的源代码(HTML),并解析成一个结构化的“家谱树”(DOM树)。这能让它理解每个按钮、输入框的“身份ID”和技术属性。

这一步的输出:一个结合了“视觉画面”和“结构信息”的完整现场报告。

第二步:思考 - 用“大脑”分析决策

数字员工将“现场报告”和您的“任务指令”一起发送给它的“超级大脑”——大语言模型

  • 大脑的工作
    • 理解现状:“我现在在淘宝的首页,有一个很大的搜索框。”
    • 规划步骤:“用户要找机械键盘。所以我第一步应该把‘机械键盘’输入到这个搜索框里。”
    • 选择行动:“我需要使用‘输入文本’这个动作,目标对象是搜索框。”
    • 精确瞄准:它会根据DOM树和截图,找到搜索框对应的唯一标识符(比如一个CSS选择器或它在DOM树中的位置)。

这一步的输出:一个明确的、可执行的指令,例如:在元素 [#search-box] 中输入文本 “机械键盘”

第三步:行动 - 用“手”执行操作

现在,数字员工要动手了。它通过一个叫做 Chrome DevTools Protocol (CDP) 的“神经连接线”向浏览器发送指令。

  • CDP 是浏览器留给开发者的“后门”或“遥控器”,可以通过发送特定的命令来精确控制浏览器的几乎所有行为。
  • 数字员工将“思考”步骤中生成的指令,翻译成CDP能听懂的命令,例如:Input.dispatchKeyEvent(模拟键盘输入)、DOM.click(模拟点击)等。

浏览器接收到这些命令后,就会像真人操作一样,执行点击、输入、滚动等操作。

第四步:验证与循环 - 检查结果并继续

行动之后,数字员工不会立刻进行下一步。它会再次回到 第一步【观察】

  • 检查结果:再次截图,看看页面是否发生了变化?是否跳转到了搜索结果页?
  • 评估成功:“大脑”会判断上一步行动是否成功。比如,如果看到了搜索结果列表,就说明搜索成功了。
  • 决定下一步:如果成功,它就继续下一个子任务(比如:点击第一个商品);如果失败,它会尝试其他策略(比如:页面没加载完就等一秒再试,或者换一个选择器)。

这个 O-T-A-V 循环会一直进行下去,直到最终完成您下达的整个复杂任务(找到并加入购物车)。


与传统工具的核心区别(为什么说它是革命性的)

您提供的文章重点强调了这一点:

特征 传统工具(如Selenium) Browser-Use(AI驱动)
如何工作 命令式编程:程序员写下每一步精确的代码。 声明式任务描述:你只需要告诉它“要做什么”。
核心能力 忠实的执行者:严格按脚本执行,没有理解能力。 聪明的助手:具备观察、推理、决策能力。
灵活性 脆弱:页面布局一变,选择器可能失效,脚本就报错。 健壮:能通过视觉和理解适应页面变化,尝试其他方法。
学习成本 :需要学习编程和网页技术。 :会用自然语言描述任务即可。

总结

所以,browser-use 能够操作浏览器的原理,可以概括为:

它将大语言模型(LLM)的强大的自然语言理解和推理能力,与浏览器提供的底层自动化控制协议(CDP)连接起来,通过一个持续的“感知-思考-行动”循环,将用户的高级语言指令,分解并翻译成一系列底层的、精确的浏览器操作命令,从而模拟出一个真正“会使用浏览器”的智能数字员工。

这不再是简单的自动化,而是真正的 智能化交互。它让AI从只是一个聊天机器人,变成了一个能够在实际数字环境中为你工作的智能代理。希望这个解释能帮助您更好地理解这个令人兴奋的技术!


我们来深入介绍一下 Chrome DevTools Protocol,这个让 browser-use 等工具得以实现“魔法”的核心技术。

什么是 Chrome DevTools Protocol (CDP)?

想象一下,你的浏览器(Chrome、Edge、Chromium等)内部有一个完整的遥控系统。这个遥控器可以控制浏览器的每一个部分:查看网页结构、模拟点击、监控网络请求、执行JavaScript代码等等。

Chrome DevTools Protocol (CDP) 就是这个官方的、底层的“遥控协议”。它是一套基于 WebSocket 的 API,允许外部工具通过发送特定的 JSON 格式命令,来与 Chrome/Chromium 内核的浏览器进行深度交互。

当你打开 Chrome 开发者工具(按 F12)时,你看到的那个功能强大的界面,其底层正是通过 CDP 与浏览器进行通信的。


CDP 的核心工作原理

1. 通信基础:如何连接?

CDP 主要通过两种方式工作:

  • 调试端口:在启动浏览器时,通过命令行参数 --remote-debugging-port=9222 开启一个调试端口。
  • WebSocket 连接:外部工具(如 browser-use)然后连接到 http://localhost:9222,获取一个 WebSocket URL,并通过这个 WebSocket 连接向浏览器发送命令和接收事件。

这就好比:

  1. 你在浏览器上打开了一个“远程控制”开关(启动调试端口)。
  2. 你的自动化脚本通过一个“对讲机”(WebSocket 连接)与浏览器建立联系。
  3. 你通过对讲机下达指令,浏览器执行并回复结果。

2. 核心概念:域

CDP 的功能被组织成多个,每个域负责一类特定的功能。这就像一个公司的不同部门:

职责 相当于公司部门 常用命令举例
Page 控制页面的导航、加载、视觉操作 总裁办公室 Page.navigate(跳转页面), Page.captureScreenshot(截图)
DOM 获取、查询、修改文档对象模型 架构部 DOM.getDocument, DOM.querySelector
Runtime 执行 JavaScript 表达式 研发部 Runtime.evaluate(执行JS代码)
Network 监控和管理网络请求 采购/物流部 Network.enable(开启网络监控)
Input 模拟用户输入(键盘、鼠标、触摸) 操作工 Input.dispatchMouseEvent(模拟点击)
Target 管理浏览器标签页和上下文 HR部 Target.createTarget(创建新标签页)
CSS 获取和操作 CSS 样式 设计部 CSS.getComputedStyleForNode

CDP 的实际工作流程(一个简单例子)

假设我们要通过 CDP 实现:“打开百度,搜索 AI”。

这个过程会分解成以下 CDP 命令:

1. 启动浏览器并连接

# 启动Chrome,并开启9222调试端口
chrome --remote-debugging-port=9222

然后,工具通过 WebSocket 连接到 ws://localhost:9222/devtools/page/...

2. 导航到百度

// 发送的命令 (JSON-RPC格式)
{
  "id": 1,
  "method": "Page.navigate",
  "params": {
    "url": "https://www.baidu.com"
  }
}

// 浏览器返回的事件,表示导航完成
{
  "method": "Page.frameNavigated",
  "params": { ... }
}

3. 定位搜索框
首先需要获取页面的 DOM 结构,然后找到搜索框的元素ID。

// 查询搜索框(假设我们知道它的CSS选择器是 #kw)
{
  "id": 2,
  "method": "DOM.querySelector",
  "params": {
    "nodeId": 1, // 整个文档的根节点ID
    "selector": "#kw"
  }
}

// 浏览器返回搜索结果
{
  "id": 2,
  "result": {
    "nodeId": 10 // 搜索框元素的唯一节点ID
  }
}

4. 模拟点击搜索框(使其获得焦点)

{
  "id": 3,
  "method": "Input.dispatchMouseEvent",
  "params": {
    "type": "mousePressed",
    "button": "left",
    "x": 300, // 搜索框的大概X坐标
    "y": 200, // 搜索框的大概Y坐标
    "clickCount": 1
  }
}

5. 模拟键盘输入 “AI”

{
  "id": 4,
  "method": "Input.dispatchKeyEvent",
  "params": {
    "type": "keyDown",
    "text": "A"
  }
}
// ... 发送一系列 keyDown、char、keyUp 事件来模拟输入 "A" 和 "I"
{
  "id": 5,
  "method": "Input.dispatchKeyEvent",
  "params": {
    "type": "keyDown",
    "text": "I"
  }
}

6. 模拟按下回车键

{
  "id": 6,
  "method": "Input.dispatchKeyEvent",
  "params": {
    "type": "keyDown",
    "key": "Enter",
    "windowsVirtualKeyCode": 13
  }
}

CDP 的优势与为什么它如此强大

  1. 原生与深度集成:由 Chrome 团队直接开发和维护,可以访问浏览器最底层的功能,这是其他基于注入脚本的工具无法比拟的。
  2. 高保真模拟Input 域可以产生真实的、合成的事件,而不是简单的 DOM 事件。这意味着网站更难检测到这是自动化脚本在操作(有助于绕过一些反爬虫机制)。
  3. 全面的观测能力:可以监控所有网络请求、拦截并修改请求/响应、获取浏览器性能数据、监听 JavaScript 异常等。
  4. 协议驱动:基于 WebSocket 的协议意味着可以用任何编程语言(Python, Node.js, Go, Java等)来编写控制脚本,只要该语言支持 WebSocket。

CDP 与 Selenium WebDriver 的区别

这是一个常见的困惑点:

特性 Chrome DevTools Protocol Selenium WebDriver
定位 底层协议,是浏览器自身的调试接口。 标准化规范,是一个跨浏览器的Web自动化标准
工作原理 直接通过 WebSocket 与浏览器内核通信。 通过一个独立的驱动程序与浏览器通信。
性能 通常更快,因为通信更直接,没有中间层。 稍慢,多了一层驱动程序的转换。
功能范围 更广更深,可以访问性能分析、内存快照等开发级功能。 专注于 Web 自动化测试的核心功能。
跨浏览器 主要针对 Chrome/Chromium 内核浏览器。 支持所有主流浏览器(Chrome, Firefox, Safari, Edge)。
易用性 较原始,需要处理底层命令和事件。 更友好,有高级API和丰富的客户端库。

简单比喻

  • Selenium WebDriver 像是一辆汽车的标准自动挡:所有车(浏览器)的用法都一样,容易上手,但功能受限。
  • CDP 像是打开了汽车的引擎盖,直接接线控制:功能强大到可以调整发动机参数,但需要专业知识,且不同车型(浏览器)接法可能不同。

现代的工具如 Puppeteer (Node.js) 和 Playwright (跨浏览器) 都是在 CDP 的基础上构建的,它们封装了 CDP 的复杂性,提供了更简单易用的 API。


总结

Chrome DevTools Protocol 是现代浏览器自动化和智能代理技术的基石。

它提供了一个前所未有的强大接口,使得像 browser-use 这样的项目能够:

  1. “看”:通过 Page.captureScreenshot 获取视觉信息。
  2. “读”:通过 DOMRuntime 域获取页面结构和内容。
  3. “想”:将上述信息送给大语言模型(LLM)进行决策。
  4. “做”:通过 InputPage 域执行精确的交互操作。

正是有了 CDP,我们才得以实现“用自然语言告诉 AI 去操作浏览器”这一科幻般的场景。它打通了高级人工智能与真实数字世界之间的“最后一公里”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容