Holodex - Auto Click Sort Dropdown and Select Most Viewers (With Load Detection)

Automatically clicks the sort dropdown and selects "Most Viewers" on Holodex.net with load detection

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         Holodex - Auto Click Sort Dropdown and Select Most Viewers (With Load Detection)
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Automatically clicks the sort dropdown and selects "Most Viewers" on Holodex.net with load detection
// @author       ChatGPT
// @match        https://holodex.net/*
// @grant        none
// @run-at       document-idle
// ==/UserScript==

(function () {
    'use strict';

    // 정렬 아이콘 클릭을 위한 함수
    function findSortButton() {
        return [...document.querySelectorAll('svg.v-icon__svg')].find(svg => {
            const path = svg.querySelector('path');
            return path?.getAttribute('d') === 'M6,13H18V11H6M3,6V8H21V6M10,18H14V16H10V18Z';
        })?.closest('button');
    }

    // "Sort" 탭 클릭
    function clickSortTab() {
        const sortTab = document.querySelector('.v-select__selection--comma');
        if (sortTab && sortTab.textContent.includes('Latest')) {
            console.log('[Tampermonkey] "Sort" tab found, clicking...');
            sortTab.click();
        } else {
            console.log('[Tampermonkey] "Sort" tab not found!');
        }
    }

    // "Most Viewers" 항목 선택
    function selectMostViewers() {
        const listItems = document.querySelectorAll('.v-list-item');
        for (const item of listItems) {
            if (item.textContent.includes('Most Viewers')) {
                console.log('[Tampermonkey] "Most Viewers" found, selecting...');
                item.click();
                return true;
            }
        }
        return false;
    }

    // 첫 번째 정렬 버튼 클릭 및 이후 단계 처리
    function trySortClickAndSelect() {
        const sortButton = findSortButton();
        if (sortButton) {
            console.log('[Tampermonkey] Sort button found, clicking...');
            sortButton.click();

            // 바로 "Sort" 탭 클릭
            clickSortTab();

            // "Most Viewers" 항목을 바로 선택 시도
            if (!selectMostViewers()) {
                console.log('[Tampermonkey] "Most Viewers" not found yet, retrying...');
                // 만약 아직 항목이 준비되지 않았다면 다시 시도
                setTimeout(() => {
                    console.log('[Tampermonkey] Retry select "Most Viewers"...');
                    selectMostViewers();
                }, 300);
            }
        } else {
            console.log('[Tampermonkey] Sort button not found!');
        }
    }

    // 로딩 완료 감지 함수
    function detectPageLoad() {
        // 페이지 로딩이 완료되고 나면 클릭 작업 시작
        if (document.readyState === 'complete') {
            console.log('[Tampermonkey] Page loaded, starting sort click...');
            trySortClickAndSelect();
        }
    }

    // 페이지 로딩 상태 감지
    window.addEventListener('load', detectPageLoad);

    // DOM 변화 감지
    const observer = new MutationObserver(() => {
        const sortButton = findSortButton();
        if (sortButton) {
            sortButton.click();
            console.log('[Tampermonkey] Sort dropdown button clicked');
            observer.disconnect(); // 버튼 클릭 후 감지 종료

            // 버튼 클릭 후 나머지 작업 수행
            trySortClickAndSelect();
        }
    });

    // 페이지 로드 후 감지 시작
    window.addEventListener('load', () => {
        console.log('[Tampermonkey] Script loaded, starting observer...');
        observer.observe(document.body, { childList: true, subtree: true });
    });
})();