// ==UserScript== // @name 抖音无水印视频下载⭕豆豆 // @version 0.0.7 // @description 抖音无水印视频下载⭕豆豆⭕持续更新。 // @author ian // @match *://*.douyin.com/* // @match *://www.xiaohongshu.com/* // @icon https://lh3.googleusercontent.com/PJ6q1Vkbj1RLuWEz1R6CsrjFEePkfnjypoga0vqDyneoUp6ZVai24meYkgfcWXP9ecBAuxxqB42Vf5KIRwrFnjgV=w128-h128-e365-rj-sc0x00ffffff // @grant GM_addStyle // @run-at document-start // @grant GM_xmlhttpRequest // @license ian-6.0-or-later // @namespace douyin_video_downloader // @downloadURL https://update.greasyfork.icu/scripts/472725/%E6%8A%96%E9%9F%B3%E6%97%A0%E6%B0%B4%E5%8D%B0%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD%E2%AD%95%E8%B1%86%E8%B1%86.user.js // @updateURL https://update.greasyfork.icu/scripts/472725/%E6%8A%96%E9%9F%B3%E6%97%A0%E6%B0%B4%E5%8D%B0%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD%E2%AD%95%E8%B1%86%E8%B1%86.meta.js // ==/UserScript== (function() { 'use strict'; let css=`.ianDownload { border-radius:6px; background-color: rgb(45 45 45 / 50%); } .ianDownload:hover { background-color: #41424c; } `; GM_addStyle(css); let Warehouse=[]; //添加下载按钮 function downloadInit() { try{ document.querySelector('.ianDownload').parentNode.remove(); }catch (e) {} try{ let TIPS = document.querySelectorAll(".xg-tips"); for(let d=0;d<=TIPS.length;d++){ console.log(701,TIPS[d].getAttribute("lang-key")) if(TIPS[d].getAttribute("lang-key")=="PAUSE_TIPS"){ let xgright=TIPS[d].parentNode.parentNode.parentNode.querySelector(".xg-right-grid"); if(!xgright.querySelector(".ianDownload")){ let fixButton = document.createElement('xg-icon'); fixButton.className="xgplayer-playback-setting"; fixButton.innerHTML='
下载
'; xgright.appendChild(fixButton); try { let btn = document.querySelector('.ianDownload') btn.addEventListener('click', function(e) { e.stopPropagation(); downloaparse(Warehouse); }) } catch(err) {} } } } }catch (e) {} } //id匹配 function Match_id(modal_id,itemArr) { try { for(let i=0;i { fn.apply(this, arg); }, delay) } } // 监测事件 document.addEventListener("DOMContentLoaded", function () { document.addEventListener("wheel", debounce(divClick,1000),false); document.addEventListener("click", debounce(divClick,1000),false); }); //嗅探 let config = {entryTypes: ['resource', 'mark', 'measure']}; let monitor = new PerformanceObserver(list => { try { list.getEntries().forEach(entry => { let xhr=decodeURIComponent(entry.name).replace(/[\\]/g, ''); if(xhr.match(/tos\-cn\-ve/)){ Warehouse.push(xhr); console.log(7008,xhr); downloadInit(); throw Error(); } }); } catch(err) {} }); monitor.observe(config); window.performance.mark('registered-observer'); })();