微信公众平台:前端批量下载语音并重命名文件
一、需求的产生
因为公众号需要根据用户发来的语音信息以用户为单位做一些统计,而暂时未接入自己的服务器,于是花了点时间想办法从前端解决重命名文件和批量下载的问题。
二、难点和解决方案
最先本人准备直接获取下载按钮,然后一个简单的循环click,就可以批量下载了,但是微信消息管理页面的下载文件的文件名是一个随机生成的消息id,并没有可读性,不能和用户关联,而前端又不能重命名服务器给出的文件。本想换用按键精灵实现,但突然看到对于音频文件,还有一个保存为素材按钮,而保存为素材按钮可以在前端传入文件名参数,于是解决方法出现。
注:所有脚本只需在chrome的console中到对应页面执行即可
脚本1:遍历dom节点,执行点击保存,输入文件名,选择类型等操作。
使用:对消息管理页面,每一页运行一次,就可以在素材管理的语音中找到对应文件,文件名为发消息者微信ID。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | var start = new Date().getTime(); var len =$( ".save_gray" ).length; var len3 = $( ".remark_name" ).length; var userName = '' ; var len2 =$( '.jsTypeInput' ).length; var idx =0; var clickChecked = function (len2){ for ( var j = len2-1; j >= 0; j--) { console.log(j+ ":j" ); if ($($( '.jsTypeInput' )[j]).attr( 'data-value' ) == '20' ) { $($( '.jsTypeInput' )[j]).attr( "checked" , true ); $( ".js_btn" ).click(); $( ".closed " ).click() console.log( "break closed" ); break ; }; }; } var clickBTN = function (idx){ for ( var n = len3-1; n >= 0; n--) { console.log(n+ ":file" ); console.log(idx); if ($($( ".remark_name" )[n]).attr( "data-id" )==idx) { userName = $($( ".remark_name" )[n]).html(); console.log(userName); $( ".jsSaveInput" ).val(userName); len2 =$( '.jsTypeInput' ).length; clickChecked(len2); console.log( "break" ); //break; }; }; }; for ( var i = 0; i < len; i++) { idx =$($( ".save_gray" )[i]).attr( 'idx' ); $( ".save_gray" )[i].click(); clickBTN(idx); $( '.page_next' ).click() }; var end = new Date().getTime(); console.log(end-start); |
脚本2:批量下载,因为打开下载窗口会卡,所以做了一点延迟处理。
使用:进入素材管理界面,每一页运行脚本,其中 setInterval("dlfn(20)",1500);的21,为下载的文件个数。因为下载一页有21个文件,这里填入21。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var m = 0; var dlfn = function (num){ if (m==num) { window.clearInterval(dl); console.log( "ok:" +m); return ; }; console.log( "file:" +m); $( ".download_gray" )[m].click(); m++; console.log( "num:" +num); } var dl =setInterval( "dlfn(21)" ,1500); |
脚本3:删除作为中转的素材文件(也可以不删除)
使用:进入素材管理界面,每一页运行脚本,其中var dele =setInterval("test(20)",1000);的21为每一页删除的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //delete var i = 1; var test = function (num){ if (i==num) { window.clearInterval(dele); console.log( "i:" +i); }; console.log( "delete:" +i+ ",The Operations are an irrevocable" ); i++; $( ".del_gray" )[0].click(); // setTimeout(dlfn(i),1000) $( ".btn_primary" )[1].click(); } var dele =setInterval( "test(20)" ,1000); |
分类:
javascript
, html/css
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?