Power Automate Desktop 这名字听起来很唬人但说白了就是一个能替你在电脑上“自动点鼠标、自动敲键盘”的机器人。我做微信小程序批量保存图片的需求是因为帮一个做电商运营的朋友整理商品素材他在小程序里有一百多张详情页截图要另存到本地。手动一张张点少说半小时还得时刻盯屏幕纯纯的重复劳动。试过直接去小程序后台导出人家根本没开放这个权限试过用浏览器的开发者工具微信小程序在PC端跑起来后DOM结构完全抓不到。最后我就把这些操作拆成“鼠标移动点击键盘快捷键”的组合用PAD把整套流程录下来再用循环控制跑完一百多张图全程大概三分钟。这篇就把我的完整思路、搭建步骤和踩过的坑都写出来给同样在跟小程序图片较劲的朋友一个参考。1. 为什么“模拟鼠标键盘”是小程序图片批存的最优解1.1 先看清需求什么场景需要“批量”保存小程序图片一说到保存小程序里的图片很多人第一反应是“微信都提供了长按保存功能你非得上自动化”确实在手机上长按图片就能存到相册但这套逻辑放到PC端就水土不服了。PC版微信里的小程序你可能压根找不到长按菜单就算找到了也没法选中多张图一起存更别提重命名规整文件名。真正让人头疼的是内容生产场景运营同学要下载竞品小程序的商品图、海报、活动页设计师要拿小程序里的UI切图、运营banner做参考产品经理要留档App端某功能页的完整截图作为需求文档附件做数据的同事要把小程序里的图表页面一张张采集下来这类需求有共性图片数量多、每个页面结构相似、需要按顺序命名保存、且来源是“未开放下载权限”的小程序页面。这时候你才意识到所谓“看得到但拿不走”的图片靠人工一张张存是效率灾难。而RPA的价值就在于它模拟的是一个人的正常操作不需要小程序开发者修改任何代码也不依赖微信提供的导出接口直接把“人肉点击”换成“脚本点击”。1.2 方案选型对比抓包、缓存目录、H5破解为什么都不如RPA稳刚开始我做方案调研踩了一圈发现几个常见路子都有硬伤抓包获取图片直链微信小程序的图片请求通常带签名和时效token直接拿URL放到浏览器里大概率403就算能下载图片质量、命名规则也不可控。翻小程序本地缓存目录微信PC版确实会把小程序文件缓存到本地但图片是加密存储的文件名是一串哈希根本看不出对应哪张图批量提取回来还得人工反查。开发工具导出你自己没有小程序的源码拿不到项目文件这条路直接堵死。截图OCR 手工下载半自动方案还是要人眼介入治标不治本。相比之下“模拟鼠标键盘”的思路很朴素我不需要知道你图片在哪、怎么加密我只模仿人在屏幕面前的操作就好了——移动鼠标到图片位置、右键、点击“另存为”、输入文件名、回车。这套逻辑对任何界面都通用哪怕明天小程序改版了只要界面长差不多我的脚本改一下坐标就能复用。这也是我最后选Power Automate Desktop的核心原因它不需要编程基础自带“桌面录制器”能把鼠标键盘操作直接录成动作列表我再手动加循环、变量、判断就能处理批量任务。1.3 PAD在这个任务里承担的角色拆解我把整个流程拆成四层方便自己后面排错输入层模拟鼠标移动、滚轮滚动、点击模拟键盘按键比如Ctrl、Enter、方向键。逻辑层循环控制处理多张图片、变量传递文件名后缀、计数器、条件判断比如判断图片是否加载出来。信息层从屏幕获取文本比如获取页面里的图片序号把信息填到保存对话框里。运行层以“桌面流”的形式跑在Windows上可以定时触发也可以手动一键运行。搞清楚这四个层之后我搭流程的时候心里就有谱了遇到问题先判断是哪一层出了故障是鼠标没点到位还是逻辑条件没满足还是对话框里的信息没抓到。这套分层思维强烈建议你记下来排查效率高好几倍。2. 动手前先搭台PAD环境与桌面状态准备2.1 PAD安装与浏览器版本适配Power Automate Desktop 现在已经直接集成在Windows系统里了它默认随系统安装需要你用的是Windows 11或者Windows 10的较新版本。如果你没有从微软官网搜“Power Automate Desktop”下载安装包就行装好后会出现在开始菜单里图标长这样一个蓝底白色箭头有点像“播放”按钮。安装完成以后有两件事必须做登录微软账号不登录也可以用但部分高级功能例如说跨设备同步流、连接器登录后才有。个人使用免费这点挺良心。确认运行环境PAD依赖.NET环境如果你电脑上没装安装向导会自动拉取安装。我建议你先打开“设置 - 应用 - 可选功能”确认“.NET Framework 3.5”和“.NET Framework 4.8”都已经启用免得后续运行时莫名报错。浏览器方面我强烈建议你用Microsoft Edge或Chrome 最新稳定版因为PAD对Chromium系内核的支持最好窗口元素识别、网页自动化的兼容性问题最少。不建议用奇奇怪怪的第三方浏览器。我当时为了图快用了一台装了老版360浏览器的机器结果PAD录屏时和浏览器插件一直冲突换了Edge瞬间安静了。2.2 桌面环境“静态化”分辨率、焦点、弹窗这是新手最容易忽略的一步。PAD模拟鼠标的时候认的是“屏幕坐标”如果你运行流的时候桌面环境和你录制流的时候不一样那脚本就会像喝醉酒一样乱点。我总结了三条“桌面静态化”规则固定屏幕分辨率录制和运行时的分辨率、缩放比例必须一致。比如你录制时是1920x1080、100%缩放那就别在切换成1366x768时跑流。PAD里有个“设置显示设置”动作可以在每次运行前强制调整分辨率建议加上。关闭无关弹窗微信PC版的各种通知弹窗、锁屏弹窗、浏览器保存密码弹窗都会打断流程。我直接在运行前把微信设置成“免打扰模式”并把系统的“专注助手”打开避免右下角突然弹出一个新通知。保证窗口前置和固定运行流之前把微信小程序窗口手动拖到屏幕中央并且最大化。别用最小化状态开始因为PAD模拟的鼠标点击不会自动帮你切窗口。这一步听上去简单但80%的“脚本乱点”问题都是因为没有窗口前置。提示在正式跑批量任务前先用一张图完整跑一遍流程确认窗口被正确激活、坐标正确再放开循环去批量跑。千万不要上来就跑全量一旦中途卡住容易把小程序页面状态搞乱。2.3 准备小程序登入、打开图片列表页进入测试前你先在PC微信里打开目标小程序进入你要保存图片的那个列表页或详情页。如果是图片瀑布流就先把首屏内容加载出来。注意你后续的脚本会不断滚动页面加载新图片所以初始位置很关键最好滚到列表顶部让流程按顺序往下走。如果你要保存的图片需要点进去才能看大图那就先手动点开第一张图再把窗口切回初始状态。这样录制的第一步可以少一个点击动作。另外保存图片时的“文件名”如果不想手动输入PAD可以通过变量从“页面字段获取”动作拿文本比如获取当前图片序号、获取商品名。这样保存出来的文件名就是 商品名_01.jpg、商品名_02.jpg后续整理素材会省很多事情。3. 核心流程搭建从“打开图片”到“自动另存为”3.1 录屏之前先把动作清单列出来磨刀不误砍柴工。写PAD流之前我强烈建议把一次保存图片的完整人工操作写成分步清单在微信PC窗口里把鼠标滚轮到目标图片位置如果图片在可视区域内。悬停在图片上等待右键菜单出现。右键点击图片弹出菜单中寻找“另存为”或“保存图片”按钮。点击“另存为”弹出Windows文件资源管理器的“另存为”对话框。切换到文件名输入框输入目标文件名。点击“保存”按钮。等待保存完成关闭对话框。滚动页面到下一张图。就这样朴素的一张清单比什么高级设计都有用。PAD的“桌面录制器”非常好用你勾选“捕获鼠标键盘输入”然后按上面的清单人工操作一遍它就能生成动作序列。但注意录屏生成了“移动鼠标到坐标”“点击”这类动作对坐标的依赖极高一旦窗口大小变了就会失灵。所以我更推荐你录完后把动作改成更稳的“图像识别”或“屏幕元素”类型而不是傻傻保留原始坐标。3.2 用图像识别替代固定坐标定位图片和右键菜单“图像识别”是PAD里最改变命运的功能它类似于你告诉电脑“去屏幕上找一个长得像这个图标的东西找到了就点它”。这样哪怕窗口移动了、分辨率变了只要图标看起来一样它依然能定位。具体操作方式在PAD动作树里别选择“记录鼠标坐标”而是使用“设置”窗口中的图像识别功能。你先截图保存一张目标范围内的小图片比如小程序里的某个按钮图标、某张图片缩略图的右下角然后PAD会在运行时扫描当前屏幕找到匹配位置并执行点击。容错率比固定坐标高得多。但我还是要提醒一句图像识别不是万能的。屏幕上的内容随时会变化比如图片缩略图被完全加载后长相和在滚动中的长相不同匹配率就会下降。我建议你在每个关键动作后加一个“等待加载”设置延迟1秒并且把匹配阈值设到80%左右别太苛刻否则很容易找不到。3.3 右键菜单与“另存为”窗口的底层逻辑在Windows系统里所有右键菜单都是系统级控件意味着PAD在“UI元素”层级能看到它们不用像图像识别那样瞎猜。右键菜单弹出的那一瞬间你最好先加一个0.5秒的延迟让它完全展开然后再执行“从屏幕上的UI元素获取文本”或“点击UI元素”。“另存为”窗口就是文件资源管理器的保存对话框也是标准的Win32控件PAD的“窗口”动作可以直接激活它并访问里面的文本框、按钮。我推荐的操作步骤是点击“另存为”后PAD执行动作“等待窗口”窗口名称填“另存为”。用“设置窗口焦点”把焦点切到保存窗口。用“从窗口/UI元素获取文本”或“在窗口/UI元素中填充文本”往文件名输入框填内容。用“在窗口/UI元素中点击”点“保存”按钮。这里有个小坑Windows的保存对话框如果目标目录里已经有同名文件它会弹一个“确认替换”的对话框。批量存图时名字很容易重复所以你脚本里最好在保存按钮点击后加一个分支判断如果出现“确认替换”窗口就点击“是”或“替换”。否则你的流程会被卡死在那个弹窗上直到超时。3.4 循环、计数器和文件名的自动化生成单张保存搞定以后批量化的核心就是把“一次保存”包进一个循环里。PAD里最常用的是“循环”动作下的“循环从1到n”这个n可以在流开头用一个“设置变量”动作配置比如写成50然后循环体内依次执行“滚动到下一张图”“等待加载”“右键另存为”“填充文件名”。文件名建议用公式文件名 商品图_ 计数器 .jpg。PAD支持把数字转文本再拼接所以每次循环时计数器1就会生成一连串有序文件名。为了更好识别我还试过“获取当前系统日期”拼进文件名前段比如20250618_商品图_01.jpg后续按日期归档确实好使。另外循环里别少了“延迟”动作。微信小程序在滚动后加载图片需要时间加载太快的话后端图片还没渲染出来右键菜单上就没有“另存为”选项。我实测下来每次滚动后等1.5秒比较稳如果图片比较高清就设2秒。3.5 完整流程伪代码参考光说理论不够我把整理后的PAD动作序列以文字伪代码形式贴出来方便你对照搭流设置变量目标文件数 50 设置变量计数器 1 循环计数器 目标文件数 |-- 启动微信窗口并激活 |-- 滚动鼠标滚轮向下滚动600像素如果图片在列表下方 |-- 延迟1000毫秒 |-- 图像识别查找图片对象的右下角区域等待出现 |-- 右键点击该图片区域 |-- 延迟500毫秒 |-- UI元素点击菜单中的“另存为图片” |-- 延迟800毫秒 |-- 等待窗口“另存为” |-- 填充文件名拼接“商品图_” 计数器 “.jpg” |-- 点击按钮“保存” |-- 判断是否出现“确认替换”窗口 | |-- 是点击“替换” | |-- 否无操作 |-- 计数器 计数器 1 结束循环这串流程直接照抄到PAD里就能跑当然你得先根据实际情况改一下“滚动像素”“图像识别参考图”“保存路径”。保存对话框里的默认路径你可以预先手动改成一个专门的文件夹比如在D盘建一个小程序图片输出这样让PAD每次自动填文件名就行路径不用每次改。4. 调试中的坑与实操经验4.1 焦点丢失为什么脚本点着点着就失灵了我第一版流跑起来后最崩溃的问题就是前5张保存得好好的第6张开始右键菜单弹出但PAD的“点击”动作没反应。折腾半天发现是小程序页面在滚动加载后某个图片区域的焦点被“抢占”了导致右键菜单的坐标位置整体偏移。更诡异的是微信小程序在PC端的右键菜单不是传统的Win32菜单而是自己绘制的“半透明HTML式菜单”PAD用UI元素识别不到必须用图像识别来找“另存为”这三个字。解决方案就是把右键菜单里的“另存为”也当成一张图片来处理。我先截图了“另存为”三个字的白色背景小图然后在流里加一个图像识别动作匹配目标就是这张截图。匹配成功后再模拟点击这个匹配到的坐标。实测这种“文字截图匹配”比UI元素识别稳得多因为不管菜单怎么绘制文字本身是清晰的。还有个办法是把右键菜单的打开方式从“鼠标右键”改成“键盘快捷键”。有些小程序支持键盘快捷键比如CtrlC复制图片、CtrlS保存但微信小程序里没这规律所以还是老老实实做图像识别。4.2 图片没有预加载导致的“空白占位”小程序页面和普通网页一样为了性能很懒加载lazy load。如果你的脚本滚动的速度太快图片还没开始加载就被右键点击那“另存为”菜单里的图片可能是个空白占位图存下来的就是个1KB的空白文件。这个问题很隐蔽我从输出文件大小上才发现正常图片几百KB空白图只有几KB。解决办法每次滚动后不急着右键先加一个“等待条件”动作判断屏幕上是否出现了目标图片的缩略图。PAD的“等待条件”支持图像识别你可以用它等“图片加载完成”的那个状态比如图片区域的颜色特征出现。没有这个条件的RPA本质上和闭着眼睛点没啥区别。4.3 “另存为”窗口弹出位置不稳定Windows的保存对话框有时候会记住上次的位置有时候会弹到屏幕正中央。如果它弹到你脚本里还没覆盖到的坐标PAD依然能通过“等待窗口”找到它然后用“设置窗口位置”动作把窗口固定到屏幕左上角x100, y100这样后续点击“文件名输入框”“保存按钮”的坐标就固定了。这是很关键的一步。同理右键菜单的弹出位置是跟随鼠标点击的但如果你用图像识别定位整个菜单就不存在位置漂移问题。如果实在不行可以在菜单弹出后的坐标基础上按相对偏移点击“另存为”但这种方式就得每次重新录坐标不够聪明。4.4 微信更新导致UI变化微信PC版平均一个月更新一两次每次更新都可能让小程序的窗口行为、右键菜单样式、滚动体验发生变化。我经历过一次更新后原来的右键菜单从“半透明风格”变成了“毛玻璃风格”PAD图像识别的匹配率从90%掉到了60%干脆找不到“另存为”按钮。这里我提醒大家PAD流的“图像/UI元素”部分最好在关键节点多加几个分支。比如“如果未找到‘另存为’则改用坐标偏移方案”。或者养成习惯每次微信大版本更新后先跑一遍“单张保存”测试流有问题就重新截图像素材别让几百张图片的任务扛到一半才翻车。5. 常见问题与排查速查表为了省得你踩我踩过的坑我把跑这个流程时遇到过的问题、原因和解决方法整理成一张速查表建议直接收藏问题现象可能原因解决方案脚本点击后没有任何反应窗口未前置或PAD没有找到目标在流开始加“激活微信窗口”动作并在关键动作后加1秒延迟右键菜单弹出但找不到“另存为”菜单是自绘制的不识别为UI元素改用“图像识别”把“另存为”三个字截成小图匹配保存了空白/损坏的图片文件图片尚未加载完成就被存了滚动后加“等待条件”图像识别确认缩略图出现了再右键文件名重复导致保存中止“另存为”窗口弹出替换对话框增加分支判断如果出现“确认替换”则点击“替换”脚本跑到一半突然乱点屏幕分辨率/缩放比例变了运行前用“设置显示设置”固定分辨率和缩放比例微信小程序页面一直转圈加载网速慢或小程序缓存异常在PAD中加“延迟”并把每次滚动的间隔拉长同时清理微信缓存PAD提示“无法从窗口获取元素”微信窗口权限不够以管理员身份运行Power Automate Desktop保存对话框没自动弹出来点击“另存为”前没有等待在“另存为”动作后加“等待窗口”超时设为10秒以上再附赠一条最重要的排查思路分清问题出在“模拟输入”还是“窗口识别”。如果鼠标动了但没点中目标大概率是坐标/图像匹配的问题如果鼠标没动可能是焦点或窗口前置的问题如果鼠标动了、窗口也弹了但后续没执行那是“事件触发”被微信吞掉了。按照这个顺序去修比瞎试快得多。写在最后这个自动化流程能帮你省下什么从“人肉一张张保存”到“PAD全自动批量保存”我用这套流程把原来一个小时的机械操作压缩到三分钟。虽然第一次搭环境、写流程、调参数花了一个下午但之后每次要整理小程序图片我都是一键运行去做别的更有意义的事情。我不建议你一开始就追求“100%无人值守”因为在真实环境里网络波动、页面改版、弹窗干扰都会随时打断脚本。我的经验是先实现“半自动”让PAD把重复的点击和保存流程做掉你只需要处理那些异常情况比如遇到加载失败的图片、对话框卡住时的人工介入。等稳定之后再把异常处理分支一步步加进去最终逼近全自动。如果你也是做内容运营、产品设计、资料整理这类工作经常从小程序里扒图片素材这个思路可以无缝迁移到其他软件上——不只是微信小程序任何不支持批量下载的网页应用、桌面客户端只要是人能操作的重复动作你都可以用PAD替你做。我个人最深的体会是真正提高效率的不是你在某一刻点得有多快而是你愿意花时间去把重复习惯自动化成一套可复用的流程。