🤖 浏览器内网考勤单自动化

可行性调研报告 — 考勤助手生态扩展

📌 背景

考勤助手 已能自动计算补考勤单(补签到/补签退/年假),但用户仍需手动登录公司内网考勤 Web 系统逐条填写提交。本调研评估用浏览器自动化替代手动操作的可行性。

一、方案概览

方案A 独立 Playwright 脚本

Node.js 脚本 + Playwright 启动 headless Chromium,自动登录内网系统 → 读取补考勤单 JSON → 逐条填写提交 → 截图存档。

触发方式:用户手动执行 node fill-attendance.js

运行环境:本地/VPS(需连内网或VPN)

执行步骤

  1. 读取补考勤单列表(从考勤助手导出JSON)
  2. Playwright 启动 Chromium,打开内网登录页
  3. 填写账号密码 → 处理验证码(如有则暂停通知用户)
  4. 进入考勤补单页面,逐条填写:日期/类型/工时/时段/来源
  5. 提交 → 截图 → 检查结果
  6. 全部完成后输出汇总报告
// fill-attendance.js 核心骨架 const { chromium } = require('playwright'); const fixList = require('./fix-list.json'); (async () => { const browser = await chromium.launch({ headless: true }); const page = await browser.newPage(); // 1. 登录 await page.goto('https://oa.company.com/login'); await page.fill('#username', process.env.OA_USER); await page.fill('#password', process.env.OA_PASS); await page.click('button[type=submit]'); // 2. 逐条填写 for (const fix of fixList) { await page.goto('https://oa.company.com/attendance/new'); await page.fill('#date', fix.date); await page.selectOption('#type', fix.type); await page.fill('#hours', String(fix.hours)); await page.fill('#period', fix.period); await page.click('button[type=submit]'); await page.screenshot({ path: `screenshots/${fix.date}.png` }); } await browser.close(); })();

✅ 优点:开发简单、单文件可维护、结果可截图审计

⚠️ 缺点:需手动触发、内网/VPN依赖、验证码需人工介入

方案B Hermes 工具/技能集成

做成 Hermes 的一个 skill,用户在 Discord 对话中说「帮我填上个月考勤单」→ Hermes 调用考勤助手计算 → 调用 Playwright 自动填写 → 结果反馈到 Discord。

触发方式:Discord 对话自然语言指令

运行环境:VPS(Hermes 服务器)

交互流程

  1. 用户在 Discord: 「帮我填 7 月考勤单」
  2. Hermes 解析意图 → 调用考勤助手计算
  3. 生成补考勤单列表 → 预览发送到 Discord
  4. 用户确认 → Hermes 调用 Playwright skill
  5. 自动登录内网 → 逐条填写提交
  6. 每步截图发 Discord → 全部完成汇总

✅ 优点:对话式触发、实时反馈、全流程自动化、集成考勤助手

⚠️ 缺点:开发复杂度高、依赖 Hermes 框架版本、VPS 需连通内网

二、方案对比

维度方案A: 独立脚本方案B: Hermes 工具
触发方式手动执行命令Discord 对话指令
开发复杂度 单文件脚本 需集成 skill 框架
运行环境本地 / VPSVPS (Hermes 服务器)
维护成本 依赖 Hermes 版本
凭证存储环境变量 / 加密文件Hermes 加密配置
结果反馈终端输出 + 截图文件Discord 消息 + 截图
错误恢复脚本重跑对话中重试指令
适用场景每月一次性批量填写持续使用 / 临时补单

三、风险矩阵

风险概率影响降级方案
登录页有图形验证码阻断自动登录脚本暂停,通知用户手动输入验证码后继续
内网需 VPN 才能访问VPS 无法直连脚本在连了 VPN 的本地机器运行
考勤表单 DOM 结构变化填写失败脚本检测 DOM,失败时截图 + 报警,手动修复选择器
提交频率限流部分被拒每条之间加 2-5 秒随机延迟,模拟人类操作
账号密码泄露安全风险使用系统 keyring 或加密环境变量;代码中不硬编码
Session 超时中途掉线每次操作前检查登录态,过期自动重新登录

四、流程图

方案对比流程图

五、推荐方案

🎯 渐进式路线图:先 A 后 B

实现方案A
独立 Playwright 脚本
1-2天开发
快速可用
脚本稳定运行
积累真实数据
2-3个考勤周期
验证可靠性
升级为方案B
Hermes 工具集成
对话式触发
持续使用

理由:

六、前置条件(实现前需确认)

#待确认事项重要性
1内网考勤系统的 URL 和登录方式(账号密码/SSO?)必须
2补考勤单页面的表单字段结构(日期/类型/工时/备注等)必须
3是否有图形验证码?频率如何?必须
4VPS 是否能直连内网?还是需要 VPN?重要
5提交是否有频率限制?重要
6单次 session 有效期多久?建议