Repository navigation
我为了让 AI 用我自己的登录态上网,踩了三个坑(附复现脚本) #8685
Closed
miqian-nomad
started this conversation in
Show Your Plugins!
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
我为了让 AI 用我自己的登录态上网,踩了三个坑(附复现脚本)
个人开发者,做了个 DSH 浏览器插件:让 agent 用你已经登录的账号在真实网页上填表、抓取列表、多标签查后台;窗口就开在你桌面上、最小化它不抢焦点;遇到登录、验证码、原生弹窗会停下来等你,绝不替你点「确定」。
仓库:https://github.com/miqian-nomad/dsh-browser-playwright-codex
安装:
dsh plugin --profile web add github:miqian-nomad/dsh-browser-playwright-codex发这篇不是求星,是交作业 + 收批评 —— 下面四条都是我在真机上量出来的,不是感想。
1. 窗口抢焦点有三个独立根因,两个在 Playwright 上游
有头模式跑 agent,最烦的是"我明明最小化了,它自己跳出来"。查到三个互不相同的原因:
switchTab无条件page.bringToFront()(上游代码里就有这行)context.newPage()—— Chromium 建标签必然激活窗口storageState()会开一个临时页面导航到未覆盖的 origin第 3 条最隐蔽:你以为"它自己跳",其实是它为了保存登录态开了个隐藏页面。
复现脚本 60 行,不依赖我的插件,只用 CDP 读窗口状态:
scripts/analysis/repro-minimize.mjs。完整四环机制(含
storageState源码位置):FOCUS-STEALING.md一个刻意的例外:网页自己
target="_blank"开的新窗口,我不拦 —— 拦它就得偷改网页跳转方式;而且它有个好副作用:你立刻知道 AI 正在那个新窗口里动。2. "登录一次一直记得"的难点全在会话 cookie
持久 cookie 关窗后还在(profile 里);会话 cookie 关窗即丢。所以做法是:独立 profile + 关窗前导出/启动时回注。
但导出本身会触发上面第 3 条 —— 所以最小化时要跳过完整导出、只取 cookies,否则修好抢焦点又被导出拽回去。
3. 一个会静默点错元素的 bug(已修)
我的"智能模式"曾把 DOM 侧的 ref 列表按位置贴到无障碍树上。网页上只要有一个"无障碍树看不见、但 DOM 侧仍被编号"的元素(SPA 重渲染留下的 0×0 残留),后面每个 ref 就整体错位。
实测在某个 React 页面上:快照把输入框标成
…411,而…411其实是个隐藏链接,真正的输入框是…423—— 于是填充报"元素不可见",点击报"找不到可点位置"。更糟的情况是错位到另一个可见元素,就会静默点错。修法:DOM 侧跳过不可见元素 + 对齐层改为校验身份(角色不符就拒绝整棵树、退回兼容模式),并在验收里加了"隐藏元素故意排在按钮前面"的端到端用例。
4. 遇事停下来等人(机制级,不是提示词级)
alert/confirm/prompt挂起、阻断该页其它操作、上报,只由一次显式的回答来结清 —— 接口层面拿不到"接受"这个动作,所以不存在"不小心点了确定"。CDP 只放行检查与输入模拟;两个强力工具(页面任意 JS、原始 CDP)包里默认关闭。
第三方扫描器会报 2 个 Critical,逐条解释(是什么、什么条件下才可达)在这里:
SECURITY.md
你可以怎么验(不用信我)
我更想知道的是:它在你们常去的网站上哪里会挂
我个人测过的站点有限。如果你试了,欢迎回帖告诉我卡在哪一步 —— 尤其是:
批评同样欢迎,直接说哪块设计不对就行。
All reactions