☰
如何免Chrome直连Moli:Playwright与Puppeteer的CDP自动化服务完整实践指南
2026/10/3 17:03:42 网站建设 项目流程

如何免Chrome直连Moli:Playwright与Puppeteer的CDP自动化服务完整实践指南

【免费下载链接】moliBest headless browser for AI agents. Lite, Fast, High-Compatibility. Built in Rust项目地址: https://gitcode.com/gh_mirrors/moli/moli

Moli 是一个用 Rust 编写的轻量级无头浏览器,专为 AI Agent 设计。它的moli serve命令可以启动一个标准的 CDP(Chrome DevTools Protocol)自动化服务,让 Playwright 和 Puppeteer 通过connectOverCDP/connect直接连上 Moli,无需安装或启动 Chrome 浏览器,即可完整实现页面抓取、DOM 操作、截图、请求拦截等自动化任务。

Moli 渲染 rust-lang.org,其 DOM、CSS 与几何信息可直接在 Chrome DevTools 中检查

为什么选择 Moli 替代 Chrome 跑自动化?

大多数自动化任务真正需要的是页面结构(DOM、JS 运行结果、网络数据),而不是一个持续渲染的像素世界。传统方案必须启动一个完整的 Chrome 进程,带来高内存开销和大量子进程。Moli 采用"按需渲染"架构:

  • 结构优先:DOM 查询、JS 执行、网络请求等操作直接读取浏览器运行时状态,不触发布局和绘制
  • 按需布局:只有请求几何信息、坐标输入或截图时才临时构建布局树
  • 资源高效:典型 Agent 工作负载下,Moli 的 CDP 就绪时间约 35ms(Chrome 约 169ms),峰值内存约 100 MiB(Chrome 约 350 MiB),且只需 1 个进程

在 Lexbench-Headless-Browser 基准测试(1,308 个可比较任务,覆盖 Playwright、Puppeteer、Selenium 等 13 种自动化工具)中,Moli 0.1.1 的通过率达到了 81.9%,仅次于 Chrome 的 99.8%:

一键启动 Moli CDP 自动化服务

安装完成后,一条命令即可启动自动化服务。Moli 默认绑定本机回环地址127.0.0.1的9222端口:

# 基础服务:适合 DOM 优先的工作负载(抓取、查询、执行 JS) moli serve # 启用真实几何:坐标输入、截图、PDF、Screencast moli serve --layout # 同时加载可选的图片/字体/音视频等资源 moli serve --layout --resource

💡 需要持久化 Cookie、localStorage 或 IndexedDB 时,加上--profile-dir;需要导入浏览器 Cookie 时,用--cookie-file。更多选项见 skills/moli-cdp-server/references/protocols.md。

服务就绪后,通过 CDP 发现端点验证(这也是客户端连接前的推荐步骤):

curl http://127.0.0.1:9222/json/version

该端点会返回浏览器的 WebSocket 调试地址,客户端应优先使用它,而不是硬编码/devtools/...路径。

Playwright 通过 CDP 直连 Moli 的最快配置方法

已有 Playwright 代码几乎零改动:把"启动浏览器"换成chromium.connectOverCDP指向 Moli 端点即可。

import { chromium } from "playwright"; const browser = await chromium.connectOverCDP("http://127.0.0.1:9222"); const context = browser.contexts()[0]; const page = context.pages()[0] ?? await context.newPage(); await page.goto("https://example.com"); console.log(await page.locator("body").innerText()); await browser.close();

接入时注意两点:

  • 去掉 Chrome 专属假设:删除executablePath和 Chrome 启动参数,把 Moli 当作远程端点,不要尝试再启动一个本地 Chromium
  • 能力边界:Moli 覆盖的是精选的 CDP 命令集而非完整 Chrome 协议;遇到明确返回的"不支持"错误属于能力边界,不要伪装成成功

仓库内置的 Playwright 冒烟测试 scripts/playwright-cdp-smoke.mjs 验证了完整的兼容面:connectOverCDP连接、多页/多上下文、iframe 子框架文本读取、waitForFunction、Cookie 往返、重定向与 History 前进后退、弹窗(popup)、请求拦截(routefulfill / continue / abort)等全部通过。

Puppeteer 直连 Moli 的完整实践步骤

Puppeteer 的接入方式是puppeteer.connect+ Moli 的 browser WebSocket 地址(从/json/version发现):

import puppeteer from "puppeteer-core"; const res = await fetch("http://127.0.0.1:9222/json/version"); const { webSocketDebuggerUrl } = await res.json(); const browser = await puppeteer.connect({ browserWSEndpoint: webSocketDebuggerUrl, protocolTimeout: 10000, }); const page = (await browser.pages())[0] ?? await browser.newPage(); await page.goto("https://example.com", { waitUntil: "load" }); console.log(await page.$eval("main", n => n.textContent)); // 需要截图时,确保服务端以 --layout 启动 await page.screenshot({ encoding: "base64" }); await browser.disconnect();

官方冒烟脚本 moli-cdp-smoke/moli_cdp_smoke/puppeteer_smoke.mjs 展示了 Puppeteer 在 Moli 上被验证的工作流:

能力说明
断线重连disconnect后再次connect,原有页面与运行时上下文保留
导航与历史goto、reload、waitForNavigation、History API
DOM 操作选择器查询、XPath 激活、元素 handle、文件上传
运行时Worker 生命周期、console 事件、dialog 处理、evaluate
网络层请求拦截respond/continue、CDP 网络事件监听、下载
视觉输出视口截图返回标准 PNG(需服务端--layout)

常见连接问题排查清单

遇到问题时按 SKILL.md 中的排查顺序处理:

  1. 确认moli serve进程仍在运行
  2. 用精确的主机和端口探测/json/version
  3. 确认客户端是"附加/连接远程",而不是在本地启动捆绑浏览器
  4. 移除 Chrome 专属启动参数和executablePath配置
  5. 失败涉及几何或视觉输出时,检查是否漏开--layout
  6. 只启用页面真正需要的资源族(--resource或单项标志)
  7. 把明确的"协议不支持"错误当作能力边界,不要用合成成功掩盖它

架构参考:CDP 服务是怎么实现的?

如果想深入理解 Moli 的 CDP 层,可以从两个模块入手:协议数据结构定义在 moli-protocol-cdp/src/wire.rs,而服务端调度、命令分发与 WebSocket 会话管理位于 moli-protocol-server/src/cdp_scheduler.rs。同一个二进制还同时提供 WebDriver Classic 与 WebDriver BiDi 端点,无需额外的 ChromeDriver 或 geckodriver。

Moli 无头浏览器:轻量、快速、高兼容,为 AI Agent 而生的浏览器内核

总结

  • 免 Chrome:moli serve一条命令启动 CDP 服务,Playwright 用connectOverCDP、Puppeteer 用connect直连,现有代码几乎不用改
  • 更快更省:CDP 就绪约 35ms,峰值内存约为 Chrome 的 1/3,单进程运行
  • 按需开销:默认 DOM 优先零渲染开销;截图、坐标输入等视觉能力用--layout显式开启
  • 能力可信:1,308 个自动化任务基准中通过率 81.9%,且对不支持的命令始终返回显式错误

把它部署进爬虫、browser-use Agent、检索管线或评测环境,你会发现"无头浏览器"这个词第一次和"轻量"真正画上了等号 🚀

【免费下载链接】moliBest headless browser for AI agents. Lite, Fast, High-Compatibility. Built in Rust项目地址: https://gitcode.com/gh_mirrors/moli/moli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询