TikTok Magic(动态下载)

一次点击即可从 TikTok 直接下载无标志/水印的视频。更多功能即将推出。

// ==UserScript==
// @name            TikTok Magic (download dinâmico)
// @namespace       https://linkme.bio/jhonpergon/?userscript=tiktok_tools
// @version         1.4
// @author          Jhon Pérgon
// @description     Baixe vídeos sem logo/marca d'água com apenas um clique, diretamente do tiktok. Mais recursos em breve.
// @name:pt         TikTok Magic (download dinâmico)
// @name:pt-BR      TikTok Magic (download dinâmico)
// @name:pt-PT      TikTok Magic (download dinâmico)
// @name:es         TikTok Magic (descarga dinámica)
// @name:en         TikTok Magic (dynamic download)
// @name:en-US      TikTok Magic (dynamic download)
// @name:fr         TikTok Magic (téléchargement dynamique)
// @name:ru         TikTok Magic (динамическая загрузка)
// @name:ja         TikTok Magic(ダイナミックダウンロード)
// @name:ko         TikTok Magic (동적 다운로드)
// @name:zh-TW      TikTok Magic(動態下載)
// @name:zh-CN      TikTok Magic(动态下载)
// @name:id         TikTok Magic (unduhan dinamis)
// @name:ug         TikTok Magic (динамическая загрузка)
// @name:ar         TikTok Magic (تحميل ديناميكي)
// @name:he         TikTok Magic (הורדה דינמית)
// @name:hi         TikTok Magic (गतिशील डाउनलोड)
// @name:th         TikTok Magic (ดาวน์โหลดไดนามิก)
// @name:bg         TikTok Magic (динамично изтегляне)
// @name:ro         TikTok Magic (descărcare dinamică)
// @name:fi         TikTok Magic (dynaaminen lataus)
// @name:it         TikTok Magic (download dinamico)
// @name:el         TikTok Magic (δυναμική λήψη)
// @name:eo         TikTok Magic (dinamika elŝuto)
// @name:hu         TikTok Magic (dinamikus letöltés)
// @name:nb         TikTok Magic (dynamisk nedlasting)
// @name:sk         TikTok Magic (dynamické sťahovanie)
// @name:sv         TikTok Magic (dynamisk nedladdning)
// @name:sr         TikTok Magic (динамично преузимање)
// @name:pl         TikTok Magic (dynamiczne pobieranie)
// @name:nl         TikTok Magic (dynamische download)
// @name:de         TikTok Magic (dynamischer Download)
// @name:da         TikTok Magic (dynamisk download)
// @name:cs         TikTok Magic (dynamické stahování)
// @name:uk         TikTok Magic (динамічне завантаження)
// @name:tr         TikTok Magic (dinamik indirme)
// @name:vi         TikTok Magic (tải xuống động)
// @name:fr-CA      TikTok Magic (téléchargement dynamique)
// @description:pt        Baixe vídeos sem logo/marca d'água com apenas um clique, diretamente do tiktok. Mais recursos em breve.
// @description:pt-BR     Baixe vídeos sem logo/marca d'água com apenas um clique, diretamente do tiktok. Mais recursos em breve.
// @description:pt-PT     Baixe vídeos sem logo/marca d'água com apenas um clique, diretamente do tiktok. Mais recursos em breve.
// @description:es        Descarga vídeos sin logo/marca de agua con un solo clic, directamente desde TikTok. Pronto más características.
// @description:en        Download videos without logo/watermark with just one click, directly from TikTok. More features coming soon.
// @description:fr        Téléchargez des vidéos sans logo/marque d'eau en un seul clic, directement depuis TikTok. Plus de fonctionnalités à venir.
// @description:ja        ロゴ/ウォーターマークなしの動画を1クリックでTikTokから直接ダウンロードします。近日、さらなる機能を追加予定です。
// @description:ko        로고/워터마크 없는 동영상을 한 번의 클릭으로 TikTok에서 직접 다운로드하세요. 곧 더 많은 기능이 출시됩니다.
// @description:zh-TW     一次點擊即可從 TikTok 直接下載無標誌/水印的影片。更多功能即將推出。
// @description:zh-CN     一次点击即可从 TikTok 直接下载无标志/水印的视频。更多功能即将推出。
// @description:id        Unduh video tanpa logo/tanda air dengan hanya satu kali klik, langsung dari TikTok. Fitur lebih lanjut akan segera hadir.
// @description:ug        TikTokدىن تەكشۈرۈشقا كۈنكەر قۇيۇپ، بىر قىلىشتا پۈتۈن چۈشەندۈرۈشقا بولىدۇ. قوشۇمچە ئىمكانلار قىلىنىدۇ.
// @description:ar        قم بتنزيل الفيديوهات بدون شعار/علامة مائية بنقرة واحدة، مباشرة من TikTok. المزيد من الميزات قريبًا.
// @description:he        הורד סרטונים ללא לוגו/סימן מים בלחיצה אחת, ישירות מ-TikTok. יש יותר תכונות בקרוב.
// @description:hi        एक क्लिक में लोगो/जलाम रहित वीडियो डाउनलोड करें, सीधे TikTok से। जल्द ही अधिक सुविधाएँ उपलब्ध होंगी।
// @description:th        ดาวน์โหลดวิดีโอโดยไม่มีโลโก้/ลายน้ำด้วยคลิกเดียวโดยตรงจาก TikTok คุณลักษณะเพิ่มเติมในเร็ว ๆ นี้
// @description:bg        Изтегляйте видеоклипове без лого/воден знак с едно щракване, директно от TikTok. Повече функции скоро.
// @description:ro        Descărcați videoclipuri fără logo/semn de apă cu doar un clic, direct de pe TikTok. Mai multe funcționalități în curând.
// @description:fi        Lataa videoita ilman logoa/vesileimaa vain yhdellä napsautuksella, suoraan TikTokista. Lisää ominaisuuksia tulossa pian.
// @description:it        Scarica video senza logo/watermark con un solo clic, direttamente da TikTok. Altre funzionalità in arrivo presto.
// @description:el        Κατεβάστε βίντεο χωρίς λογότυπο/υδατογραφή με μόνο ένα κλικ, απευθείας από το TikTok. Περισσότερες λειτουργίες σύντομα διαθέσιμες.
// @description:eo        Elŝutu videojn sen logo/aŭ akvo-marko per nur unu klako, rekte de TikTok. Pliaj funkcioj venos baldaŭ.
// @description:hu        Tölts le videókat logó/vízjel nélkül egyetlen kattintással, közvetlenül a TikTokról. Hamarosan több funkció érkezik.
// @description:nb        Last ned videoer uten logo/vannmerke med bare ett klikk, direkte fra TikTok. Flere funksjoner kommer snart.
// @description:sk        Stiahnite si videá bez loga/vodného značky jediným kliknutím priamo z TikToku. Ďalšie funkcie čoskoro.
// @description:sv        Ladda ner videor utan logotyp/vattenstämpel med bara ett klick, direkt från TikTok. Fler funktioner kommer snart.
// @description:sr        Преузмите видее без лого/воденог жига једним кликом, директно са ТикТока. Више функција ускоро.
// @description:pl        Pobieraj filmy bez logo/wodnego znaku za pomocą jednego kliknięcia, bezpośrednio z TikToka. Więcej funkcji wkrótce.
// @description:nl        Download video's zonder logo/watermerk met slechts één klik, rechtstreeks van TikTok. Meer functies binnenkort beschikbaar.
// @description:de        Laden Sie Videos ohne Logo/Wasserzeichen mit nur einem Klick direkt von TikTok herunter. Weitere Funktionen bald verfügbar.
// @description:da        Download videoer uden logo/vandmærke med kun ét klik, direkte fra TikTok. Flere funktioner kommer snart.
// @description:cs        Stahujte videa bez loga/vodního znamení jedním kliknutím přímo z TikToku. Další funkce brzy.
// @description:uk        Завантажуйте відео без лого/водяного знаку одним кліком, безпосередньо з TikTok. Більше функцій незабаром.
// @description:tr        TikTok'tan sadece bir tıklama ile logo/su damgası olmadan video indirin. Yakında daha fazla özellik.
// @description:vi        Tải xuống video mà không có logo/dấu nước chỉ bằng một cú nhấp chuột, trực tiếp từ TikTok. Các tính năng khác sẽ sớm được cập nhật.
// @description:fr-CA     Téléchargez des vidéos sans logo/marque d'eau en un seul clic, directement depuis TikTok. Plus de fonctionnalités à venir.
// @grant           GM_addStyle
// @grant           GM_getValue
// @grant           GM_setValue
// @license         MIT
// @match           https://*.tiktok.com/*
// @icon            https://cdn.iconscout.com/icon/free/png-256/free-tiktok-4069944-3365463.png
// @compatible      chrome
// @compatible      firefox
// @compatible      opera
// @compatible      edge
// @compatible      safari
// @compatible      berrybrowser
// ==/UserScript==

(function() {
    'use strict';

    let contagemK = 0; // Счетчик K (вероятно, для отслеживания изменений URL)

    function addBToks() {
        // Создание элемента <a>
        const linkElement = document.createElement('a');
        linkElement.setAttribute('href', '#');
        linkElement.setAttribute('class', 'linkTok');
        linkElement.setAttribute('target', '_blank');

        // Логика для автоматического закрытия вкладки после загрузки
        // Это может быть заблокировано браузером.
        if (GM_getValue("statusVideo") === true && contagemK === 0) {
            GM_setValue("statusVideo", false); // Предполагается, что это сброс статуса
            linkElement.addEventListener('click', function() {
                // setTimeout(() => {
                //     window.close(); // Закрываем вкладку после начала загрузки
                // }, 1800);
            });
        }

        // Создание элемента <button>
        const buttonElement = document.createElement('button');
        buttonElement.setAttribute('data-e2e', 'arrow-right');
        buttonElement.setAttribute('title', 'download magic');
        buttonElement.setAttribute('role', 'button');
        buttonElement.setAttribute('aria-label', 'Download Limpo');
        buttonElement.setAttribute('class', 'tiktokDL');

        // Создание элемента <svg>
        const svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
        svgElement.setAttribute('width', '26');
        svgElement.setAttribute('height', '26');
        svgElement.setAttribute('viewBox', '0 0 48 48');
        svgElement.setAttribute('fill', '#fff');
        svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
        svgElement.setAttribute('style', '--darkreader-inline-fill: #d7d5d1;'); // Учитывайте, что это может быть несовместимо с Dark Reader

        // Создание элемента <path> внутри <svg>
        const pathElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');
        pathElement.setAttribute('d', 'M21.9 7.38v19.86l-6.73-6.73a.87.87 0 0 0-1.24 0l-1.73 1.73a.88.88 0 0 0 0 1.24l11.18 11.18c.34.35.9.35 1.24 0L35.8 23.48a.88.88 0 0 0 0-1.24l-1.73-1.73a.87.87 0 0 0-1.24 0l-6.73 6.73V7.38c0-.49-.4-.88-.87-.88h-2.45c-.49 0-.88.4-.88.88ZM10.88 37.13c-.49 0-.88.39-.88.87v2.63c0 .48.4.87.88.87h26.24c.49 0 .88-.4.88-.87V38c0-.48-.4-.87-.87-.87H10.86Z');

        svgElement.appendChild(pathElement);
        buttonElement.appendChild(svgElement);
        linkElement.appendChild(buttonElement);

        // Стили для кнопки загрузки
        const styleElement1 = document.createElement('style');
        styleElement1.innerHTML = `
            .tiktokDL {
                position: absolute;
                z-index: 1;
                display: flex;
                -moz-box-pack: center;
                align-content: center;
                -moz-box-align: center;
                align-items: center;
                background: rgba(84, 84, 84, 0.5);
                border-radius: 50%;
                cursor: pointer;
                border: none;
                outline: none;
                width: 40px;
                height: 40px;
                top: calc(50% + 62px);
                margin-top: -24px;
                right: 20px;
                z-index: 10;
            }
        `;
        const styleElement2 = document.createElement('style');
        styleElement2.innerHTML = `
            .tiktokDL {
                position: absolute;
                z-index: 1;
                display: flex;
                -moz-box-pack: center;
                align-content: center;
                -moz-box-align: center;
                align-items: center;
                background: rgba(84, 84, 84, 0.5);
                border-radius: 50%;
                cursor: pointer;
                border: none;
                outline: none;
                width: 40px;
                height: 40px;
                top: calc(50% - 262px);
                margin-top: -24px;
                right: 20px;
                z-index: 10;
            }
        `;

        // Вставка кнопки в DOM
        if (document.querySelector(".css-1s9jpf8-ButtonBasicButtonContainer-StyledVideoSwitch.e11s2kul11")) {
            document.head.appendChild(styleElement1);
            const targetElement = document.querySelector('.css-1s9jpf8-ButtonBasicButtonContainer-StyledVideoSwitch.e11s2kul11');
            targetElement.insertAdjacentElement('afterend', linkElement);
        } else if (document.querySelector(".css-ty9aj4-DivVideoContainer.eqrezik7")) {
            document.head.appendChild(styleElement2);
            const targetElement = document.querySelector('.css-ty9aj4-DivVideoContainer.eqrezik7');
            targetElement.insertAdjacentElement('afterend', linkElement);
        } else {
            document.head.appendChild(styleElement1);
            const header = document.querySelector("#app-header");
            if (header) {
                header.appendChild(linkElement);
            } else {
                console.warn("TikTok Magic: Не удалось найти целевой элемент для кнопки загрузки.");
            }
        }
    }

    // Сохраните значение после последнего символа «/» в адресе веб-сайта
    let lastSegment = window.location.pathname.split('/').filter(function(segment) {
        return segment !== '';
    }).pop();

    function minhaFuncao() {
        console.log('Значение после последнего "/" изменилось на:', lastSegment);

        if (document.querySelector(".linkTok")) {
            document.querySelector(".linkTok").remove();
        }

        if (window.location.href.includes("/video/")) {
            addBToks();
            const videoTikTok = document.querySelector('video');
            if (videoTikTok && videoTikTok.src && videoTikTok.src.includes("-prime.tiktok.com/video/")) {
                const videoSrc = videoTikTok.src;
                const linkTokElement = document.querySelector(".linkTok");
                if (linkTokElement) {
                    linkTokElement.href = videoSrc;
                }
            } else {
                const linkTokElement = document.querySelector('.tiktokDL');
                if (linkTokElement) {
                    linkTokElement.addEventListener('click', function() {
                        GM_setValue("statusVideo", true);
                        // alert('Error.');
                        // window.location.reload();
                    });
                }
            }
        }
    }

    // Отслеживать изменения значения после последнего "/"
    function tokChck() {
        const newLastSegment = window.location.pathname.split('/').filter(function(segment) {
            return segment !== '';
        }).pop();

        // Если значение изменилось, вызываем функцию
        if (lastSegment !== newLastSegment) {
            lastSegment = newLastSegment;
            contagemK++;
            minhaFuncao();
        }
    }

    // Основная логика при загрузке скрипта
    if (window.location.href.includes("-prime.tiktok.com/video/")) {
        const videoElement = document.querySelector('video');

        if (videoElement) {
            videoElement.pause();
            const videoSrc = videoElement.src;
            const uniqueId = Math.floor(Math.random() * 10000); // Генерирует уникальный идентификатор из четырех цифр
            const downloadFileName = `tiktok_magic-${uniqueId}.mp4`;
            const downloadLink = document.createElement('a');
            downloadLink.href = videoSrc;
            downloadLink.download = downloadFileName;

            downloadLink.addEventListener('click', () => {
                // setTimeout(() => {
                //     window.close(); // Закрываем вкладку после начала загрузки
                // }, 1300); // Установите достаточный временной интервал для начала загрузки
            });
            downloadLink.click(); // Имитация клика для начала загрузки
        } else {
            console.log('Элемент видео не найден.');
        }
    } else {
        // Задержка перед инициализацией, чтобы DOM успел загрузиться
        setTimeout(function() {
            minhaFuncao();
            setInterval(tokChck, 1500); // Проверяем изменение URL каждые 1.5 секунды
        }, 2500); // Задержка 2.5 секунды
    }

    function carregarStatus() {
        const statusTK = GM_getValue("statusVideo");
        if (statusTK) {
            if (statusTK === true) {
                if (contagemK === 0) {
                    const dwstyle = document.createElement('style');
                    dwstyle.innerHTML = `
                        .tiktokDL{
                            border: 1px solid transparent;
                            animation: picboard .5s infinite;
                        }
                        @keyframes picboard {
                            0% {
                                border: 1px solid transparent;
                            }
                            100% {
                                border: 1px solid lightgreen;
                            }
                        }
                    `;
                    document.head.appendChild(dwstyle);
                }
            }
        } else {
            GM_setValue("statusVideo", false); // Устанавливаем в false, если не определено
        }
    }

    carregarStatus();

})();

QingJ © 2025

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