微信传输助手网页文件发送器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_624d48d2/wechat-filehelper-upload。
技能介绍
问题
qqbrowser-skill 的 38 条 browser_* 命令里没有 upload 或 setfileinput_files 这类能力,遇到需要上传文件的网页时就没有直接可用的入口。微信文件传输助手网页版恰好是这种情况:文件要先进入上传控件,再由页面加入待发送列表,最后点击发送。缺少上传命令意味着只能绕道页面上下文。
工作方式
这个技能用 browser_eval_content_js 在页面里手工构造一次上传:
- 先用 Python 把本地文件编码成 base64,连同文件名记录下来;
- 再用
browser_eval_content_js注入一个 IIFE 包裹的脚本:脚本内部以atob加Uint8Array还原文件字节,构造File对象,装进DataTransfer,赋值给上传控件的.files,最后触发change事件; - 页面接收后应出现文件名与大小文本,之后重新执行
browser_snapshot拿到最新的发送按钮索引,点击完成发送; - 最后用
browser_wait等几秒,再用 eval 脚本核对聊天列表里出现了对应文件名。
因为全程都在页面上下文里完成,不需要操作系统弹出文件选择对话框,也不需要用户手动干预。
适用边界与注意点
- 脚本必须包在 IIFE 里:
browser_eval_content_js是在全局作用域执行,直接写const input = ...可能撞上页面已有变量,报 Identifier has already been declared;一律用(function(){ ... })(),并把局部变量换成var inp这类短名。 - 中文与二进制要安全:文件内容必须 base64 编码后走
atob+Uint8Array构造,直接塞字符串会破坏编码。 - 重复注入会重复发送:每次注入都会往待发送列表加一条,如果页面里已有未发送的项,必须先发送或清理,否则同一个文件会被发多次。
- 发送按钮可能初始 disabled:点击前先检查并移除
chat-send__button__disabled,再用 mousedown/mouseup/click 的鼠标事件序列触发,否则点击无效。 .files被清空不代表失败:注入后控件的 files 可能立即变成 0,这是页面已消费文件的正常表现。- 索引会失效:每次命令执行后 DOM 都会变化,点击前务必重新执行
browser_snapshot。 - 结果要筛选:
browser_*命令的输出里混着整页快照,用grep "Result:"或grep -oE "Result: .*"提取实际结果,避免长文本干扰。
使用场景
- QQ浏览器自动化脚本遇到需要上传文件的网页,而browser命令没有上传入口,需要绕道页面上下文补上这一步。
- 想把本地txt或二进制文件发送到微信文件传输助手网页版,且不希望弹出操作系统的文件选择框。
- 执行qqbrowser-skill时发现无法直接设置file input的.files,需要用browser_eval_content_js构造File与DataTransfer完成注入。
- 上传后需要确认文件是否进入待发送列表、发送按钮是否因disabled点击无效,并按最新快照索引重新点击。
适合人员
- 用qqbrowser-skill做浏览器自动化的工程师,需要在缺少上传命令的页面补全文件上传能力。
- 维护微信文件传输助手网页版脚本的开发者,想把本地文件静默推入待发送列表并完成发送。
- 编写Agent工具链、需要绕过系统文件选择框的自动化工程师。
- 排查注入上传失败、需要理解DataTransfer与change事件机制的前后端工程师。