抖音自动切换最高画质

自动切换抖音到最高可用画质(4K>2K>1080P>720P),每5分钟自动检测

当前为 2024-12-30 提交的版本,查看 最新版本

// ==UserScript==
// @name         抖音自动切换最高画质
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  自动切换抖音到最高可用画质(4K>2K>1080P>720P),每5分钟自动检测
// @author       Your Name
// @match        *://*.douyin.com/*
// @grant        none
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNy4yLWMwMDAgNzkuMWI2NWE3OWI0LCAyMDIyLzA2LzEzLTIyOjAxOjAxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjQuMCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDMtMjBUMTU6NTc6MjMrMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMDMtMjBUMTU6NTc6MjMrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTAzLTIwVDE1OjU3OjIzKzA4OjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2ZGJkMzA1LTM4ZjQtNDM5Yy1hYjI5LTBhZDY1ZTM0ZjI5YyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjY2ZGJkMzA1LTM4ZjQtNDM5Yy1hYjI5LTBhZDY1ZTM0ZjI5YyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjY2ZGJkMzA1LTM4ZjQtNDM5Yy1hYjI5LTBhZDY1ZTM0ZjI5YyIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjY2ZGJkMzA1LTM4ZjQtNDM5Yy1hYjI5LTBhZDY1ZTM0ZjI5YyIgc3RFdnQ6d2hlbj0iMjAyMy0wMy0yMFQxNTo1NzoyMyswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI0LjAgKE1hY2ludG9zaCkiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YjV8XwAAAMJJREFUOI2lkjEKwkAQRd9GwcLWG3gAS0FQELyDYGFh4QG8hEfwAoKFYGkp2NjYeQULwUoQJJXgT7EbWNZNTDTzYZhhdt7M7MyqEIIvkX0l/QvAGeNVwB5YAWNrbQBQSs2AK3CSUi5SSt+AO3ACllLKMbABTkKInff+EQMcgS2w1lrPgQuwE0JsvPePGGCQCnZa6wWwBQ7GmFUMoFKwM8asgB1wttYuY4BE8EopdQeewFlrPU8B3gJ+2YVPu/gY8AQezKQr6UonIQAAAABJRU5ErkJggg==
// ==/UserScript==

(function() {
    'use strict';

    let isQualitySwitched = false;
    let currentQuality = null;
    let lastAttemptTime = 0;
    const CHECK_INTERVAL = 5 * 60 * 1000;
    let checkTimer = null;

    // 定义画质优先级
    const qualityPriority = [
        { name: '超清 4K', minHeight: 2160 },
        { name: '超清 2K', minHeight: 1440 },
        { name: '高清 1080P', minHeight: 1080 },
        { name: '高清 720P', minHeight: 720 }
    ];

    // 获取当前选中的画质
    function getCurrentQuality() {
        const selectedItem = document.querySelector('.virtual .item.selected');
        return selectedItem ? selectedItem.textContent.trim() : null;
    }

    // 移除悬停效果
    function removeHoverEffect() {
        const mouseOutEvent = new MouseEvent('mouseout', {
            bubbles: true,
            cancelable: true,
            view: window
        });
        const qualityButton = document.querySelector('.gear.isSmoothSwitchClarityLogin');
        if (qualityButton) {
            qualityButton.dispatchEvent(mouseOutEvent);
        }
    }

    // 检查画质是否需要切换
    function checkQualityNeedsSwitch() {
        const currentSelectedQuality = getCurrentQuality();
        const currentTime = Date.now();
        
        // 如果没有当前画质,或画质不一致,或距离上次尝试已经过了检测间隔,则尝试切换
        if (!currentQuality || 
            currentSelectedQuality !== currentQuality || 
            currentTime - lastAttemptTime >= CHECK_INTERVAL) {
            isQualitySwitched = false;
            switchToHighQuality();
        }
    }

    function switchToHighQuality() {
        if (isQualitySwitched) return;

        const qualityButton = document.querySelector('.gear.isSmoothSwitchClarityLogin');
        if (qualityButton) {
            const mouseOverEvent = new MouseEvent('mouseover', {
                bubbles: true,
                cancelable: true,
                view: window
            });
            qualityButton.dispatchEvent(mouseOverEvent);

            setTimeout(() => {
                const qualityOptions = Array.from(document.querySelectorAll('.virtual .item'));
                
                // 查找最高可用画质
                let selectedOption = null;
                for (const quality of qualityPriority) {
                    const option = qualityOptions.find(opt => 
                        opt.textContent.includes(quality.name)
                    );
                    if (option) {
                        selectedOption = option;
                        break;
                    }
                }

                if (selectedOption) {
                    selectedOption.click();
                    currentQuality = selectedOption.textContent.trim();
                    lastAttemptTime = Date.now(); // 记录切换时间
                    console.log(`已切换到${currentQuality}画质`);
                    isQualitySwitched = true;
                    startQualityCheck();
                } else {
                    // 未找到合适画质时,选择智能画质
                    const smartOption = qualityOptions.find(opt => 
                        opt.textContent.includes('智能')
                    );
                    if (smartOption) {
                        smartOption.click();
                        currentQuality = '智能';
                        lastAttemptTime = Date.now(); // 记录切换时间
                        console.log('未找到720P或更高画质,暂时切换到智能画质');
                        isQualitySwitched = true;
                        startQualityCheck();
                    }
                }
                
                // 无论是否找到合适画质,都移除悬停效果
                setTimeout(removeHoverEffect, 100);
            }, 500);
        } else {
            console.log('画质选择按钮未找到');
        }
    }

    // 启动定时检测
    function startQualityCheck() {
        if (checkTimer) {
            clearInterval(checkTimer);
        }
        
        checkTimer = setInterval(() => {
            console.log('定时检测画质中...');
            checkQualityNeedsSwitch();
        }, CHECK_INTERVAL);
    }

    // 停止定时检测
    function stopQualityCheck() {
        if (checkTimer) {
            clearInterval(checkTimer);
            checkTimer = null;
        }
    }

    // 使用 MutationObserver 监听页面变化
    const observer = new MutationObserver((mutations) => {
        if (document.querySelector('.gear.isSmoothSwitchClarityLogin') && !isQualitySwitched) {
            switchToHighQuality();
        }
    });

    // 开始观察文档的变化
    observer.observe(document.body, { childList: true, subtree: true });

    // 在页面切换时重置状态
    window.addEventListener('urlchange', () => {
        isQualitySwitched = false;
        currentQuality = null;
        lastAttemptTime = 0;
        stopQualityCheck();
    });

    // 在页面卸载时清理定时器
    window.addEventListener('unload', () => {
        stopQualityCheck();
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址