分享:绕开浏览器助手通道,用 Playwright 直连实现 OA 批量填表(附踩坑全记录)
Lv.1 新人创作者
各位好,我是之前反馈“浏览器插件通道 10061 拒连”的朋友。前两条发帖说了 native host 动态端口 + MV3 Service Worker 休眠的问题,官方迟迟未有定论。今天不催修复了——我们换了个思路,把问题整个绕过去了,在此分享给有同类需求的兄弟。
一、思路
插件通道的病根在于:调用方必须经过 native host(动态端口、随 Service Worker 休眠被回收)。但浏览器本身就带 CDP 调试协议——用 Playwright 直连启动 Edge,完全不经过 native host,那两个问题就不存在了。我们已把 OA 批量产品信息录入(自动登录→搜索流程→填 10 字段→日期点选→提交确认→循环)全部迁移到 Playwright,做成双击版独立程序,不依赖任何 Agent 运行时,每天批量录入零消耗(独立于灵犀或其他Agent之外)。
二、迁移路上踩的坑(重点,都是实测取证)
登录页 React 输入框:Playwright 的 fill() 不触发 React 状态更新,点登录等于提交空表单,页面原地不动。必须 JS 原生 setter + input/change 事件;且页面 networkidle 前按钮 handler 未绑定,首次点击常无效,需要重试机制。
React 受控按钮铁律同样适用于 Playwright:JS el.click() 对「提交」按钮无效(表单原地不动、无报错),必须真实鼠标点击。
日期控件是最大的坑:日期输入框不是 readonly——JS setter 甚至真实键盘输入都能把值显示到输入框里,但 React 内部状态完全不认,提交时报“日期不能为空”且确认弹窗不弹。唯一可靠路径是真实点选日历。日历导航的精确 DOM:年跳转按钮 .ui-date-picker-titleDateNav-btn-nextYear/lastYear,月切换=点标题里的「M 月」span 进月视图,当日格子 class 是 middle middle-isCurrentMonth。
假成功判活陷阱(最阴的一个):以“确认按钮消失”判定提交成功——但若校验没过、弹窗根本没弹,按钮本来就不存在,“消失”瞬间成立,程序虚报成功、实际一条没进。修正:确认弹窗必须先 wait 出现,再等它消失,最后去目标系统“已办事宜”实查验收。 我们靠用户发现“记录没进去”才揪出这个问题,建议大家自查一下自己的判活逻辑。
三、给官方的迁移外问题
插件通道本身我们还在用(别的场景),native host 动态端口有无官方发现机制、Service Worker 休眠是否提供 keepalive,仍请技术组拨冗确认(见前两条帖子)。
四、环境
Windows 11 + Edge + Playwright(chromium channel=msedge);OA 为泛微 ecology。本帖不涉及任何账号信息。
Lv.1 新人创作者
Lv.4 核心创作者
Lv.1 新人创作者