TikTok Video Downloader - Ultimate

Download TikTok Videos Without A Watermark - The Best, Ultimate TikTok Script

当前为 2024-07-29 提交的版本,查看 最新版本

// ==UserScript==
// @name         TikTok Video Downloader - Ultimate
// @namespace    none
// @version      1.30
// @description  Download TikTok Videos Without A Watermark - The Best, Ultimate TikTok Script
// @author       altaireh
// @match        *://*.tiktok.com/*
// @icon         https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRA-YRvXcW4n9Uv8FvTYubFk4uLqV2A4J___55paaZmd3y1TT8q
// @grant        none
// ==/UserScript==

(() => {
    'use strict';

    const ICON_URL = 'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRA-YRvXcW4n9Uv8FvTYubFk4uLqV2A4J___55paaZmd3y1TT8q';

    /**
     * Creates A Download Button For The Given Video Element.
     * @param {HTMLVideoElement} video - The Video Element.
     * @returns {HTMLImageElement} - The Download Button.
     */
    const createButton = (video) => {
        const button = document.createElement('img');
        button.src = ICON_URL;
        button.className = 'download-btn';
        button.style.cssText = `
            position: absolute;
            left: 10px;
            top: 50%;
            transform: translateY(-50%);
            z-index: 1000;
            width: 50px;
            height: 50px;
            cursor: pointer;
            border-radius: 50%;
            object-fit: cover;
            border: 2px solid rgba(255, 255, 255, 0.8);
        `;
        button.onclick = (event) => {
            event.stopPropagation(); // Prevent Click From Affecting The Video
            const videoUrl = video.src || video.querySelector('source')?.src;
            if (videoUrl) {
                // Open Preview Page In A Minimized Tab
                const previewWindow = window.open(videoUrl, '_blank', 'width=300,height=200,top=100,left=100');
                if (previewWindow) {
                    setTimeout(() => previewWindow.close(), 1500); // Close The Tab After 1500 Milliseconds
                }
            } else {
                console.error('Video URL Not Found');
            }
        };
        return button;
    };

    /**
     * Adds A Download Button To Each Video Element If Not Already Present.
     * @param {HTMLVideoElement} video - The Video Element.
     */
    const addButton = (video) => {
        if (!video.nextElementSibling?.classList.contains('download-btn')) {
            video.parentNode.insertBefore(createButton(video), video.nextSibling);
        }
    };

    /**
     * Automatically Downloads The Video On The Preview Page.
     */
    const autoDownload = () => {
        const video = document.querySelector('video');
        if (video) {
            const link = document.createElement('a');
            link.href = video.src || video.querySelector('source')?.src;
            link.download = '';
            document.body.appendChild(link);
            link.click();
            link.remove();
        }
    };

    /**
     * Determines If The Current Page Is A Video Preview Page.
     * @returns {boolean} - True If On A Preview Page, Otherwise False.
     */
    const isPreviewPage = () => /v16-webapp-prime.tiktok.com|mime_type=video_mp4/.test(window.location.href);

    /**
     * Initializes The Script Functionality Based On Page Type.
     */
    const initialize = () => {
        if (isPreviewPage()) {
            autoDownload();
        } else {
            const observer = new MutationObserver(() => {
                document.querySelectorAll('video').forEach(addButton);
            });
            observer.observe(document.body, { childList: true, subtree: true });
            document.querySelectorAll('video').forEach(addButton);
        }
    };

    initialize();
})();

QingJ © 2025

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