🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 先搞清楚我们要做什么
Playwright MCP 是一个把浏览器自动化能力封装成 MCP 工具的服务,Agent 通过它就能用自然语言指挥浏览器打开页面、定位元素、读取表格。这次的目标很具体:让宿主 Agent 调用 Playwright MCP,打开一个公开榜单页,把页面上的表格抓下来存成 CSV,并且整个过程用 TaoToken 作为默认模型供应商来驱动。
适合谁?如果你已经在用 Claude Code、Cursor、Cline 这类支持 MCP 的宿主工具,想让 Agent 帮你做重复性的网页数据采集,又不想每次都手写选择器脚本,这套流程就是为你准备的。你只需要装好 Playwright MCP、把宿主的 Base URL 指向 TaoToken、选一个便宜够用的模型,剩下的交给自然语言指令。
我试过用 GLM 5.3 Flash 跑这类任务,响应快、成本低,抓表格这种结构化提取场景完全够用。下面从安装到出 CSV 一步步来。
2. 安装 Playwright MCP 并验证
Playwright MCP 官方提供了 npm 包,直接用 npx 就能拉起,不需要全局安装。先确认你的环境有 Node.js 18 以上:
node -v # 期望输出 v18.x 或更高然后单独跑一次 Playwright MCP 确认它能启动:
npx @playwright/mcp@latest --help如果看到 usage 信息说明包能正常拉取。第一次运行会自动下载 Chromium,国内网络环境下这一步可能需要几分钟,耐心等它完成。下载完成后,你可以用一条最简单的命令测试浏览器能否被 MCP 控制:
npx @playwright/mcp@latest --headless --isolated--headless表示无头模式,--isolated表示每次会话用干净的浏览器上下文,避免残留 cookie 干扰抓取结果。这条命令会挂起等待 MCP 客户端连接,按 Ctrl+C 退出即可。能正常挂起不报错,说明 Playwright MCP 本身没问题。
接下来是宿主 Agent 的配置。不同宿主的 MCP 配置文件位置不一样,Claude Code 用~/.claude/claude_desktop_config.json或项目级.mcp.json,Cursor 用.cursor/mcp.json,Cline 在 VS Code 设置里。核心结构是一样的,把下面这段 JSON 片段填进去:
{ "mcpServers": { "playwright": { "command": "npx", "args": [ "@playwright/mcp@latest", "--headless", "--isolated", "--viewport-size", "1280,800" ] } } }--viewport-size设成 1280x800 是为了让页面按桌面布局渲染,很多榜单页在窄视口下会折叠表格列,导致抓取缺列。配置保存后重启宿主 Agent,在工具列表里应该能看到playwright下面挂着browser_navigate、browser_snapshot、browser_evaluate等工具。
3. 把宿主 Agent 接到 TaoToken
Playwright MCP 负责浏览器,模型负责理解你的指令并决定调哪个工具。这一步要把宿主的模型请求指向 TaoToken,模型选 GLM 5.3 Flash。
先到官网注册账号并创建 API Key:
https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content=
注册后在控制台的 API Keys 页面生成一把 Key,复制保存。然后回到宿主的模型配置。以 Claude Code 为例,它读环境变量ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的Key"如果你用的是 Cursor 或 Cline,在设置里找 OpenAI Compatible 或 Anthropic Compatible 供应商,Base URL 填https://taotoken.net/api,API Key 填刚才那把,模型名填glm-5.3-flash。不同宿主对模型名的写法可能略有差异,以 TaoToken 控制台模型列表里显示的为准。
配置完成后做个连通性验证。在宿主里发一条简单指令:
用 playwright 打开 https://example.com 并告诉我页面标题
如果 Agent 正确调用了browser_navigate然后返回标题,说明 MCP 和模型两条链路都通了。如果报 401,检查 Key 有没有多余空格;如果报模型不存在,回控制台核对模型名拼写。
4. 一条指令抓表格存 CSV
现在进入正题。假设我们要抓一个公开榜单页的表格,比如某个开源项目 star 排行或者公开的统计数据页。在宿主 Agent 里输入下面这条指令:
用 playwright 打开 https://example.com/ranking ,等待表格加载完成,用 browser_evaluate 提取页面上第一个 table 的所有行,把表头和每行数据整理成 CSV 格式,写入当前目录的 ranking.csv,然后告诉我文件路径和行数。
Agent 的执行链路大致是这样:先browser_navigate打开页面,再browser_snapshot看页面结构确认表格位置,然后browser_evaluate执行一段 JS 把 table 转成二维数组,最后用文件写入工具落盘。如果页面是异步加载的,你可以在指令里加一句「等表格出现再提取」,Agent 会自动加等待逻辑。
为了让结果更可控,你可以直接给它一段提取脚本作为参考:
() => { const table = document.querySelector('table'); if (!table) return 'NO_TABLE'; const rows = [...table.querySelectorAll('tr')]; return rows.map(r => [...r.querySelectorAll('th,td')].map(c => c.innerText.trim()) ); }Agent 调browser_evaluate时把这段传进去,返回的就是干净的二维数组。然后让它转 CSV:
(rows) => rows.map(r => r.map(c => `"${c.replace(/"/g, '""')}"`).join(',') ).join('\n')CSV 前 5 行输出样例大概长这样:
"rank","project","stars","language" "1","project-alpha","48213","TypeScript" "2","project-beta","39871","Python" "3","project-gamma","31204","Go" "4","project-delta","28765","Rust"实际列名和内容取决于你抓的页面。如果表格有合并单元格或者嵌套结构,提取脚本要相应调整,比如用rowspan判断逻辑展开。遇到这种情况,直接把页面 HTML 片段贴给 Agent,让它帮你改脚本,比你自己调快得多。
5. 失败分支与排查
抓取过程中最常见的几个坑,提前说清楚省得你卡住。
表格没抓到返回 NO_TABLE:多半是页面用了虚拟滚动或者表格在 iframe 里。虚拟滚动的话,Agent 需要先滚动到底部触发渲染再提取;iframe 的话,browser_evaluate默认在主文档上下文,得先切 frame。你可以在指令里补一句「如果表格在 iframe 里,先切到对应 frame 再提取」。
CSV 列错位:通常是单元格里有逗号或换行没转义。上面给的脚本已经用双引号包裹并转义了内部引号,如果你自己写脚本忘了这步就会错位。检查方法是用csvlint或者直接 Excel 打开看列数是否一致。
模型不调工具直接编答案:有些模型会偷懒,不实际打开页面就凭训练数据编一个表格。判断方法是看 Agent 的调用日志里有没有browser_navigate记录。如果没有,在指令里强调「必须实际打开页面提取,不要凭记忆生成」。GLM 5.3 Flash 在这类工具调用场景表现稳定,基本不会跳过。
请求超时或 429:页面太大或者模型并发太高会触发限流。把--viewport-size调小、加--headless减少渲染开销,模型侧可以降低并发或换时段重试。
6. 成本、模型选择与边界
这套方案的成本主要两块:模型 token 和浏览器资源。GLM 5.3 Flash 属于轻量档,抓一个表格的 token 消耗通常在几千以内,具体价格以 TaoToken 官网和控制台实时显示为准,不同时期可能有调整。浏览器侧本地跑不额外花钱,但如果页面很重、要渲染大量 JS,CPU 和内存占用会上去,建议在配置够的机器上跑。
模型选择上,抓表格这种任务对推理深度要求不高,Flash 档足够。如果你要处理的是多页翻页、登录后抓取、或者表格结构特别复杂需要多轮推理,可以换更强的模型,但成本会相应上升。具体有哪些模型可选、各自什么价位,以官网模型列表为准:
https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content=
需要提醒的是,抓取公开页面数据要遵守目标站点的 robots.txt 和使用条款,控制请求频率,别给人家服务器造成压力。涉及个人信息的页面不要抓,这是底线。
最后给个实用技巧:把常用的抓取指令存成宿主里的自定义 prompt 模板,下次换个 URL 就能复用,不用每次重新描述需求。Playwright MCP 的browser_evaluate配合 TaoToken 的模型,基本上能把「打开页面→提取表格→存 CSV」这条链路压缩到一条指令,剩下的就是调选择器和处理边界情况了。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度