一、需求的產生
因為公眾號需要根據使用者發來的語音資訊以使用者為單位做一些統計,而暫時未接入自己的伺服器,於是花了點時間想辦法從前端解決重新命名檔案和批量下載的問題。
二、難點和解決方案
最先本人準備直接獲取下載按鈕,然後一個簡單的迴圈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);