1. 为什么我劝你把浏览器自动化交给 OpenClaw
OpenClaw 的浏览器自动化能力,说白了就是让 AI 像人一样打开网页、点按钮、填表单、抓数据。它底层跑的是 Playwright,但对外暴露的是一套更贴近自然语言的工具接口:navigate 打开页面、snapshot 拿页面快照、click 点元素、type 输入文字、evaluate 执行 JS、screenshot 截图留证。适合谁?适合那些天天跟后台系统、数据看板、需要登录才能看的页面打交道的开发者,尤其是你已经用 OpenClaw 跑通了一些 Skill,现在想让 AI 真正“动手”而不是只“动嘴”。
我试过用纯 API 的方式抓数据,遇到需要登录、页面动态渲染、接口有签名校验的场景就特别难受。浏览器自动化的价值在于:它不关心你后端怎么实现,只要人能点到的,AI 基本都能点到。这篇就聚焦落地配置,给你一份可复制的 Playwright 接入骨架,把 settings.json 里几个关键字段讲透,再带你跑一次完整的网页操作验证,从配置到执行全流程走通。
2. 前置准备:TaoToken 接入与 OpenClaw 环境
OpenClaw 本身不绑定模型供应商,但浏览器自动化里的 snapshot 理解、evaluate 结果分析、多步骤决策,都依赖一个稳定的模型后端。我这边用的是 TaoToken 的 API 接入,原因是它的接口格式跟主流兼容,配置成本低,而且模型对话、Coding Plan、API Keys 都有独立入口,排障时定位清晰。
你需要先拿到 API Key。打开 https://taotoken.net/api-keys 生成一个,注意这个 Key 只在创建时完整显示一次,复制好放安全的地方。如果你还没决定用哪个模型,可以先到 https://taotoken.net/model-chat 试一下对话效果,确认模型对页面结构描述的理解能力够用,再回来配 OpenClaw。
环境侧你需要确认三件事:Node.js 版本不低于 18,因为 Playwright 对运行时版本有要求;OpenClaw 已经装好并能正常启动;系统里没有残留的旧版浏览器驱动冲突。如果你之前装过 Playwright 的全局版本,建议先清一下缓存,避免 OpenClaw 内置浏览器启动时找不到正确的 Chromium 路径。
3. 可复制配置:settings.json 关键字段与 Playwright 骨架
OpenClaw 的浏览器配置集中在 settings.json 的 browser 节点下。下面这份是我实测能跑通的骨架,你可以直接抄,把注释部分按自己环境改掉。
{ "browser": { "mode": "builtin", "headless": false, "timeout": 30000, "viewport": { "width": 1440, "height": 900 }, "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", "remoteUrl": "", "cdpUrl": "", "storageState": "/tmp/openclaw-browser-state.json", "downloadsPath": "/tmp/openclaw-downloads" }, "model": { "provider": "taotoken", "apiKey": "你的_TAOTOKEN_API_KEY", "baseUrl": "https://taotoken.net/api", "model": "claude-sonnet-4-20250514" } }几个字段单独说一下。mode 有三个可选值:builtin 用 OpenClaw 自带的 Playwright 浏览器,开箱即用;cdp 走 Chrome DevTools Protocol,连你本机已经登录的 Chrome,适合需要保持 Cookie 和 Session 的场景;remote 连远程浏览器节点,适合服务器批量任务。headless 建议调试阶段设成 false,你能肉眼看到 AI 在点什么,出问题好定位,跑稳定了再改 true 省资源。
storageState 这个字段很关键,它把登录态持久化到本地文件。你第一次手动登录某个站点后,OpenClaw 会把 Cookie 和 localStorage 写进这个 JSON,下次启动直接复用,不用反复登录。timeout 默认 30 秒,遇到重页面可以调到 60000。
如果你要用 CDP 模式连本机 Chrome,启动 Chrome 时加调试端口,macOS 下是这样:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222Windows 下换成对应路径,Linux 直接google-chrome --remote-debugging-port=9222。然后在 settings.json 里把 mode 改成 cdp,remoteUrl 填http://localhost:9222。这样 OpenClaw 就能接管你当前打开的标签页,登录态天然复用。
4. 验证请求:跑一次完整的网页操作
配置改完,重启 OpenClaw,我们来跑一个最小验证:打开一个页面,抓取标题,截图,再点一个链接。整个过程用 OpenClaw 的 browser 工具链完成。
第一步,navigate 打开目标页。我选一个结构简单的公开页面做演示,避免反爬干扰:
await browser.navigate('https://example.com', { waitUntil: 'networkidle', timeout: 30000 })waitUntil 设成 networkidle 表示等网络请求基本静默后再继续,比默认的 load 更稳,适合动态渲染页面。
第二步,snapshot 拿页面快照。这一步会返回当前 URL、页面标题、所有可交互元素的结构化描述。AI 靠这个快照决定下一步点哪里:
const page = await browser.snapshot() console.log(JSON.stringify(page, null, 2))你会看到类似这样的输出,包含 title、url、以及一个 elements 数组,每个元素带 selector、text、type。这就是 AI 的“眼睛”。
第三步,evaluate 执行 JS 提取数据。比如抓页面所有链接:
const links = await browser.evaluate(() => { return [...document.querySelectorAll('a')].map(a => ({ text: a.innerText.trim(), href: a.href })).filter(l => l.text.length > 0) }) console.log(links)第四步,screenshot 截图留证,方便你回看 AI 当时看到的画面:
await browser.screenshot({ path: '/tmp/openclaw-verify.png' })第五步,click 点一个元素,验证交互链路:
await browser.click('text=More information') await browser.waitForLoadState('networkidle') const afterPage = await browser.snapshot() console.log(afterPage.url)如果 URL 变了,说明点击生效,整条链路跑通。实测下来,从 navigate 到 click 完成,整个流程在 5 秒内结束,比手动开浏览器点一遍快得多。
5. 本篇常见错排查
配置和验证过程中,最容易卡在几个地方。我按出现频率排一下。
第一个,浏览器启动失败,报 Chromium 找不到。这通常是 Playwright 的浏览器没装全。OpenClaw 内置浏览器依赖 Playwright 的 Chromium 包,你可以在 OpenClaw 目录下跑一次安装命令补上。如果之前装过全局 Playwright,版本冲突也会导致这个问题,清掉全局缓存再让 OpenClaw 自己管理。
第二个,snapshot 返回空元素列表。页面还没渲染完就抓了。解决办法是在 navigate 之后加 waitForSelector,等关键元素出现再 snapshot:
await browser.waitForSelector('.main-content', { timeout: 10000 }) const page = await browser.snapshot()第三个,click 报元素不可见或不可交互。很多网站用动态 class,或者元素被遮挡。先用 snapshot 看真实结构,优先用文本选择器text=登录或 aria 属性[aria-label="搜索"],比 class 选择器稳。如果元素在 iframe 里,需要先切 frame。
第四个,登录态丢失。检查 storageState 路径是否可写,以及你是否在同一个 browser context 里操作。跨 context 不会共享状态。CDP 模式下登录态跟着你本机 Chrome 走,一般不会丢。
第五个,被目标站限流。设置合理的 User-Agent,控制访问频率,别在循环里高频 navigate。遇到验证码就停下来,让用户手动介入,这是安全机制,不要试图绕过。
如果你在接入环节卡住,比如 API Key 报错或 baseUrl 配错,直接看 https://taotoken.net/doc 的接入文档,里面把常见返回码和排查步骤列得很清楚。模型侧的问题,比如 snapshot 理解不准,可以到 https://taotoken.net/model-chat 换个模型对比一下。
6. 长期跑自动化,建议上 Coding Plan
浏览器自动化一旦跑顺,你大概率会想把它做成定时任务或者常驻 Agent,比如每天早上抓一次竞品价格、每小时巡检一次后台状态。这种长期编码和 Agent 场景,按量计费的 API 调用成本会慢慢上来,而且你还需要更稳定的并发和更长的上下文支持。
我现在的做法是把长期跑的自动化任务切到 Coding Plan,https://taotoken.net/coding-plan 里有针对持续编码和 Agent 的套餐,额度更可控,适合这种 7x24 跑的场景。短期验证和调试还是用 API Keys 按量走,灵活。两者配合,既不浪费额度,也不担心任务断掉。
配置骨架你已经有了,验证流程也跑通了,接下来就是把你自己的目标站点填进去,调选择器,加等待,慢慢把 Skill 写厚。浏览器自动化的坑大多在页面结构变化和反爬策略上,遇到问题先 snapshot 看现场,再截图对照,基本都能定位。