Greasy Fork

Greasy Fork is available in English.

自研 - Pixiv(予素) - 排行榜移除非首次登场作品

按下菜单中得选项后,自动加载排行榜所有作品并移除非首次登场作品。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name               自研 - Pixiv(予素) - 排行榜移除非首次登场作品
// @name:en_US         Self-made - Pixiv - Ranking remove non-debut artworks
// @description        按下菜单中得选项后,自动加载排行榜所有作品并移除非首次登场作品。
// @description:en_US  After selecting option from the menu, automatically load all works from the leaderboard and remove those that are not debut appearances.
// @version            1.0.2
// @author             CPlayerCHN
// @license            MulanPSL-2.0
// @namespace          https://www.gitlink.org.cn/CPlayerCHN
// @match              https://www.pixiv.net/ranking.php
// @icon               https://pixiv.net/favicon.ico
// @grant              GM_registerMenuCommand
// @grant              GM_unregisterMenuCommand
// @run-at             document-idle
// @noframes
// ==/UserScript==

(function() {
    'use strict';

    // 定义「等待元素」「前往页尾」「移除」函数。
    function waitForElm(selector) {
        // https://stackoverflow.com/questions/5525071/how-to-wait-until-an-element-exists
        return new Promise(resolve => {
            if (document.querySelector(selector)) {
                return resolve(document.querySelector(selector));
            }
            const observer = new MutationObserver(mutations => {
                if (document.querySelector(selector)) {
                    observer.disconnect();
                    resolve(document.querySelector(selector));
                }
            });
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
        });
    };
    function toEnd(slowly = false) {
        // 如果第五百名作品被加载,就停止
        if(document.querySelector('[href="#500"]')) { return };

        // 定义「移动」非立即初始化读写变量;如果「慢速移动」参数启用,就移动 100 像素,否则就直接到底
        let move = document.documentElement.scrollHeight;
        if(slowly) { move = 100 };
        console.log(move)

        // 滚动到页尾
        document.documentElement.scrollTop += move;

        // 每 0.1 秒循环一次本函数
        setTimeout(() => {
            toEnd(slowly);
        }, 100);
    }
    function remove() {
        // 卸载所有菜单命令
        GM_unregisterMenuCommand(menu_fastRemove);
        GM_unregisterMenuCommand(menu_remove);

        // 等待第 500 名作品被加载
        waitForElm('[href="#500"]').then((elm) => {
            // 移除所有非首次登场作品并移动至页首
            document.querySelectorAll('.rank p:nth-child(2) a').forEach((elm) => {
                elm.parentElement.parentElement.parentElement.remove();
            });
            document.documentElement.scrollTop = 0;
        });
    }

    // 定义「快速获取所有作品基础信息并隐藏非首次登场作品」「加载所有作品并隐藏非首次登场作品。」菜单命令
    let menu_fastRemove = GM_registerMenuCommand("快速获取所有作品基础信息并隐藏非首次登场作品。", () => {
            // 执行「前往页尾」「移除」函数
            toEnd();
            remove();
        }),
        menu_remove = GM_registerMenuCommand("加载所有作品并隐藏非首次登场作品。", () => {
            // 执行「前往页尾」「移除」函数
            toEnd(true);
            remove();
        });

})();