做 EH 最早的动力,其实就是想偷懒。浏览器里重复操作太多:看页面、找内容、点控件、切页面,想让电脑替自己干。V2EX 用户 niuheishou 在构建网页感知系统 EH 时,最先面对的工程决策是:让模型看,还是让代码看。
他最早选了模型。给自己做了一整套 YOLO 标注工具,设计标注规则,一条条手工标注,最投入的三天只睡了十二小时,攒出大约两千三百条基础训练语料。训练结果看着不错,真正放进页面就出了问题:语料基本来自固定的浏览器分辨率和缩放比例,他手工标注时的偏差被模型认真学了进去。大元素还能凑合,小元素的框经常偏得离谱——一个看起来不大的误差,落到按钮上,就可能决定这一下到底点中了什么。
接下来整整三个月,他都在跟这些框的抖动较劲。加几何先验,试 GNN 纠偏,做形态学膨胀;重新标注,重新训练,再补不同缩放和分辨率下的数据。每次都觉得离解决问题近了一点,换个页面状态,又有新的偏差。
转折点来自 DOM。他后来这样描述当时的感受:浏览器已经知道一些事情,他却还在让模型从像素里重新猜一遍。DOM 进入系统后,最先改变的是标注——原来靠手一点点画齐的框,开始能由代码按照统一规则生成,手工标注的不一致少了,围绕标注修修补补的工作也轻了很多。
但模型本身的问题没有解决。训练出来的模型依然会抖,加大模型、提高输入分辨率,页面里的偏差还是没彻底消失。问题逐渐变了:到底还要在这条路上补多久,才能得到自己想要的稳定结果?
于是原型开始转向。他把自己对页面的判断拆开,一条条写成代码——哪些是内容,哪些是控件,什么情况下可以行动,什么情况下应该停下来。原来存在于脑子里的主观判断,逐渐变成了可以反复执行、可以检查的规则。
这个过程很慢,但第一次让他看到了另一种可能:不必一直追着模型输出的框修偏差,也可以先把自己理解页面的过程讲清楚,再让代码去执行。单站终于跑起来之后,他面临下一个问题——通用性。一个站点大约需要一份 200KB 的 JSON 配置,换一个站又得继续适配。花了大约一个月分析哪些东西可以跨站复用、哪些只是站点经验,又花了两个月,第一个能够跨站复用的引擎总算成形。
到 2026 年 4 月,他做了系统性测试。六个站点(小红书、B 站、淘宝、Pinterest、Reddit、TikTok),共 21 次运行,关注采集吞吐量和变异系数。结果落在 1.42% 到 8.34% 之间:Pinterest 每分钟 78.90 条 Pin,CV 1.42%;B 站每分钟 50.9 张内容卡,CV 2.70%;TikTok 每分钟 5.70 个视频,CV 3.10%;小红书每分钟 40.0 张内容卡,CV 5.83%;淘宝每分钟 28.03 张商品卡,CV 7.85%;Reddit 每分钟 15.63 条帖子,CV 8.34%。
分辨率方面,他拿 TikTok 视频切换路径做了五组窗口和缩放条件测试,覆盖笔记本基准窗口、125% 浏览器缩放、较窄窗口、4K 和 2K 原生模式。五组合计记录 150 个视频源,145 次切换全部成功,没有卡住。对被模型框抖动折磨过三个月的人来说,这个结果确实让人安心。
但作者自己划了边界:这主要验证了视频切换这一条路径,并没有证明所有站点的所有操作都能适配所有分辨率。小红书在窄窗口下切换布局时,早期依赖固定区域的配置仍然会遇到问题。每站只有三到六次运行,是小样本观察;CV 衡量的是吞吐波动,不能当成识别准确率或任务成功率;各站采集对象不同,吞吐量不宜直接横向排名。
这些测试都属于 2026 年 4 月、仍然使用站点配置的早期引擎实验。同一套框架能在几个站点运行是一次进展,换内容、换窗口后仍然稳定是下一步,至于减少站点配置、降低维护负担,还需要继续往前走。作者说,为了让电脑少依赖自己,他先得把自己习以为常的判断一点点讲清楚。
信息源:V2EX