一、需求的產生
因為公眾號需要根據用戶發來的語音信息以用戶為單位做一些統計,而暫時未接入自己的服務器,於是花了點時間想辦法從前端解決重命名文件和批量下載的問題。
二、難點和解決方案
最先本人准備直接獲取下載按鈕,然后一個簡單的循環click,就可以批量下載了,但是微信消息管理頁面的下載文件的文件名是一個隨機生成的消息id,並沒有可讀性,不能和用戶關聯,而前端又不能重命名服務器給出的文件。本想換用按鍵精靈實現,但突然看到對於音頻文件,還有一個保存為素材按鈕,而保存為素材按鈕可以在前端傳入文件名參數,於是解決方法出現。
注:所有腳本只需在chrome的console中到對應頁面執行即可
腳本1:遍歷dom節點,執行點擊保存,輸入文件名,選擇類型等操作。
使用:對消息管理頁面,每一頁運行一次,就可以在素材管理的語音中找到對應文件,文件名為發消息者微信ID。
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。
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為每一頁刪除的個數。
//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);
