B站_播放器自动化

播放时自动点击网页全屏、播放完成后自动退出全屏。

21.01.2023 itibariyledir. En son verisyonu görün.

// ==UserScript==
// @name               B站_播放器自动化
// @name:zh-CN         B站_播放器自动化
// @name:en-US         BILI_Player Automation
// @description        播放时自动点击网页全屏、播放完成后自动退出全屏。
// @version            1.0.5
// @author             LiuliPack
// @license            WTFPL
// @namespace          https://gitlab.com/LiuliPack/UserScript
// @match              https://www.bilibili.com/video/*
// @match              https://www.bilibili.com/bangumi/play/*
// @run-at             document-end
// ==/UserScript==

'use strict';

// 定义元素快捷选择器($(元素定位符))和元素存在函数($$(元素定位符))
let $ = ele => document.querySelector(ele);
function $$(ele) {
    return new Promise(resolve => {
        if ($(ele)) {
            return resolve($(ele));
        }
        const observer = new MutationObserver(mutations => {
            if ($(ele)) {
                resolve($(ele));
                observer.disconnect();
            }
        });
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    });
}

// 等待元素存在,防止出版音像节目页面运行错误
$$('video').then(() => {
    // 监听视频播放
    $('video').addEventListener("playing", () => {
        // 如果非全屏
        if(!/web|full/.test($('.bpx-player-container').getAttribute('data-screen'))) {
            // 点击网页全屏按钮
            ($('.squirtle-video-pagefullscreen')) ? $('.squirtle-video-pagefullscreen').click() : $('.bpx-player-ctrl-btn[aria-label="网页全屏"]').click() ;
        }
    });
    // 监听视频进度改变
    $('video').addEventListener("timeupdate", vid => {
        // 防止进度获取异常,重复定义视频
        vid = $('video');
        // 如果全屏状态且播放完成
        if(/web|full/.test($('.bpx-player-container').getAttribute('data-screen')) && parseInt(vid.currentTime) === parseInt(vid.duration)) {
            // 点击网页全屏按钮
            ($('.squirtle-video-pagefullscreen')) ? $('.squirtle-video-pagefullscreen').click() : $('.bpx-player-ctrl-btn[aria-label="网页全屏"]').click() ;
        }
    });
});