Greasy Fork

Greasy Fork is available in English.

抖音无水印视频下载⭕豆豆

抖音无水印视频下载⭕豆豆⭕持续更新。

当前为 2023-08-20 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         抖音无水印视频下载⭕豆豆
// @version      0.0.6
// @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
// ==/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='<div class="xgplayer-setting-playbackRatio ianDownload" >下载</div>';
                        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<itemArr.length;i++){
                 if(itemArr[i].includes(modal_id)){

                     console.log(201,'id')
                      return itemArr[i];
                     break;
                 }
             }
         } catch(err) {}
     }


    //解析
    function downloaparse(itemArr) {
        try{
            //清空数组数据\多余按钮
            Warehouse.length = 0;
        }catch (e) {}

        console.log(itemArr)
        let video_blob=0,modal_id=0,url;

        try {

            let dn=document.querySelector('.ianDownload').parentNode.parentNode.parentNode.parentNode.parentNode.querySelector("video");
            let source=dn.firstChild.src;
            console.log(8888,source);
            if(source){
                    // 打开一个页面,重定向
                    let newWin = window.open('about:blank');
                    newWin.location.href = source;
            }

        } catch(err) {}



        try {
            let videoArr=document.querySelectorAll('#sliderVideo');
            for(let u=0;u<videoArr.length;u++){
                let data=videoArr[u].dataset.e2e,source=videoArr[u].dataset.e2eVid;
                if(data=="feed-active-video"){
                    modal_id=source;

                    url=Match_id(modal_id,itemArr);

                    let URL=itemArr[0]

                    console.log(91,url)



                    break;
                }
            }
        } catch(err) {}

    }



    // 防抖函数延迟执行事件
    let divClick = function () {
         downloadInit();
    }

    // 封装防抖函数
    function debounce(fn, delay, ...arg) {
        let timer = null;
        return function () {
            timer && clearTimeout(timer);
            timer = setTimeout(() => {
                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);
                    throw Error();
                }
            });
        } catch(err) {}
    });
    monitor.observe(config);
    window.performance.mark('registered-observer');

})();