图片死活传不上去:事件是有出身的

简介: 阿杰的自动上传卡在媒体库:合成拖放处理器触发了,图却死活传不上去。老陈一句话点破:事件有出身,isTrusted 才是入场券。cda v0.26.0 的 trusted 拖放让浏览器替你拖——自己读盘、构造真实 File、盖章 isTrusted=true。

周日晚上十点,阿杰的公众号自动化就差最后一步:封面图自动上传。

他翻遍了媒体库页面,连一个 input[type=file] 都没找到。整个上传区就是一块虚线框,上面一行小字:把图片拖到这里。

阿杰不慌。cda 有 upload_dragdrop,专门收拾这种只认拖拽的组件——派发 dragenter、dragover、drop,把文件塞进 dataTransfer,页面自己的 drop 处理器接手上传。他上周刚用过,一次成功。

这次他敲了命令,返回 success。页面上那个虚线框闪了一下,进度条跳出来又缩回去。

然后,没了。

图没上去。

阿杰盯着屏幕看了十秒,重跑。虚线框再闪一下,进度条再跳一次,图还是没上去。第三遍的时候他已经在 console 里埋好了日志——drop 处理器明明执行了,文件也在 dataTransfer.files 里躺着,可页面的上传逻辑就是装死。

他顺着断点往里翻,最后停在一行判断上:

if (!event.isTrusted) return;

event.isTrusted: false。

阿杰瞬间不困了,但也更糊涂了:事件是他发的,处理器也跑了,就差这一个布尔值,卡死了整个流程。


第二天早上,老陈端着咖啡路过,看见阿杰的黑眼圈,瞥了一眼屏幕上的断点。

「你在跟浏览器的信任体系较劲。」老陈说,「事件是有出身的。人手拖出来的,isTrusted 是 true,浏览器盖章认证;代码 dispatchEvent 合成的,永远是 false——不管你模拟得多像。」

「那我模拟得再像也没用?」

「没用。isTrusted 是只读属性,脚本改不了,这是浏览器的防伪设计。微信媒体库这类组件就查户口:你的 drop 处理器跑得再欢,出身不对,不收货。」老陈拉开椅子坐下,「这叫反自动化校验,拦的就是你这种脚本。」

「那怎么办,我雇个人肉拖图?」

「让浏览器替你拖。」老陈放下咖啡,「cda 前两天升到 v0.26.0,upload_dragdrop 加了 trusted 模式。它不走 dispatchEvent,走 CDP——浏览器调试协议。你等于站到浏览器里面去下指令:Chrome 自己读盘,构造一个真实的 File,用浏览器级输入完成整个拖放。」

「isTrusted 呢?」

「浏览器自己动手,章自然是真的。」


阿杰半信半疑,改了命令。之前是这么写的:

# 合成拖放:派发 dragenter/dragover/drop,处理器会跑,但 isTrusted=false
upload_dragdrop current '{"selector":".upload-area","data":{"base64":"<b64>","filename":"cover.jpg","mime":"image/jpeg"}}'

现在只改了两处——加 trusted: true,data 从 base64 换成本机路径:

# 真实拖放(v0.26.0):浏览器读盘构造真实 File,isTrusted=true
upload_dragdrop current '{"selector":".upload-area","trusted":true,"data":{"path":"/Users/jay/Pictures/cover.jpg"}}'

回车。返回里多了一个字段:

{
   
  "success": true,
  "data": {
   
    "selector": ".upload-area",
    "filename": "cover.jpg",
    "x": 642,
    "y": 318,
    "trusted": true,
    "settledMs": 806
  }
}

trusted: true。

这一次,媒体库的缩略图安安静静地出现了。没有闪动,没有抗议,就像有人亲手拖进去的一样。

阿杰靠在椅背上,把这次升级跟之前的方案摆在一起,发现了几个「不一样」:

  1. 出身变了,不是演技变了。 合成事件是「让页面以为有人拖」,trusted 拖放是「让浏览器替你拖」。isTrusted=true 是浏览器亲手盖的章,脚本伪造不出来——但可以请浏览器自己盖。
  2. 文件是真的。 dataTransfer.files 里是真 File,大小、类型、内容都对,任何一层校验都挑不出毛病。
  3. 细节也顺手补了。 旧的合成路径加了 dragleave 收尾,拖完不再留下「亮灯」残留——就是那种高亮框悬在页面上死活不消失的尴尬。
  4. 上传三件套凑齐了。 找得到 input[type=file] 用 upload_file;只有拖拽区用 upload_dragdrop 合成路径;查出身的组件上 trusted: true。三种武器,对应三级防御。
  5. 前提只有一条。 文件得在跑 Chrome 的那台机器上——毕竟是 Chrome 自己读盘。

阿杰忽然想明白一件事:以前他以为自动化是把人的动作「翻译」给页面,一层事件一层事件地模仿。现在才明白,最高效的路是让浏览器自己动手——它本来就是执行者,何必隔着一层合成事件去冒充人。

老陈喝完最后一口咖啡,站起来留下一句话:

「反自动化的本质是信任问题。你伪造不了浏览器的章,但可以让浏览器亲手盖章。」


cda 的 README 里有 upload_dragdrop 的完整参数表:合成路径(base64 / URL 拉取)和真实拖放(trusted + 本机路径)三种写法都在。下一个卡住你自动化的上传组件,可能就差一个 trusted: true。

目录
相关文章
|
23天前
|
人工智能 API 开发工具
百炼AI模型API调用计费指南:按量、TokenPlan、CodingPlan计费逻辑与工具接入
阿里云百炼是AI大模型服务平台,免费提供千万级Tokens。支持三种计费方式:按量付费(依Token用量计费)、Token Plan(按Credits订阅)、Coding Plan(按调用次数限量抢购)。开通后可获取API Key,接入Cursor、Qwen Code、Claude Code等数十款主流AI工具。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
204 0
|
12天前
|
JSON 人工智能 测试技术
别再给大模型输出写死期望值:Hypothesis + Pydantic + pytest 把非确定性回答测成一组『不变量』
本文揭示大模型测试中“固定值断言”的致命缺陷:因模型输出天然非确定(字段顺序、类型漂移、冗余文本等),`assert == 固定字典` 导致假红或漏检。提出用属性测试(Hypothesis + Pydantic)替代——聚焦守业务不变量(如金额非负、必填字段存在、不泄露提示),而非形态一致。解耦“输出长什么样”与“输出对不对”,让测试真正守住底线。
别再给大模型输出写死期望值:Hypothesis + Pydantic + pytest 把非确定性回答测成一组『不变量』
|
7天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
22天前
|
机器学习/深度学习 缓存 人工智能
Claude Fable 5.1 发布解读:科研智能体跑分翻倍,Agent 成本降45%
Claude Fable 5.1 于 2026 年 9 月发布:科研智能体基准翻倍、缓存降价 75%,Agent 成本最高降 45%,一文讲清升级点与价格。
293 1
Claude Fable 5.1 发布解读:科研智能体跑分翻倍,Agent 成本降45%
|
1月前
|
文字识别 安全 Windows
【2026】Umi-OCR文字识别工具:截图/批量/PDF识别全支持
Umi-OCR是一款免费开源的离线OCR软件,支持截图、图片、扫描PDF文字识别,全程本地运行,保障隐私安全。提供Paddle(高性能)和Rapid(低配兼容)双引擎,操作简单,支持批量处理与多格式导出。
|
14天前
|
人工智能 Ubuntu 数据可视化
Ubuntu 本地部署Ollama+OpenWebUI教程
本文详解Ubuntu下零基础部署Ollama+OpenWebUI:一键安装Ollama(支持CPU/GPU)、拉取轻量qwen3.5:0.8b模型、虚拟环境隔离安装OpenWebUI、配置systemd自启服务,最终建成可远程访问、离线运行、稳定易用的本地AI对话网页。
269 2
|
17天前
|
JavaScript 开发者
DSH plugin 从零怎么写?最小插件目录、本地构建与装进 profile 调试的完整起步流程
写第一个 DSH plugin 只需要一个导出 apply 函数的模块:先用 patch 覆盖层把本地文件插进 Web 界面验证,再做成包用 dsh plugin --profile add 装进 profile,最后用 --dump-config 与日志排错。
162 2
|
2月前
|
人工智能 JSON 自然语言处理
阿里云百炼Token Plan产品详解:产品功能、支持模型与Agent工具、套餐和Credits价格介绍
阿里云百炼Token Plan团队版是面向企业与开发团队的预付费AI大模型订阅服务,以统一Credits计量,整合Qwen、DeepSeek、Kimi等多厂商文本与图像生成模型,兼容OpenAI/Anthropic标准接口,适配Qwen Code、OpenClaw等主流AI编程与智能体工具。产品提供198元/月(标准)、698元/月(高级)、1398元/月(尊享)三档坐席套餐,搭配5000元共享用量包,支持席位分配、用量分析与SSO集成,承诺不使用对话数据训练模型,多租户隔离架构保障高峰不排队。
|
1月前
|
存储 人工智能 前端开发
开源版"带记忆的 Claude Desktop"——我试了 Rowboat 的多 Agent 编排
Rowboat 是一款开源AI工作操作系统(Apache-2.0,TS编写),主打多Agent协同编排、本地长期记忆与自动化工作流。支持邮件处理、代码重构、会议准备等场景,所有数据存于本地Obsidian兼容知识图谱,兼顾隐私与复利式上下文积累。
215 3
|
2月前
|
机器学习/深度学习 缓存 人工智能
一文读懂百炼 Kimi K3:2.8 万亿 MoE 模型、百万上下文、分层计费方案
全球首个开源3万亿级大模型Kimi K3正式上线阿里云百炼平台。该模型由月之暗面研发,参数达2.8万亿,支持100万Token超长上下文与原生视觉理解,具备文本生成、多模态推理及复杂逻辑深度思考能力,输入定价20元/百万Token(缓存命中仅2元)。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens

热门文章

最新文章