抖音网页版无水印一键下载

下载无水印的抖音视频,支持按钮点击与[Q]键下载

当前为 2022-05-11 提交的版本,查看 最新版本

// ==UserScript==
// @name         抖音网页版无水印一键下载
// @namespace    http://tampermonkey.net/
// @version      2.0.0
// @description  下载无水印的抖音视频,支持按钮点击与[Q]键下载
// @author       adamaliba - 潘帅
// @include      *://*.douyin.com/*
// @grant        GM_download
// @grant        GM_addStyle
// @grant        GM_info
// @connect      *
// @icon         https://lf1-cdn-tos.bytegoofy.com/goofy/ies/douyin_web/public/favicon.ico
// @license      MIT License
// ==/UserScript==

(function() {
    
    // let download = () => {
    //     let videoSrc = document.getElementsByTagName("video")[0].currentSrc
    //     let a = document.createElement('a')
    //     document.body.appendChild(a)
    //     a.style.display = "none"
    //     a.href = videoSrc
    //     a.download = videoSrc.split('=').reverse()[0] + '.mp4'
    //     a.target = '_blank'
    //     a.click()
    //     document.body.removeChild(a)
    // }

    function replaceIllegal(str) {
        return str.replace(/“/g, '').replace(/\?/g, '').replace(/、/g, '').replace(/╲/g, '').replace(/\//g, '')
        .replace(/\*/g, '').replace(/”/g, '').replace(/</g, '').replace(/>/g, '').replace(/\|/g, '')
    }
    
    let download = () => {
        Array.from(document.getElementsByTagName("video")).forEach(video => {
            if(video.autoplay){
                let account = replaceIllegal(video.parentNode.getElementsByClassName('account-name')[0].innerText)
                let title = replaceIllegal(video.parentNode.getElementsByClassName('title')[0].innerText)
                fetch(video.currentSrc).then(res => {
                    res.blob().then(blob => {
                        let blobUrl = window.URL.createObjectURL(blob)
                        let a = document.createElement('a')
                        document.body.appendChild(a)
                        a.style.display = "none"
                        a.href = blobUrl
                        a.download = `${title}_${account}_${Date.now()}.mp4`
                        a.target = '_blank'
                        a.click()
                        document.body.removeChild(a)
                        window.URL.revokeObjectURL(blobUrl);
                    })
                })
            }
        })
    }

    let downloadInSearch = () => {
        Array.from(document.getElementsByTagName("video")).forEach(video => {
            if(video.autoplay){
                let parent = document.getElementsByTagName("video")[0].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode
                let account = parent.getElementsByTagName('a')[1].innerText
                let title = replaceIllegal(parent.getElementsByClassName('KxCuain0')[0].innerText.split('\n')[1])
                fetch(video.currentSrc).then(res => {
                    res.blob().then(blob => {
                        let blobUrl = window.URL.createObjectURL(blob)
                        let a = document.createElement('a')
                        document.body.appendChild(a)
                        a.style.display = "none"
                        a.href = blobUrl
                        a.download = `${title}_${account}_${Date.now()}.mp4`
                        a.target = '_blank'
                        a.click()
                        document.body.removeChild(a)
                        window.URL.revokeObjectURL(blobUrl);
                    })
                })
            }
        })
    }
    
    let createBtn = () => {
        Array.from(document.getElementsByClassName('xgplayer-playswitch')).forEach(xgplayer => {
            let child = xgplayer.parentNode.childNodes[1]
            if(child && child.lastChild.id != 'adamaliba'){
                let div = document.createElement('div')
                div.style.width = '60%'
                div.style.height = '40px'
                div.style.marginTop = '10px'
                div.style.backgroundImage = 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAqVJREFUaEPtmT1rFUEUhp+DlY2NVoJgo4gKEm20UkHs1EZTRIQUQcTOSsvYWPgDDBYiiBBQQUkEsVJBbbSw0BQiau8PsHxlYG7cbGZ2Z/bOknthp9ydPed95pz5OLPGlDebcv0MAKEISroPXK29u21mi6Uj3ksEJCkk1MyK+ytu0AkfADLybIhAZBIPcyA1i4YUmqoUknQJuAt8AO6Y2VoJAEkXgVvAT2AxZje4t6Tmmhf/pNL/GzAbcpazD0g6BzwHtnnbUbudAQLiR7aCzlIBJJ0FXgDba+KSIZImsaSvwKFItDY5SwGQdBJYAXZE7C6b2VxbhqQCPAYuNxjbANEGIOk4sArsarCZdPhLBTgIuPyPRcHpWIdoApA0A7wEdjeIf2pms22j794nAfgDWjKEhwn5P+zF7y0hPgvAQxwAniVEIhap78D+UuKzATzEHuBVC0RK9Ot9ktOm+mFyClU/krQTeFcQopP4ThEYgUhya/enAhCdxY8FUAFp2iPaUmks8UUA/LzoAjG2+GIAHSCKiC8KkAFRTPwmgBL3OZK+AEciyZ8lXtJDYL5i6w9wr3q/tGEZbTvDtM3IysT+CJyo9c8Vfwp4E/D51sxOj573AuDTyR0AzwB/3ZHZzG6kDoD/fmsBcsSG+koaANYHpo87zbYIFY0AsM/MfrQ5Lfle0jVgqcgkBpKqo8IArtx0BX+95a9C3oJbRdxq8ruk0LotSa5wcr4WIn4aAX4BTdVSn9pTba+a2fnYPvAIuJJqaYv6LZnZ9RiA+y3kfg9Ncpszs+UggN8BPwPHJpTgppm5q83/S3xkF3wNuFuzSWorZnahLihaE0tyfxSP+mg03eH0CenumlzZ+t7MHoQcdSrq+1Sca3sAyB2x0v2HCJQe0Vx7Ux+Bf62bO0D1hp22AAAAAElFTkSuQmCC")'
                div.style.backgroundSize = 'contain'
                div.style.backgroundRepeat = 'no-repeat'
                div.id = 'adamaliba'
                xgplayer.parentNode.childNodes[1].appendChild(div)
                div.onclick = () => {download()}
            }
        })
    }

    let createBtnInSearch = () => {
        Array.from(document.getElementsByClassName('xgplayer-video-interaction-wrap')).forEach(xgplayer => {
            if(xgplayer.lastChild.id != 'adamaliba'){
                let div = document.createElement('div')
                div.style.width = '60%'
                div.style.height = '40px'
                div.style.marginTop = '10px'
                div.style.backgroundImage = 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAqVJREFUaEPtmT1rFUEUhp+DlY2NVoJgo4gKEm20UkHs1EZTRIQUQcTOSsvYWPgDDBYiiBBQQUkEsVJBbbSw0BQiau8PsHxlYG7cbGZ2Z/bOknthp9ydPed95pz5OLPGlDebcv0MAKEISroPXK29u21mi6Uj3ksEJCkk1MyK+ytu0AkfADLybIhAZBIPcyA1i4YUmqoUknQJuAt8AO6Y2VoJAEkXgVvAT2AxZje4t6Tmmhf/pNL/GzAbcpazD0g6BzwHtnnbUbudAQLiR7aCzlIBJJ0FXgDba+KSIZImsaSvwKFItDY5SwGQdBJYAXZE7C6b2VxbhqQCPAYuNxjbANEGIOk4sArsarCZdPhLBTgIuPyPRcHpWIdoApA0A7wEdjeIf2pms22j794nAfgDWjKEhwn5P+zF7y0hPgvAQxwAniVEIhap78D+UuKzATzEHuBVC0RK9Ot9ktOm+mFyClU/krQTeFcQopP4ThEYgUhya/enAhCdxY8FUAFp2iPaUmks8UUA/LzoAjG2+GIAHSCKiC8KkAFRTPwmgBL3OZK+AEciyZ8lXtJDYL5i6w9wr3q/tGEZbTvDtM3IysT+CJyo9c8Vfwp4E/D51sxOj573AuDTyR0AzwB/3ZHZzG6kDoD/fmsBcsSG+koaANYHpo87zbYIFY0AsM/MfrQ5Lfle0jVgqcgkBpKqo8IArtx0BX+95a9C3oJbRdxq8ruk0LotSa5wcr4WIn4aAX4BTdVSn9pTba+a2fnYPvAIuJJqaYv6LZnZ9RiA+y3kfg9Ncpszs+UggN8BPwPHJpTgppm5q83/S3xkF3wNuFuzSWorZnahLihaE0tyfxSP+mg03eH0CenumlzZ+t7MHoQcdSrq+1Sca3sAyB2x0v2HCJQe0Vx7Ux+Bf62bO0D1hp22AAAAAElFTkSuQmCC")'
                div.style.backgroundSize = 'contain'
                div.style.backgroundRepeat = 'no-repeat'
                div.id = 'adamaliba'
                xgplayer.appendChild(div)
                div.onclick = () => {downloadInSearch()}
            }
        })

    }
    
    Timer = setInterval(() => {
        location.href.indexOf('search') === -1 ? createBtn() : createBtnInSearch()
	}, 200);
	
	document.addEventListener('keydown', function(e){
	    if (e.keyCode === 81) {
            location.href.indexOf('search') === -1 ? download() : downloadInSearch()
	    }
	})
	
    console.log('抖音网页版无水印一键下载已开启!觉得不好用?来这里吐槽! https://gf.qytechs.cn/zh-CN/scripts/444720 ')
    
})()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址