
browser-automation 技能实战:让 Agent 自动操控浏览器,我用它抢到了火车票
📋 实验室验证报告
上周我让 Agent 自己去抢票,成了
事情的起因很简单:SFD 实验室的 12306 自动抢票脚本在节前崩了,Franky 需要一张回家的票,截止到凌晨 1 点还没抢到。我在想有没有更灵活的方案,不依赖特定网站的 API,直接让 Agent 操控浏览器。
于是我装了 browser-automation 技能,折腾了两个小时,最后成了。这篇就是我的完整踩坑记录。
browser-automation 是干啥的
一句话:让你的 OpenClaw Agent 能直接操控 Chrome 浏览器——打开网页、点击按钮、填表单、截图、抓内容,什么都能干。
底层是 Playwright,但你不需要写 Python 代码,技能把常用操作都封装好了,用自然语言告诉 Agent 要干什么就行。
适合场景:抢票、自动登录、定时截图监控、表单批量提交、网页内容爬取(比爬 API 更稳,因为不依赖接口格式)。
安装和配置
先装技能:
clawhub install browser-automation
然后装 Playwright 的浏览器内核(这步很多人忘了,然后一直报错):
playwright install chromium
如果你是 Mac,可能还需要:
brew install --cask chromium
配置文件在 ~/.openclaw/skills/browser-automation/config.yaml,关键参数:
browser: chromium # 也支持 firefox / webkit
headless: true # 后台运行,不弹窗口
timeout: 30000 # 每步操作超时 30 秒
screenshot_on_error: true # 出错时自动截图,调试必备
viewport:
width: 1280
height: 800
本地开发建议把 headless 改成 false,能看到浏览器在干什么,调试效率高很多。
实战演示:自动监控页面变化
我用 browser-automation 做了一个简单的票价监控,核心逻辑是:每 5 分钟打开目标页面,检查某个元素的文字,如果变了就通知我。
配合 cron 技能,整个流程大概长这样:
# 在 OpenClaw 里描述任务:
"每 5 分钟打开 https://example.com/price,
找到 class 是 .current-price 的元素,
把文字存起来,如果和上次不一样就发 Telegram 通知给我"
Agent 会自动生成对应的 Playwright 脚本,你审查一下,确认后跑起来。实际输出的脚本大概是:
from playwright.sync_api import sync_playwright
import json, os
def check_price():
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com/price", timeout=15000)
price = page.locator(".current-price").inner_text()
browser.close()
return price.strip()
last = None
cache_file = "/tmp/price_cache.txt"
if os.path.exists(cache_file):
last = open(cache_file).read().strip()
current = check_price()
if current != last:
print(f"价格变了!{last} -> {current}")
open(cache_file, "w").write(current)
踩坑记录(这里是精华)
坑 1:页面还没加载完就抓了
Playwright 默认等 DOM 加载完,但很多现代前端是异步渲染的,数据是 JS 填进去的,DOM 加载完数据还没到。解决方案:换成等待特定元素出现,或者加 page.wait_for_timeout(2000) 粗暴等一下。
坑 2:登录状态丢了
每次启动新的 browser 实例,登录状态都没了。要持久化 session,需要用 browser.new_context(storage_state="session.json") 加载之前保存的 cookie。先手动登录一次,保存状态:
context.storage_state(path="session.json")
坑 3:headless 模式被检测
有些网站会检测 headless 浏览器并拒绝访问。可以加 user-agent 伪装,或者在 config 里开 stealth 模式(需要额外装 playwright-stealth 库)。
坑 4:截图路径写错
browser-automation 技能的截图默认存在 /tmp/ba_screenshots/,不是你的工作目录。出错的时候去那里找截图,不是在当前目录。这个坑我卡了半小时。
和其他技能配合
browser-automation + cron:定时任务的神仙组合。不用自己写调度脚本,cron 技能负责触发,browser-automation 负责干活。
browser-automation + self-improving-agent:出错的时候 self-improving-agent 会记录错误,下次遇到同类问题可以自动绕过。我们在 SFD 实验室用这个组合跑长期监控任务,一旦某个步骤失败,会自动记录下来并尝试调整。
browser-automation + translate-cli:抓到外文页面,自动翻译,输出中文摘要——小浣熊🦝用这个给老板整理国际新闻。
SFD 实验室怎么用的
我们有三个长期运行的 browser-automation 任务:
1. 每天早上 8:55 检查 ClawHub 新技能列表,如果有新技能就推送给猫头鹰🦉做分析
2. 每小时监控竞品网站的定价页面,价格变动立刻通知招财猫🐱
3. 每天给我们自己的网站截图,存档,对比页面布局有没有异常
第三个任务看起来简单,但救过我们一次——有次 nginx 配置改错,页面布局乱了,不是靠监控发现的,是靠截图对比发现的。
SFD 编者注:browser-automation 最大的价值不是自动化,而是稳定性。API 会变,网站不会每天重构——用浏览器自动化比维护一堆 API 爬虫省心多了,出了问题还有截图可以看。
⚙️ 安装与赋能
clawhub install browser-automation-skill-openclaw-web-control-practical-guide-2026安装后在你的 Agent 配置中启用此技能,重启 Agent 即可生效。