download videos from WeChatOA to your disk
You may also like a button which can back to the top and go to the bottom.
// ==UserScript== // @name 微信公众号文章内视频下载(需配合Aria2使用) // @name:en WeChatOA Video Downloader // @namespace http://mofiter.com/ // @version 0.1 // @description 将微信公众号文章内的视频下载到本地 // @description:en download videos from WeChatOA to your disk // @author mofiter // @create 2018-10-04 // @lastmodified 2-18-10-05 // @require https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js // @match http*://mp.weixin.qq.com/s* // @match http*://v.qq.com/txp/iframe/player.html* // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant GM_openInTab // ==/UserScript== (function() { 'use strict'; var $ = $ || window.$; var log_count = 1; var hasOpenAriac2Tab = false; var aria2_url = "http://127.0.0.1:6800/jsonrpc"; //Aria2 地址 var video_save_path = '/Users/mofiter/Downloads'; //视频保存路径 //自定义 log 函数 function mylog(param1,param2){ param1 = param1 ? param1 : ""; param2 = param2 ? param2 : ""; console.log("#" + log_count++ + "-WeChatOAVideoDownloader-log:",param1,param2); } setTimeout(function(){ if (location.href.indexOf("v.qq.com/txp/iframe/player.html") > -1){ var txp_controls = document.getElementsByClassName("txp_controls")[0]; var txp_btn_volume = txp_controls.getElementsByClassName("txp_btn_volume")[0]; txp_btn_volume.setAttribute("data-status","mute"); //静音 var txp_btn_play = txp_controls.getElementsByClassName("txp_btn_play")[0]; txp_btn_play.click(); setTimeout(function(){ txp_btn_play.click(); var video = document.getElementsByTagName("video")[0]; var video_src = video.getAttribute("src"); if (video_src.indexOf("blob") === -1){ window.parent.postMessage(video_src,"*"); }else{ window.parent.postMessage('',"*"); } },1000); } if (location.href.indexOf("mp.weixin.qq.com/s") > -1){ window.addEventListener('message', (e) => { var video_url = e.data; if (video_url.indexOf("http") > -1){ var file_name = document.getElementsByTagName("h2")[0].innerText; var qr_code_pc = document.getElementsByClassName("qr_code_pc")[0]; var downloadButton = document.createElement("p"); downloadButton.innerHTML = "<b>点此下载视频</b>"; downloadButton.style.cursor = "pointer"; qr_code_pc.appendChild(downloadButton); var downloadSetting = document.createElement("p"); downloadSetting.innerHTML = "下载地址设置"; downloadSetting.style.cursor = "pointer"; qr_code_pc.appendChild(downloadSetting); downloadButton.addEventListener("click",function(){ loadSetting(); if(video_save_path===""){ alert("请点击下载地址设置填写文件保存位置"); }else if(aria2_url===""){ alert("请点击下载地址设置填写 Aria2 地址"); }else{ sendDownloadTaskToAria2(video_url,file_name + ".mp4",video_save_path); } }); downloadSetting.addEventListener("click",function(){ showSetting(); }); }else{ mylog("当前视频无法下载"); } }); var iframe_document = document.getElementsByTagName("iframe")[0].contentWindow.document; var js_btn_play = iframe_document.getElementsByClassName("js_btn_play")[0]; js_btn_play.click(); setTimeout(function(){ var js_switch = iframe_document.getElementsByClassName("js_switch")[0]; js_switch.click(); var video = iframe_document.getElementsByTagName("video")[0]; var video_src = video.getAttribute("src"); window.parent.postMessage(video_src,"*"); },1000); } },2000); // 页面加载完成后2秒执行 //加载个人设置 function loadSetting(){ aria2_url = GM_getValue('aria2_url','http://127.0.0.1:6800/jsonrpc'); video_save_path = GM_getValue('video_save_path',''); } //打开设置 function showSetting(){ if(document.querySelector('#dl-setting') == null){ var container = document.createElement("div"); container.id = "dl-setting"; container.style = "position:fixed;z-index:999999;top:40px;right:10px;width:auto;height:auto;padding:5px 10px;font-size:14px;border:1px solid #d9dadc;"; container.innerHTML = "<div style='line-height:25px;'>" + "<legend style='text-align:center;'>下载设置</legend>" + "<ul style='list-style-type:none'>" + "<li>Aria2 地址:</li>" + "<li><input type='text' id='aria2_url' name='aria2_url' value='" + aria2_url + "' style='width:100%'></input></li>" + "<li>文件保存位置:</li>\n" + "<li><input type='text' id='save_path' name='save_path' value='" + video_save_path + "' style='width:100%'></input></li>" + "</ul>\n" + "<input type='button' value='取消' id='cancel_button' style='position:relative;float:left;border:1px solid #ccc;padding:0 2px;'></input>\n" + "<input type='button' value='保存' id='save_button' style='position:relative;float:right;border:1px solid #ccc;padding:0 2px;'></input>\n" + "</div>"; document.body.appendChild(container); }else{ loadSetting(); $('#aria2_url').value = aria2_url; $('#save_path').value = video_save_path; $('#dl-setting').show(); } $('#save_button').click(function(){ GM_setValue('aria2_url',$('input[name="aria2_url"]').val()); GM_setValue('video_save_path',$('input[name="save_path"]').val()); $('#dl-setting').hide(); }); $('#cancel_button').click(function(){ $('#dl-setting').hide(); }); } function sendDownloadTaskToAria2(download_url,file_name,save_path){ var json_rpc = { id:'', jsonrpc:'2.0', method:'aria2.addUri', params:[ [download_url], { dir:save_path, out:file_name } ] }; GM_xmlhttpRequest({ url:aria2_url, method:'POST', data:JSON.stringify(json_rpc), onerror:function(response){ mylog(response); }, onload:function(response){ mylog(response); if (!hasOpenAriac2Tab){ GM_openInTab('http://aria2c.com/',{active:true}); hasOpenAriac2Tab = true; } } }); } })();