b站分P视频时间计算器

...

目前为 2024-08-18 提交的版本。查看 最新版本

// ==UserScript==
// @name         b站分P视频时间计算器
// @namespace    http://tampermonkey.net/
// @version      2023-12-31
// @author       You
// @description  ...
// @match        https://www.bilibili.com/video/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';
    // Your code here...
    window.onload = function () {
        let btn = document.createElement('button');
        btn.innerText = '计算时间';
        btn.style.position = 'fixed';
        btn.style.right = '10px';
        btn.style.top = '300px';
        btn.style.width = '70px';
        btn.style.padding = '5px';
        document.body.appendChild(btn);

        try {
            if (getP() == null) {
                btn.innerText = "不是分P";
                setTimeout(function () {
                    btn.remove()
                }, 1000);
            } else {
                //前一集,后一集
                let playControl = document.querySelector(".bpx-player-control-bottom-left");
                playControl.addEventListener("click", () => {
                    setTimeout(calculateTime, 2000);//等2秒让右边列表的亮起状态发生变化
                });
                //以下是右边列表按钮
                btn.onclick = function () {
                    calculateTime();
                }
                let pages = document.querySelectorAll("#multi_page > div.cur-list > ul > li");
                for (let page of pages) {
                    page.addEventListener('click', function () {
                        setTimeout(calculateTime, 500); //延迟半秒执行,等待页面成功跳转
                    });
                }
            }

        } catch (err) {
            btn.innerText = err.message;
        }

        function calculateTime() {
            try {
                let elements = document.querySelectorAll("#multi_page > div.cur-list > ul > li > a > div > div.duration");
                let totalSeconds = 0;
                let p = getP();
                console.log("p为" + p + "总集数为" + elements.length);
                for (let i = p - 1; i < elements.length; i++) {
                    let time = elements[i].textContent.trim().split(':').reverse();
                    let seconds = time.reduce((prev, curr, idx) => {
                        return prev + Number(curr) * Math.pow(60, idx);
                    }, 0);
                    totalSeconds += seconds;
                }
                let hours = Math.floor(totalSeconds / 3600);
                let minutes = Math.floor((totalSeconds % 3600) / 60);
                let seconds = totalSeconds % 60;
                let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
                if (hours < 2) {
                    btn.innerText = formattedTime + "\n还有不到2小时,稳啦";
                } else {
                    btn.innerText = formattedTime;
                }
            } catch (err) {
                btn.innerText = err.message;
            }
        }

        function getP() {
            //刚点开分p视频播放第一集时,地址栏是没有p参数的,所以用以下方法
            if (document.getElementsByClassName("cur-page") != null && document.querySelector("#multi_page > div.head-con > div.head-left > h3") != null) {
                let str = document.getElementsByClassName("cur-page")[0].innerText;
                let match = str.match(/\((\d+)\/\d+\)/); // 使用正则表达式匹配分子
                if (match) {
                    return parseInt(match[1]); // 返回匹配到的分子
                }
            }
            return null;
        }
    }
}());

QingJ © 2025

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