您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Download any video and/or audio from youtube.com in HIGH Quality and remove annoying end-screens
// ==UserScript== // @name [ 2 in 1 ] The Best Youtube Downloader and End screen remover, [Download: 320Kbps MP3 / 4K MP4] // @description Download any video and/or audio from youtube.com in HIGH Quality and remove annoying end-screens // @homepage https://products.agarmen.com/ // @namespace https://agarmen.com/ // @version 1.7 // @date 2021-03-01 // @author #EMBER // @compatible chrome // @compatible firefox // @compatible opera // @compatible safari // @icon https://www.google.com/s2/favicons?domain=youtube.com // @match *://*.youtube.com/* // @match *://*.yt-download.org/* // ==/UserScript== (function() { 'use strict'; let intvl, i = 0, loop = 1E3; document.body.onload = addConfirm; let isYoutube = false; const downUrl = "https://yt-download.org/api/button/mp"; const audioDownUrl = "https://ytmp3x.com/"; setInterval(function() { if ((document.getElementById("polymer-app") || document.getElementById("masthead") || window.Polymer) && window.location.href.indexOf("watch?v=") > 0) { isYoutube = true; callYoutube(); } if(window.location.href.indexOf("yt-download") > 0) callExternal(); }, loop); function callYoutube() { if(document.getElementById("downloadBtn") == null) addDownloadBtn(); if(document.getElementById("removedess") == null) addESR(); if(document.getElementById("removedess") != null) removeEndScreens("ytp-ce-element"); } function callExternal() { if(document.getElementById("adblockalert") == null) adBlockAlert(); } function adBlockAlert() { let el = document.createElement("h1"); el.setAttribute("id", "adblockalert"); el.style.textAlign = "center"; el.style.fontWeight = "bold"; el.style.fontSize = "22px"; el.innerHTML = "*Attention: This is an external website and the contained ads in this site are not related to the script! Please use "+ "<a target=\"_blank\" style=\"color:blue\" href=\"https://adblockplus.org/\">AdBlock Plus</a> or any other ad blockers to download files without seeing ads!"; let rclass = document.getElementsByClassName('antialiased')[0]; rclass.insertBefore(el, document.getElementsByClassName('hero')[0]); } function removeEndScreens(className) { let elements = document.getElementsByClassName(className); let ress = document.getElementById("removedess"); while (elements.length > 0) { if (elements[0].parentNode.removeChild(elements[0])) { i++; ress.innerHTML = '<span title="Total removed EndScreens: ' + i + '">[' + i + ']</span>'; console.log("Removed ES Count: " + i); } } } function DownloadConfirm(cond) { let link = downUrl + (cond ? "3" : "4"); link += "?url="+ window.location.href; window.open(link, '_blank'); return false; } function generateButton(text, color, eventListenerValue, titleText, isLeft) { const btn = document.createElement("button"); btn.style.padding = "10px 20px"; btn.style.backgroundColor = color; btn.style.color = "#fff"; btn.style.border = "none"; btn.style.borderRadius = "10px"; btn.style.position = "absolute"; btn.style.cursor = "pointer"; btn.style.fontSize = "16px"; btn.style.fontWeight = "bold"; btn.style.boxShadow = "0 2px 4px rgba(0,0,0,0.3)"; btn.innerText = text; btn.title = titleText; btn.addEventListener('click', () => { DownloadConfirm(eventListenerValue); }); if (isLeft) { btn.style.left = "6px"; btn.style.bottom = "6px"; } else { btn.style.right = "6px"; btn.style.bottom = "6px"; } return btn; } function extClicked(e) { let link = audioDownUrl + getVidId(window.location.href); window.open(link); e.preventDefault(); return false; } function addConfirm(){ const div = document.createElement("div"); const br = document.createElement("br"); div.id = "confirmDiv"; div.setAttribute("draggable", "true"); div.style.display = "none"; div.style.textAlign = "center"; div.style.left = "50%"; div.style.top = "50%"; div.style.transform = "translate(-50%, -50%)"; div.style.padding = "20px"; div.style.zIndex = "500"; div.style.position = "fixed"; div.style.background = "linear-gradient(135deg, #659df7, #6e5df5)"; div.style.borderRadius = "20px"; div.style.boxShadow = "0 0 20px rgba(0, 0, 0, 0.3)"; div.style.width = "300px"; div.style.height = "150px"; div.style.fontFamily = "Arial, sans-serif"; div.style.color = "#fff"; div.style.fontSize = "16px"; div.style.lineHeight = "1.5"; div.style.overflow = "hidden"; makeElementDraggable(div); const h1 = document.createElement("h1"); h1.innerText = "Download as"; h1.id = "downloadTitle"; h1.style.textAlign = "center"; const ext = document.createElement("a"); // Create an anchor element ext.setAttribute("target", "_blank"); ext.setAttribute("style", "text-decoration:none;"); ext.setAttribute("href", "#"); ext.setAttribute("title", "Service provider: ytmp3x.com"); ext.textContent = "Cut and Download"; // Set text content ext.style.fontSize = "14px"; ext.style.color = "#cfc7c6"; // Blue color ext.style.cursor = "pointer"; ext.addEventListener('click', function(e) { extClicked(e); }); // Hover effect ext.addEventListener('mouseenter', function() { this.style.textDecoration = "underline"; }); ext.addEventListener('mouseleave', function() { this.style.textDecoration = "none"; }); const closeBtn = document.createElement("span"); closeBtn.style.marginTop = "2"; closeBtn.style.marginRight = "2"; closeBtn.style.float = "right"; closeBtn.innerText = "✖"; closeBtn.style.fontWeight = "bold"; closeBtn.style.color = "red"; closeBtn.title = "Close switcher"; closeBtn.style.fontSize = "17px"; closeBtn.style.cursor = "pointer"; closeBtn.addEventListener('click', ()=>{div.style.display = 'none';}); const btnMp3 = generateButton("MP3","#cccc00", true, "Download as audio", true); const btnMp4 = generateButton("MP4","#4d8a54", false, "Download as video", false); div.appendChild(closeBtn); div.appendChild(h1); div.appendChild(btnMp3); div.appendChild(br); div.append(ext); div.appendChild(btnMp4); const content = document.getElementById("content"); const secDiv = document.getElementById("masthead-container"); if(content != null && div != null && secDiv != null) content.insertBefore(div, secDiv); } function changeText() { let ele = document.getElementById("removedess"); let size = ""; if (ele.style.fontSize === "14px") size = "28px"; else size = "14px"; ele.style.fontSize = size; } function clickDownload() { let btn = $("#downloadBtn"); if (btn != null && !clicked) btn.click(); clicked = false; } function addESR() { console.log("ESR added"); let el = document.createElement("span"); el.id = "removedess"; el.style.textAlign = "center"; el.style.cursor = "pointer"; el.style.color = "#00FFFF"; el.style.fontSize = "28px"; el.addEventListener("click", changeText); const downloadBtn = document.getElementById("downloadBtn"); if(downloadBtn !== null) document.getElementById("owner").insertBefore(el, downloadBtn); } function writeTitle() { let videohref = document.getElementById("videohref"); if (window.location.href != downUrl + getVidId()) { videohref.title = getVideoName(); videohref.href = downUrl + getVidId(); } return false; } function getVideoName() { let title = null; let subStart = 0; let ret = null; title = document.getElementsByTagName("title")[0].innerHTML; ret = (title.length > 0) ? title.substring(subStart, title.length - 10) : "video"; return getLang() + " " + ret; } function getLang() { let tx = "Download"; switch (document.documentElement.lang) { case "en": tx = "Download"; break; case "ru": tx = "Скачать"; break; case "az": tx = "Yüklə"; break; } return tx; } function getVidId(url) { let video_id = window.location.search.split('v=')[1]; let ampPosition = video_id.indexOf('&'); if (ampPosition != -1) { video_id = video_id.substring(0, ampPosition); } return url ? video_id : window.location; } function actionClick(){ let div = document.getElementById("confirmDiv"); if(div == null) { //alert("Confirmation DIV was not loaded correctly. Initializing..."); console.log("Confirmation DIV was not loaded correctly. Initializing..."); addConfirm(); actionClick(); return; } div.style.display = (div.style.display === "none") ? "block" : "none"; } function addDownloadBtn() { let buttonDiv = document.createElement("div"); buttonDiv.id = "downloadBtn"; buttonDiv.onmouseover = writeTitle; let btn = document.createElement("button"); btn.id = "videohref"; btn.innerText = "Download"; btn.style.height = "38px"; btn.style.backgroundColor = 'rgb(3, 235, 161)'; btn.style.right = "10px"; btn.style.textAlign = "right"; btn.style.margin = "3px 3px"; btn.style.padding = "7px 10px"; btn.style.border = "0"; btn.style.cursor = "pointer"; btn.style.boxShadow = "0 2px 4px rgba(0,0,0,0.3)"; btn.style.borderRadius = "20px"; btn.style.fontFamily = "Tahoma"; btn.title = getVideoName(); btn.addEventListener('click', actionClick); buttonDiv.appendChild(btn); const subPanel = document.getElementById("owner"); const subBtn = document.getElementById("subscribe-button"); subPanel.insertBefore(buttonDiv, subBtn); } function makeElementDraggable(element) { let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; element.onmousedown = dragMouseDown; function dragMouseDown(e) { if (e.button === 2 || e.button === 1 || e.target.tagName === 'BUTTON' || e.target.tagName === 'A' || e.target.tagName === 'SPAN') { // If the target of the mousedown event is a button, a, span and right mouse button, prevent dragging return; } e.preventDefault(); pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; document.onmousemove = elementDrag; element.style.cursor = "grabbing"; // Change cursor style when dragging starts } function elementDrag(e) { e.preventDefault(); pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; element.style.top = (element.offsetTop - pos2) + "px"; element.style.left = (element.offsetLeft - pos1) + "px"; } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; element.style.cursor = "default"; } } // Script by #EMBER })();