你可能正卡在这一步:想让模型自己打开网页点几下、填个表、抓点数据,结果翻了一圈发现叫法五花八门,有的说是 skill,有的说是插件,有的干脆塞进 Agent 工具里,不知道从哪下手。这篇不解释原理,只给一套可执行的挑选顺序——先判断页面属于哪一档,再看登录态和验证码怎么处理,最后确认失败重试与日志留痕怎么做。看完你能自己列出一份候选项,而不是在词条里打转。
你可能正卡在这一步:想让模型自己打开网页点几下、填个表、抓点数据,结果翻了一圈发现叫法五花八门,有的说是 skill,有的说是插件,有的干脆塞进 Agent 工具里,不知道从哪下手。这篇不解释原理,只给一套能直接照着走的挑选顺序——先判断页面属于哪一档,再看登录态和验证码怎么处理,最后确认失败重试和日志留痕怎么做。看完你能自己列出一份候选项。
一个前提先说清楚:浏览器自动化不是越重越好。能用接口或现成的页面结构直接拿数据,就别开浏览器。开浏览器意味着你要额外承担会话管理、渲染等待、资源占用这几类问题,只有页面确实需要交互时才值得。判断标准放在下面第一档里。
先给页面分档,再谈挑组件
把目标页面按交互复杂度分三档,档位决定你选哪一类技能组件。别跳档,也别为了省事把简单页面往重方案上做,后面维护成本全落在你身上。拿不准某个技能属于哪一类,到 /skills 对照它的能力描述与依赖条件。
| 页面档位 | 典型特征 | 适合的组件类型 | 不适用的情况 |
|---|---|---|---|
| 一档:静态可抓 | 内容在返回的 HTML 里,无需点击 | 轻量请求类,不开浏览器 | 页面依赖前端渲染时才拿得到数据 |
| 二档:常规交互 | 需要填写、点击、翻页、等待按钮出现 | 浏览器自动化类,带条件等待能力 | 站点风控严格、频繁跳验证页 |
| 三档:重渲染+反爬 | 数据异步加载,有滑块、验证码、风控跳转 | 带会话复用与指纹管理能力的方案 | 合规边界不清、拿不到授权访问 |
| 兜底:接口直取 | 站点本身有稳定的数据接口或导出入口 | 优先用接口,浏览器只做登录换取凭据 | 接口频繁变更且无文档 |
- 先问自己:不点任何按钮,能不能拿到目标数据?能就归一档
- 需要几步交互就能完成?三步以内视为二档,超过且页面结构易变,先考虑拆分任务
- 页面有没有验证码或风控跳转?有就先确认合规性,别把绕过当成默认能力
- 同一站点是否已有别人写好的接口封装?有就优先复用,别重复造
登录态、会话与凭据怎么管
登录态是浏览器自动化里最容易被低估的一块。多数失败不是点击点错了,而是跑到一半被踢回登录页,任务静默返回空数据,你还以为选择器写错了。常见做法是复用已登录的浏览器上下文,或把会话目录持久化下来,避免每次重新走登录流程。
- 确认会话来源搞清楚登录态从哪来:手动登录后复用上下文,还是用凭据换 cookie。前者的稳定性通常更好,适合人工值守场景
- 把凭据移出配置凭据不要明文写进技能配置,走环境变量或独立凭据存储,团队协作时尤其注意,配置文件一旦进仓库就收不回来了
- 验证过期识别故意让会话过期跑一次,看组件能不能识别「被踢回登录页」并明确报错,静默返回空数据是最难查的坑
- 确定多账号隔离粒度多账号轮换时先想清楚:共用一个浏览器实例,还是每个账号独立上下文。隔离太细资源吃紧,太粗会串号
验证码这里要单独说一句:遇到需要人工介入的页面,合理的做法是把任务挂起、截图、通知人处理,而不是默认组件能自己过掉。组件之间在这件事上的能力差异很大,选型时把它当成一个显式的检查项。
稳定性:等待策略、重试与降级
稳定性的第一原则是把「等」写对。固定延时等待是最不可靠的写法,页面快的时候白等,慢的时候照样失败。优先用元素可见、网络空闲这类条件等待,让组件自己判断时机。
第二原则是把重试分类。网络抖动、临时超时这类可以重试;元素不存在、页面结构变了,重试多少次都没用,只会浪费时间。给每个步骤设总超时,别让一次卡死拖垮整批任务,超时阈值可以参考 /api-timeout-tuning 的分档思路。
- 条件等待
- 等元素可见或网络空闲,而不是等固定秒数
- 可重试失败
- 网络抖动、临时超时、限流返回,适合退避重试
- 不可重试失败
- 元素找不到、页面结构变更、跳转到了预期外地址
- 降级路径
- 失败后截图加人工确认,或换用接口方式兜底,别让任务直接死掉
- 给整个任务设总超时,给单步设软超时,两级都要有
- 重试次数和退避间隔写进配置,别散落在代码里,方便后期统一调
- 失败时保留现场:截图、当前 URL、关键元素的 HTML 片段
- 批量任务里单条失败不要中断整批,标记出来最后统一看
留痕、评测与上线前检查
日志不是给自己看的仪式感,而是排查时唯一的依据。每一步至少记这几项:目标页面、选择器或动作、耗时、结果状态、失败时的页面快照。缺了快照,页面改版后你只能靠猜。
| 记录项 | 为什么记 | 缺失后果 |
|---|---|---|
| 目标页面与步骤名 | 定位是哪一步出的问题 | 排查时只能靠复现碰运气 |
| 选择器或动作描述 | 页面改版后快速定位失效点 | 改版排查时间成倍上升 |
| 耗时与重试次数 | 区分偶发慢和结构性变慢 | 性能退化发现不了 |
| 结果状态与错误类型 | 判断是可重试还是不可重试 | 无效重试拖长任务 |
| 失败页面快照 | 还原当时页面长什么样 | 无法区分是风控还是选择器问题 |
上线前准备一小批代表性页面做回归用例,页面改版后先跑这批用例,别直接在生产任务上试。日常盯三个指标:成功率、平均耗时、重试次数。指标掉下去往往早于用户反馈。
最后提醒资源这一项:浏览器方案的资源占用和并发要单独算,开太多实例会拖慢机器甚至互相干扰。上线前到 /tools/speed-test 量一下本机基线,再决定并发开多少。组件之间的可信度与历史表现,可以到 /sites 看当时的记录,别只看别人的一句评价。
下一步把你要跑的站点按三档归类,列出候选项,再到 /skills 逐个对照能力描述与依赖条件,筛出真正匹配的那一个。→常见问题
浏览器自动化 skill 和 MCP 服务器是一回事吗?
不是。skill 更像是打包好的一段能力说明加执行逻辑,MCP 是模型调用外部工具的传输与注册方式。同一个浏览器操作既能做成 skill 也能做成 MCP 工具,区别在于复用方式和接入成本。想弄清两条路径的差别,去 /mcp 和 /skills 各翻一遍就能看出定位不同。
一定要用浏览器吗,能不能直接调接口?
能用接口就别开浏览器。浏览器方案吃资源、速度慢、页面一改版就崩,接口方案稳定得多。只有在目标站点没有公开接口、或者必须依赖真实登录态和前端渲染结果时,浏览器自动化才划算。选之前先花十分钟看看有没有现成接口。
页面改版后整批任务都失败了,怎么快速恢复?
先确认是选择器失效还是登录态过期,这两类的表现很像但修法完全不同。把失败样本的截图和当时的 DOM 留下来对比,通常几分钟就能定位。恢复后别忘了把这次的页面结构变化补进回归用例,避免下次再踩同一处。