Greasy Fork is available in English.

Netflix Marathon

Automatically skip recaps, intros and click nexts on Netflix, DisneyPlus and Amazon video for you.

< 腳本Netflix Marathon的回應

評論:正評 - 腳本一切正常

§
發表於:2021-05-10

Please review my refactored version. It should be easier to read and easier to extend.

I also added Netflix's "next-episode button" in line 41.

// ==UserScript==
// @name         Netflix Marathon
// @namespace    https://greasyfork.org/en/scripts/30029-netflix-marathon
// @version      2.7.1
// @description  Automatically skip recaps, intros and click nexts on Netflix, DisneyPlus and Amazon video for you.
// @author       ran, me
// @include      https://www.netflix.com/*
// @include      https://www.amazon.com/gp/video/*
// @include      https://www.amazon.de/gp/video/*
// @include      https://www.amazon.*/gp/video/*
// @include      https://www.amazon.*/gp/product/*
// @include      https://primevideo.com/region/*/detail/*
// @include      https://*.primevideo.com/region/*/detail/*
// @include      https://primevideo.com/detail/*
// @include      https://*.primevideo.com/detail/*
// @include      https://*.primevideo.com/*
// @include      https://www.peacocktv.com/watch/*
// @include      https://www.disneyplus.com//video/*
// @include      https://www.disneyplus.com/*/video/*
// @require      http://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js
// @grant        none
// @license MIT
// ==/UserScript==

function log(thing) {
    const logEnabled = false;
    logEnabled === true && console.log(thing);
}

const targets = [
    {log: 'Found autoplay',               className: 'postplay-still-container'},
    {log: 'Found autoplay',               className: 'WatchNext-still-container'},
    {log: 'Found Amazon video next',      className: 'countdown'},
    {log: 'Found Amazon skip ad',         className: 'adSkipButton'},
    {log: 'Found Amazon skip intro',      className: 'skipElement'},
    {log: 'Found peacock skip intro',     className: 'playback-controls__skip--button'},
    {log: '', className: 'PlayerControlsNeo__layout PlayerControlsNeo__layout--dimmed', className1stChildClick: 'interrupter-actions', count: 80},
    {log: '', className: 'skip__button', className1stChildClick: 'skip__button'}, // skips recaps and intros on disneyplus
    {log: 'Found autoplay',               className: 'video_view--mini', querySelector: '*[data-testid="up-next-play-button"]'}, // auto plays next episode on disneyplus
    {log: 'Found Amazon imdb skip intro', className: 'atvwebplayersdk-skipelement-button'},
    {log: 'Found Netflix video next',      className: 'button-nfplayerNextEpisode'},

];

const jQueryTargets = [
    {selector: "div div:contains('Skip')",       innerText: 'Skip',       log: ''}, // amazon trailers
    {selector: "div div:contains('Skip Intro')", innerText: 'Skip Intro', log: ''}, // amazon intro
    {selector: "div div:contains('Skip Recap')", innerText: 'Skip Recap', log: ''}, // amazon recap
];

var count = 0;

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function find() {
    if (count === 0) {
        if (document.getElementsByClassName('skip-credits').length !== 0 && document.getElementsByClassName('skip-credits-hidden').length === 0) {
            log('Found credits.');
            await sleep(200);
            document.getElementsByClassName('skip-credits')[0].firstElementChild.click();
            await sleep(200);
            document.querySelector('.button-nfplayerPlay').click();
            count = 80;
            log('Found credits. +4s');
            //window.clearInterval(intervalId);
        }

        targets.forEach(target => {
            const elements = document.getElementsByClassName(target.className);
            if (elements.length !== 0) {
                log(target.log);
                if (target.hasOwnProperty('className1stChildClick')) {
                    document.getElementsByClassName(target.className1stChildClick)[0].firstChild.click();
                }
                else if (target.hasOwnProperty('querySelector')) {
                    document.querySelector(target.querySelector).click();
                }
                else {
                    elements[0].click();
                }
                count = target.hasOwnProperty('count') ? target.count : 5;
            }
        });

        jQueryTargets.forEach(target => {
            const badDivs = $(target.selector);
            for (let i = 0; i < badDivs.length; i++) {
                if (i === 0) {
                    log(target.log);
                }
                if (badDivs[i].innerText === target.innerText) {
                    badDivs[i].click();
                    count = 5;
                }
            }
        });
    }
    else {
        count--;
    }
}

var intervalId = window.setInterval(find, 300);
§
發表於:2021-08-19

Version 2.7.1
- Netflix's "next-episode button" (the one before you move your mouse)
- refactored, see above

Version 2.7.2
- Disneyplus: added suggestions by NFLD99 and GedoonS

Download:
https://gist.github.com/auipga/cf1bfe94968c8fa45f1341745f41a63f

發表回覆

登入以回復