Youtube 画质锁定

Youtube 画质锁定(一次选择后一直有效)

// ==UserScript==
// @name         Youtube 画质锁定
// @namespace    YYoutube quality lock
// @version      2023.08.29.01
// @description  Youtube 画质锁定(一次选择后一直有效)
// @author       James Wood
// @match        *://www.youtube.com/*
// @grant        none
// @license MIT
// ==/UserScript==

(async function() {
    'use strict';

    // 获取之前选择的视频画质
    let vidQuality = await GM.getValue('videoQuality', 1);
    console.log('之前选择的视频画质:', vidQuality);

    document.addEventListener('yt-player-updated', () => {

        /* 检查页面类型 */
        if (window.location.pathname != '/watch') {
            return;
        }

        console.log('视频播放器已更新');

        /* 加载设置面板 */
        let settingsBtn = document.querySelector('.ytp-settings-button');
        settingsBtn.click();
        settingsBtn.click();
        console.log('已点击设置按钮');

        /* 打开画质选择面板 */
        let qualityBtn = document.querySelector('.ytp-menuitem-content div:not(.ytp-menuitem-toggle-checkbox)');
        qualityBtn.click();
        let qualityOptions = document.querySelectorAll('.ytp-quality-menu .ytp-menuitem:not(:has(.ytp-premium-label))');
        console.log('可选画质:', qualityOptions);

        /* 关闭画质选择面板 */
        settingsBtn.click();
        settingsBtn.click();
        console.log('已关闭画质选择面板');

        /* 选择视频画质 */
        let nth_option = qualityOptions.length - vidQuality;
        console.log('nth_option:', nth_option);
        let selectedOption = qualityOptions[Math.max(0, nth_option)];
        console.log('selectedOption:', selectedOption);
        selectedOption.click();
        console.log('已选择视频画质:', selectedOption.textContent);

        /* 添加画质选择的事件监听器 */
        for (let i = 0; i < qualityOptions.length; ++i) {
            qualityOptions[i].addEventListener('click', () => {
                GM.setValue('videoQuality', qualityOptions.length - i);
                console.log('已更新视频画质:', qualityOptions.length - i);
            });
        }
    });

    console.log('YouTube固定视频画质脚本开始执行');
})();