您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
查看b站合集已观看时长,单击便会更新,时长会显示在观看量后
当前为
// ==UserScript== // @name 查看b站合集已观看时长 // @version 1.3 // @license MIT // @description 查看b站合集已观看时长,单击便会更新,时长会显示在观看量后 // @author 白夜 // @match *://*.bilibili.com/video/* // @icon https://www.bilibili.com/favicon.ico // @namespace http://greasyfork.icu/users/1486583 // ==/UserScript== (function() { 'use strict'; function parseTime(text) { // 解析时间格式为 "mm:ss" 的字符串为总秒数 const [min, sec] = text.split(':').map(Number); return min * 60 + (sec || 0); } const titleEl = document.querySelector('.view-text'); const titleElinner = document.querySelector('.view-text').innerText; window.addEventListener("click", function () { console.log("获取时长中...") const list = document.querySelector('.video-pod__list'); if (!list) return console.warn('未找到 .video-pod__list'); const active = list.querySelector('.active'); if (!active) return console.warn('未找到 .active'); const classMenu = active.parentNode; if (!classMenu) return console.warn('未找到父级 div'); const statItems = classMenu.querySelectorAll('.stats .stat-item'); let totalSeconds = 0; let toActiveSeconds = 0; let reachedActive = false; for (const stat of statItems) { const timeText = stat.textContent.trim(); const seconds = parseTime(timeText); totalSeconds += seconds; const parent = stat.parentNode?.parentNode; const isHaveActive = parent?.classList.contains('active'); const isVideoAvtive_OneCollection = parent?.classList.contains('sub'); const isVideoAvtive_MoreCollection = parent?.classList.contains('video-pod__item'); if (isHaveActive && isVideoAvtive_OneCollection) { reachedActive = true; }else if(isHaveActive && isVideoAvtive_MoreCollection){ reachedActive = true; } if (!reachedActive) { toActiveSeconds += seconds; } } const format = sec => { const h = Math.floor(sec / 3600); const m = Math.floor((sec % 3600) / 60); const s = sec % 60; return [h, m, s].map(unit => String(unit).padStart(2, '0')).join(':'); }; const timerShow = ` ${format(toActiveSeconds)} / ${format(totalSeconds)}`; if (titleEl) { titleEl.innerText =titleElinner+ timerShow; } else { console.warn('未找到 h1 标签'); } console.log("获取时长完毕.") }); })();