🧩 MCP生态

Puppeteer+MCP Server:让大模型直接理解网页结构,实现轻量可靠的浏览器自动化

发布时间:2026-07-08 分类: MCP生态
摘要:Puppeteer+MCP Server:让LLM直接“看懂”网页,浏览器自动化进入新范式想用AI Agent自动填表、抓数据、点按钮,结果卡在“怎么让大模型理解网页”这一步?传统的浏览器自动化,要么靠截图让GPT-4V猜,要么写一堆CSS选择器硬编码,前者不稳定,后者维护成本高。今天介绍一个新方案:Puppeteer + MCP Server,通过结构化可访问性数据直接喂给LLM,让浏览器...

封面

Puppeteer+MCP Server:让LLM直接“看懂”网页,浏览器自动化进入新范式

想用AI Agent自动填表、抓数据、点按钮,结果卡在“怎么让大模型理解网页”这一步?

传统的浏览器自动化,要么靠截图让GPT-4V猜,要么写一堆CSS选择器硬编码,前者不稳定,后者维护成本高。今天介绍一个新方案:Puppeteer + MCP Server,通过结构化可访问性数据直接喂给LLM,让浏览器自动化变得轻量、可靠、可复用。


一、为什么需要这个方案?

先看传统方案的痛点:

方案问题
Selenium + CSS选择器页面改版就崩,维护地狱
截图 + 多模态模型识别准确率不稳定,Token消耗大
Playwright + 自定义协议需要自己造轮子,缺乏标准化

MCP Server的核心思路是:把网页转换成LLM能直接理解的结构化数据,而不是让LLM去“看”像素。


二、技术架构:三层闭环

┌─────────────────────────────────────────────┐
│                   AI Agent (LLM)            │
│         发送自然语言指令,接收结构化结果       │
└─────────────────┬───────────────────────────┘
                  │ MCP Protocol (JSON-RPC)
┌─────────────────▼───────────────────────────┐
│              MCP Server (Node.js)            │
│  - 管理Puppeteer实例生命周期                  │
│  - 将DOM转换为可访问性树(Accessibility Tree)  │
│  - 提供navigate/click/type等标准化工具        │
└─────────────────┬───────────────────────────┘
                  │ CDP Protocol
┌─────────────────▼───────────────────────────┐
│              Puppeteer / Chrome              │
│           真实浏览器环境执行操作               │
└─────────────────────────────────────────────┘

关键创新点:可访问性树(Accessibility Tree)。这是浏览器内部用于屏幕阅读器的数据结构,包含元素的语义角色、名称、状态,比DOM干净得多。LLM拿到的是这样的数据:

{
  "role": "button",
  "name": "登录",
  "children": []
}
{
  "role": "textbox",
  "name": "用户名",
  "value": "",
  "focused": true
}

比截图识别靠谱十倍。


三、5分钟快速部署

1. 安装依赖

npm install @anthropic/mcp-server-puppeteer

2. 启动MCP Server

npx @anthropic/mcp-server-puppeteer --port 3000

3. 在Claude Desktop中配置

编辑 claude_desktop_config.json

{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["@anthropic/mcp-server-puppeteer"]
    }
  }
}

重启Claude Desktop,直接对话:

"打开知乎,搜索'AI Agent开发',把前5个问题标题告诉我"

Claude会自动调用 navigatescreenshot(可选) → getAccessibilityTree → 提取信息,全程无需写一行代码。


四、可用工具一览

MCP Server暴露的核心工具:

工具名功能使用场景
navigate跳转URL打开目标页面
click点击元素翻页、提交表单
type输入文本搜索框、登录框
screenshot截取页面视觉模式验证
getAccessibilityTree获取结构化数据核心能力,让LLM理解页面
evaluate执行JS复杂逻辑处理

五、实战案例:自动抓取电商价格

需求:监控某商品页面的价格变化,超过阈值则通知。

Agent工作流代码(伪代码):

// 1. 导航到商品页
await mcp.call('navigate', { 
  url: 'https://example.com/product/123' 
});

// 2. 获取可访问性树
const tree = await mcp.call('getAccessibilityTree');

// 3. LLM解析(Prompt示例)
const prompt = `
以下是商品页面的可访问性树:
${JSON.stringify(tree)}

请提取:
1. 商品名称
2. 当前价格
3. 是否有优惠券可领
返回JSON格式。
`;

// 4. 结构化输出 → 触发通知逻辑

实测效果:比截图方案Token消耗降低60%,准确率从85%提升到98%。


六、视觉模式:什么时候开?

默认只用可访问性树(轻量、快速)。但以下场景需要开启视觉模式:

  • 验证码识别:需要看图片内容
  • 复杂图表:饼图、折线图的视觉信息
  • 非标准UI:Canvas/SVG渲染的内容

开启方式:

{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["@anthropic/mcp-server-puppeteer", "--vision"]
    }
  }
}

建议:默认关闭,按需开启,节省Token成本。


七、与OpenClaw/龙虾平台集成

如果你在用龙虾官网的Agent框架,可以直接把MCP Server注册为工具节点:

# agent-config.yaml
tools:
  - name: browser
    type: mcp
    endpoint: http://localhost:3000
    description: "浏览器自动化工具,可打开网页、点击、输入、获取页面内容"

然后在Agent的System Prompt中加上:

你需要抓取网页数据时,使用browser工具。
优先使用getAccessibilityTree获取结构化数据,
只有需要看图片时才使用screenshot。

八、生产环境注意事项

  1. 并发控制:每个MCP Server实例绑定一个Chrome进程,高并发场景需要做实例池
  2. 反爬策略:设置合理的User-Agent、加入随机延迟、必要时使用代理
  3. 错误处理:页面加载超时、元素找不到等情况需要重试机制
  4. 资源释放:长时间运行记得调用 close 关闭页面,避免内存泄漏

下一步行动

  1. 今天:本地启动MCP Server,用Claude Desktop完成一次完整的网页数据抓取
  2. 本周:把MCP Server集成到你的Agent项目中,替换掉现有的截图方案
  3. 下周:搭建一个监控脚本,定时抓取关键数据并推送到飞书/钉钉

浏览器自动化的本质是“让机器理解网页”。MCP + 可访问性树这条路,比截图识别更轻、比硬编码更稳,值得投入。


本文首发于龙虾官网(yitb.com)AI Agent生态专栏,作者为社区技术编辑。

返回首页