Streamtape Video Downloader with direct URL resolution
// ==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.");