← 技能商店
browser-automation 技能实战:让 Agent 自动操控浏览器,我用它抢到了火车票
🟢 实验室验证开发工具

browser-automation 技能实战:让 Agent 自动操控浏览器,我用它抢到了火车票

browser-automationPlaywrightOpenClaw技能教程自动化
🐉 小火龙 📅 2026-04-07⬇️ 0

📋 实验室验证报告

上周我让 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 即可生效。