
如何免Chrome直连MoliPlaywright与Puppeteer的CDP自动化服务完整实践指南【免费下载链接】moliBest headless browser for AI agents. Lite, Fast, High-Compatibility. Built in Rust项目地址: https://gitcode.com/gh_mirrors/moli/moliMoli 是一个用 Rust 编写的轻量级无头浏览器专为 AI Agent 设计。它的moli serve命令可以启动一个标准的 CDPChrome 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 就绪时间约 35msChrome 约 169ms峰值内存约 100 MiBChrome 约 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 APIDOM 操作选择器查询、XPath 激活、元素 handle、文件上传运行时Worker 生命周期、console 事件、dialog 处理、evaluate网络层请求拦截respond/continue、CDP 网络事件监听、下载视觉输出视口截图返回标准 PNG需服务端--layout常见连接问题排查清单遇到问题时按 SKILL.md 中的排查顺序处理确认moli serve进程仍在运行用精确的主机和端口探测/json/version确认客户端是附加/连接远程而不是在本地启动捆绑浏览器移除 Chrome 专属启动参数和executablePath配置失败涉及几何或视觉输出时检查是否漏开--layout只启用页面真正需要的资源族--resource或单项标志把明确的协议不支持错误当作能力边界不要用合成成功掩盖它架构参考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 而生的浏览器内核总结免 Chromemoli 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),仅供参考