您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds an "Episode Links" button to Paramount+ shows pages to quickly obtain links for each season. These links can be used for downloading the episodes or other purposes.
// ==UserScript== // @name Paramount+ Links // @include https://www.paramountplus.com/shows/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js // @version 1.1.0 // @grant GM_addStyle // @description Adds an "Episode Links" button to Paramount+ shows pages to quickly obtain links for each season. These links can be used for downloading the episodes or other purposes. // @namespace https://greasyfork.org/users/700756 // ==/UserScript== GM_addStyle( ".modal {" + "display: none;" + "position: fixed;" + "z-index: 1;" + "left: 0;" + "top: 0;" + "width: 100%;" + "height: 100%;" + "overflow: auto;" + "background-color: rgb(0,0,0);" + "background-color: rgba(0,0,0,0.4);" + "}" + ".modal-content {" + "background-color: #fefefe;" + "margin: 15% auto;" + "padding: 20px;" + "border: 1px solid #888;" + "width: 80%;" + "}" + ".linksBox {"+ "width: 100%;" + "height: 300px" + "}" + ".close {" + "color: #aaa;" + "float: right;" + "font-size: 28px;" + "font-weight: bold;" + "}" + ".close:hover," + ".close:focus {" + "color: black;" + "text-decoration: none;" + "cursor: pointer;" + "}" + ".links-button {" + "top: 5px;" + "display: none;" + "}" + ".disabled-button {" + "background-image: none;" + "background-color: gray;" + "}" + ".disabled-button:hover {" + "background-image: none;" + "background-color: gray;" + "}" ); function getLinks(){ let $videos = $(".link.vilynx-redirect"); let links = ""; $videos.each( (index,element) => { links += $(element).prop("href"); links += "\n"; }); return links; } function modifyUI(){ $(document.body).append('<div id="myModal" class="modal">' + '<div class="modal-content">' + '<span class="close">×</span>' + '<textarea id="linksTxt" class="linksBox" readonly="readonly"></textarea>' + '</div>' + '</div>'); $(".cta-box").append('<a id="linksBtn" class="links-button button">' + '<div class="button__text">Episode Links</div>' + '</a>'); $(document).on('keyup', e => { if (e.key == "Escape"){ $("#myModal").css("display", "none"); } }); let linksGenerated = false; let buttonDisabled = false; function displayLinks(){ $("#myModal").css("display", "block"); } $("#linksBtn").click(() => { if (!buttonDisabled){ console.log("click"); if (!linksGenerated){ buttonDisabled = true; $("#linksBtn").addClass("disabled-button"); let $seasons = $(".pv-h > .content > li > a"); let currentIndex = 0; let videoContainer = $("#latest-episodes > .grid-view-container.grid").get(0); let links = ""; let firstRun = true; let iterateSeasonsFunc = function iterateSeasons(){ if (firstRun){ firstRun = false; $seasons.get(currentIndex).click(); setTimeout(iterateSeasonsFunc, 3000); } else if (currentIndex >= $seasons.size()){ links += getLinks(); $("#linksTxt").val(links); linksGenerated = true; displayLinks(); buttonDisabled = false; $("#linksBtn").removeClass("disabled-button"); } else { links += getLinks(); $seasons.get(currentIndex).click(); currentIndex++; setTimeout(iterateSeasonsFunc, 3000); } } iterateSeasonsFunc(); } else { displayLinks(); } } }); $(".links-button").hover( () => { console.log("hover"); }); $(".close").click(() => { $("#myModal").css("display", "none"); }); } $(document).ready(() => { let mutationObserver = new MutationObserver( (mutations, me) => { let $showMoreButton = $(".load-more-container-show > .load-more-button"); if ($showMoreButton.length){ $showMoreButton.get(0).click(); } else { $("#linksBtn").css("display", "block"); me.disconnect(); } }); mutationObserver.observe(document, { childList : true, subtree : true }); modifyUI(); });