Douyin live stream optimization(优化网页)

自动检测特定元素并刷新页面,同时优化观看体验,删除多余元素并点击提升画质

// ==UserScript==
// @name         Douyin live stream optimization(优化网页)
// @namespace    http://tampermonkey.net/
// @version      1.0.2
// @description  自动检测特定元素并刷新页面,同时优化观看体验,删除多余元素并点击提升画质
// @match        https://*.douyin.com/*
// @grant        none
// @license      MIT
// @run-at       document-idle
// ==/UserScript==

(function () {
    'use strict';

    /** ==================== 工具函数定义 ==================== */

    function simulateBKeyPress() {
        const event = new KeyboardEvent('keydown', {
            key: 'b',
            code: 'KeyB',
            keyCode: 66,
            charCode: 0,
            which: 66,
            shiftKey: false,
            ctrlKey: false,
            metaKey: false,
            bubbles: true
        });
        document.dispatchEvent(event);
        console.log('[优化] 模拟按下 B 键');
    }

    function clickButton() {
        const button = document.querySelector('.psKR9RS0 .WoNKVQmY.Z20k_Nsy');
        if (button) {
            button.click();
            console.log('[优化] 按钮已点击');
        } else {
            console.log('[优化] 按钮未找到');
        }
    }

    function removeElement(selector, message) {
        const element = document.querySelector(selector);
        if (element) {
            element.remove();
            console.log(`[优化] ${message} 已删除`);
        } else {
            console.log(`[优化] 未找到 ${message}`);
        }
    }

    function removeSpecialContent() {
        document.querySelectorAll('div._192Y0el > div.ljM5iqdR').forEach(e => e.remove());
        console.log('[优化] 礼物删除成功~');
        removeElement('.mDjtvQMS.GiftEffectPlugin', '礼物特效元素');
    }

    function clickNewElement() {
        const newElement = document.querySelector('.D7UhJyco');
        if (newElement) {
            newElement.click();
            console.log('[优化] 画质切换成功~');
        } else {
            console.log('[优化] 未找到新的指定元素');
        }
    }

    function runOptimization() {
        simulateBKeyPress();
        clickButton();
        removeSpecialContent();
        clickNewElement();
    }

    /** ==================== 轮询检测并删除._D4WLewc.GDP2iTsQ,删除后点击.xJMJ5DRo ==================== */
    let notFoundCount = 0;
    const maxMisses = 3;

    const optimizationInterval = setInterval(() => {
        console.log('[轮询] 检测开始');
        const targetElement = document.querySelector('._D4WLewc.GDP2iTsQ');
        console.log('[轮询] 检测结果:', targetElement);

        if (targetElement) {
            console.log('[轮询] 检测到._D4WLewc.GDP2iTsQ,执行删除...');
            targetElement.remove();
            console.log('[轮询] 已删除._D4WLewc.GDP2iTsQ元素');

            const clickElem = document.querySelector('.xJMJ5DRo');
            if (clickElem) {
                clickElem.click();
                console.log('[轮询] 删除后点击了 .xJMJ5DRo 元素');
                simulateBKeyPress();
            } else {
                console.log('[轮询] 未找到 .xJMJ5DRo 元素,无法点击');
            }

            notFoundCount = 0; // 重置计数
        } else {
            notFoundCount++;
            console.log(`[轮询] 第 ${notFoundCount} 次未检测到目标元素`);
            if (notFoundCount >= maxMisses) {
                console.log(`[轮询] 连续 ${maxMisses} 次未检测到,停止轮询`);
                clearInterval(optimizationInterval);
            }
        }
    }, 3000);

    /** ==================== 无限轮询:检测 CkKPEcld 刷新,检测 ej6cQnWN 则退出 ==================== */
    const refreshInterval = setInterval(() => {
        const blockElement = document.querySelector('.ej6cQnWN');
        const refreshTarget = document.querySelector('.CkKPEcld');

        if (blockElement) {
            console.log('[刷新检测] 检测到 .ej6cQnWN,判定无需刷新,停止轮询');
            clearInterval(refreshInterval);
        } else if (refreshTarget) {
            console.log('[刷新检测] 检测到 .CkKPEcld,即将刷新页面');
            clearInterval(refreshInterval);
            location.reload();
        } else {
            console.log('[刷新检测] 未检测到 .CkKPEcld,也未出现 .ej6cQnWN,继续轮询...');
        }
    }, 3000);

    /** ==================== 页面加载后延迟任务(可保留) ==================== */
    setTimeout(simulateBKeyPress, 5000);
    setTimeout(clickButton, 5000);
    setTimeout(removeSpecialContent, 5000);

    /** ==================== 重复性任务(最多执行 10 次) ==================== */
    let counter = 0;
    const maxTries = 10;
    const interval = setInterval(() => {
        removeElement('.LE4P00KT', '优化元素 LE4P00KT');
        clickNewElement();
        counter++;
        if (counter >= maxTries) clearInterval(interval);
    }, 1000);

})();
长期地址
遇到问题?请前往 GitHub 提 Issues。