每周五下午填工时,真的贼烦。
打开网页,登录,点进去,一个个项目填数字,保存…一套流程下来至少 10 分钟。而且每次都要想"这周这个项目填多少小时合适",还得保证每天 8 小时,每周 40 小时。填错了还得重来。
后来发现 Claude Code 的 MCP Chrome DevTools 服务器可以操控浏览器,就想:能不能让 AI 帮我填?
试了一下,还真行。
现在每周只要在终端输入 /fill-workhours,剩下的全自动。
技术方案
用到了这几个东西:
- Claude Code: Anthropic 官方 CLI,就是命令行版的 Claude
- MCP Chrome DevTools Server: 让 AI 能操控浏览器的工具
- Slash Command: Claude Code 的自定义命令功能
思路很简单:写一个 Slash Command,告诉 Claude “打开工时系统,分析当前状态,按规则填写,保存”。
Claude 会调用 MCP 工具去操作浏览器,就像你在手动操作一样。
配置 MCP Server
在 Claude Code 的配置文件中加几行:
1 | { |
这会启动一个 MCP 服务器,提供一堆浏览器操作工具(点击、填表单、截图等)。
配置好了就不用管了,每次 Claude Code 启动会自动加载。
写 Slash Command
在项目根目录创建 .claude/commands/fill-workhours.md,这就是自定义命令的配置文件。
完整内容挺长的,核心是告诉 Claude 三件事:
1. 怎么操作浏览器
1 | 1. **打开页面并导航** |
2. 工时填写规则
这是业务规则,得写清楚:
1 | **约束条件:** |
3. 出问题了咋办
1 | - 找不到元素 → 立即截图分析 |
完整的 Slash Command 配置可以参考初稿,里面写得很详细。
几个优化技巧
最开始我写的版本,每一步都截图确认。结果特别慢:
- 截图 10 次
- 执行时间 60 秒
- Token 消耗 50K
后来优化了一下:
减少截图
优化前: 打开页面 → 截图 → 点菜单 → 截图 → 点按钮 → 截图…
优化后: 打开页面 → wait_for 等关键元素出现 → 直接操作 → 只在必要时截图
为啥?因为截图很贵(Token 消耗大),而且慢。
wait_for 等元素出现就继续,不需要截图确认。
用 wait_for 替代 sleep
别写 sleep 5,写 wait_for("填报", timeout: 10000)。
前者固定等 5 秒,后者元素出现就继续,最多等 10 秒。省时间。
批量操作
别一个个填:
1 | fill(uid1, "2") |
用批量填写:
1 | fill_form([ |
一次搞定,省工具调用次数。
优化后效果:
- 截图 2-3 次
- 执行时间 15 秒
- Token 消耗 30K
快了 4 倍,省了不少 Token。
MCP 工具速查
这个项目用到的主要工具:
| 工具 | 用途 | 示例 |
|---|---|---|
| new_page | 打开新页面 | new_page(url) |
| wait_for | 等待元素出现 | wait_for(“填报”, timeout: 10000) |
| take_snapshot | 获取页面文本快照 | take_snapshot() |
| take_screenshot | 截取页面图片 | take_screenshot() |
| click | 点击元素 | click(uid) |
| fill | 填写单个表单 | fill(uid, “2”) |
| fill_form | 批量填写表单 | fill_form([{uid, value}]) |
| press_key | 按键操作 | press_key(“Escape”) |
take_snapshot 返回的是基于可访问性树的文本内容,不是图片,所以很快。适合分析页面结构。
怎么用
配置完成后,在 Claude Code 终端输入:
1 | /fill-workhours |
Claude 会自动:
- 打开浏览器访问工时系统
- 导航到填报页面
- 分析当前工时数据
- 根据规则填写
- 保存
整个过程 15 秒左右,完全不用管。
我现在每周五下午就敲一下这个命令,然后该干嘛干嘛去。
能用在哪些场景
这个方案本质上是"用自然语言描述浏览器操作流程",Claude 负责执行。
所以理论上任何重复的网页操作都能自动化。
我试过的:
- 批量生成周报(每周一自动生成)
- 定期检查服务器状态(每小时跑一次)
- 自动化测试某个功能(发布前跑一遍)
理论上能做的:
- UI 自动化测试
- 数据采集(定期抓网页数据)
- 批量表单填写(批量报名、批量提交)
- 监控告警(页面有变化就通知)
- 复杂的 RPA 流程
关键是 Slash Command 要写清楚:
- 操作步骤(一步步怎么做)
- 业务规则(什么能做,什么不能做)
- 异常处理(出问题了咋办)
踩过的坑
1. 页面元素定位不准
如果页面结构复杂,Claude 可能找不到元素。
解决办法:
- 在 Slash Command 里多给点提示(比如"点击文本为’填报’的按钮")
- 或者用 CSS 选择器
2. 网络延迟
如果页面加载慢,wait_for 的 timeout 要设长一点。
我设的是 10 秒,对于慢网络可能不够。
3. 登录态失效
如果工时系统需要登录,得先手动登录一次,保持 Cookie。
不然 Claude 打开页面会跳到登录页。
我的做法是:浏览器保持登录状态,每次跑脚本前确认下还没过期。
4. 页面改版
如果工时系统改版了,可能需要调整 Slash Command。
不过一般小改动 Claude 能自己适应,大改版可能得重新写。
为啥值得做
填工时每次 10 分钟,一年 52 周,就是 520 分钟 ≈ 8.7 小时。
花 1 小时写个自动化脚本,一年省 8 小时。这笔账划算。
更重要的是,这个思路可以复用到其他重复劳动上。我后来又写了几个 Slash Command,每个都省不少时间。
而且配置真的简单。不用写 Python 或 JavaScript,纯文本描述流程,Claude 自己理解。维护成本也低,页面小改动基本不用改脚本。
和传统脚本的区别
用 Claude Code 做自动化,和传统的 Selenium/Playwright 脚本比:
优点:
- 不用写代码: Slash Command 是纯文本描述
- AI 处理变化: 页面小改动,Claude 可能自己适应
- 自然语言调试: 出问题了直接看日志,不用调试代码
- 配置快: 从零到能跑,半小时搞定
缺点:
- 不如代码稳定: AI 有时会理解偏差,偶尔需要重跑
- Token 有成本: 虽然不贵(一次大概 0.01 元),但不是完全免费
- 需要环境: 得装 Claude Code,不能直接丢到服务器上定时跑
所以我的用法是:
- 偶尔用的任务 → 用 Claude Code(比如填工时,每周一次)
- 高频稳定的任务 → 还是写传统脚本(比如每分钟跑一次的监控)