Streamtape Direct Downloader

Streamtape Video Downloader with direct URL resolution

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Streamtape Direct Downloader
// @namespace    StreamtapeDownloader
// @version      1.0
// @author       sharmanhall
// @description  Streamtape Video Downloader with direct URL resolution
// @match        *://streamtape.com/*
// @match        *://streamtape.xyz/*
// @match        *://streamtape.to/*
// @match        *://streamtape.net/*
// @match        *://streamtape.site/*
// @match        *://streamtape.cc/*
// @match        *://tapecontent.net/*
// @match        *://streamadblockplus.com/*
// @match        *://streamta.pe/*
// @match        *://strtape.cloud/*
// @match        *://strtape.site/*
// @match        *://strtapeadblock.club/*
// @match        *://strcloud.link/*
// @match        *://strcloud.club/*
// @match        *://strcloud.in/*
// @match        *://tapeadsenjoyer.com/*
// @match        *://gettapeads.com/*
// @match        *://streamtape.com/*
// @match        *://tapelovesads.org/*
// @match        https://streamtape.com/*
// @match        https://streamadblocker.xyz/*
// @match        https://*.tapecontent.net/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=streamtape.com
// @grant        none
// @license      MIT
// @compatible   chrome
// @compatible   edge
// @compatible   firefox
// @compatible   opera
// @compatible   safari
// ==/UserScript==

console.log("StreamtapeDownloader");

function checkVideoSrc() {
    const mainVideo = document.querySelector('#mainvideo');
    const subheadingParent = document.querySelector('.subheading').parentNode;

    if (mainVideo) {
        const videoSrc = mainVideo.src;

        if (videoSrc) {
            console.log("Video source found:", videoSrc);

            if (!document.getElementById('downloadsDiv')) {
                const downloadsDiv = document.createElement('div');
                //downloadsDiv.id = 'downloadsDiv';
                //downloadsDiv.style.border = '2px solid blue';
                //downloadsDiv.style.borderRadius = '7.5px';
                //downloadsDiv.style.marginTop = '10px';

                const openInTabDiv = document.createElement('div');
                openInTabDiv.style.border = '2px solid blue';
                openInTabDiv.style.borderRadius = '7.5px';
                openInTabDiv.style.marginTop = '10px';

                const downloadDiv = document.createElement('div');
                downloadDiv.style.border = '2px solid blue';
                downloadDiv.style.borderRadius = '7.5px';
                downloadDiv.style.marginTop = '10px';

                const resolveDiv = document.createElement('div');
                resolveDiv.style.border = '2px solid blue';
                resolveDiv.style.borderRadius = '7.5px';
                resolveDiv.style.marginTop = '10px';

                const openInTabButton = document.createElement('a');
                openInTabButton.innerText = 'Open in New Tab';
                openInTabButton.setAttribute('href', videoSrc);
                openInTabButton.setAttribute('target', '_blank');
                openInTabButton.style.display = 'block';
                openInTabButton.style.marginTop = '5px';

                const downloadButton = document.createElement('a');
                downloadButton.innerText = 'Download';
                const downloadSrc = videoSrc;
                downloadButton.setAttribute('href', downloadSrc);
                downloadButton.setAttribute('download', '');
                downloadButton.style.display = 'block';
                downloadButton.style.marginTop = '5px';

                const resolveButton = document.createElement('a');
                resolveButton.innerText = 'Click here to generate direct URL';
                resolveButton.style.display = 'block';
                resolveButton.style.marginTop = '5px';

                // Function to resolve the final download URL
                resolveButton.addEventListener('click', async function(event) {
                    event.preventDefault();
                    try {
                        const response = await fetch(videoSrc);
                        if (response.ok) {
                            const resolvedURL = response.url;
                            window.open(resolvedURL, '_blank');
                            resolveButton.setAttribute('href', resolvedURL);
                            resolveButton.setAttribute('download', '');
                        } else {
                            console.error('Failed to resolve URL');
                        }
                    } catch (error) {
                        console.error('Error resolving URL:', error);
                    }
                });

                openInTabDiv.appendChild(openInTabButton);
                downloadDiv.appendChild(downloadButton);
                resolveDiv.appendChild(resolveButton);

                downloadsDiv.appendChild(openInTabDiv);
                downloadsDiv.appendChild(downloadDiv);
                downloadsDiv.appendChild(resolveDiv);

                subheadingParent.appendChild(downloadsDiv);

                // Stop the interval once buttons are created
                clearInterval(intervalId);
            } else {
                console.log("Buttons already exist. Skipping creation.");
            }

        } else {
            console.log("Video source not found. Retrying...");
        }
    } else {
        console.log("Main video element not found. Retrying...");
    }
}

// Initial check
checkVideoSrc();

// Check every second until the buttons are created
const intervalId = setInterval(checkVideoSrc, 1000);

console.log("StreamtapeDownloader script loaded.");