您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
show avg ratings and rankings on a person's page on bangumi
- // ==UserScript==
- // @name PersonPageStats
- // @namespace https://jirehlov.com
- // @version 0.1.1
- // @description show avg ratings and rankings on a person's page on bangumi
- // @author Jirehlov
- // @include /^https?:\/\/(bgm\.tv|bangumi\.tv|chii\.in)\/person\/\d+(?!\/works\/voice)\/works/
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- "use strict";
- let totalSum = 0;
- let totalCount = 0;
- let totalRank = 0;
- let rankCount = 0;
- function calculateAverage() {
- const browserFullElements = document.querySelectorAll(".browserFull");
- totalSum = 0;
- totalCount = 0;
- totalRank = 0;
- rankCount = 0;
- browserFullElements.forEach(browserFullElement => {
- const liElements = browserFullElement.querySelectorAll("li");
- liElements.forEach(liElement => {
- const rateInfoElement = liElement.querySelector(".rateInfo");
- if (rateInfoElement) {
- const fadeElement = rateInfoElement.querySelector(".fade");
- if (fadeElement) {
- const value = parseFloat(fadeElement.textContent);
- if (!isNaN(value)) {
- totalSum += value;
- totalCount++;
- }
- }
- }
- });
- });
- const rankElements = document.querySelectorAll(".rank");
- rankElements.forEach(rankElement => {
- const smallElement = rankElement.querySelector("small");
- if (smallElement) {
- const rankText = rankElement.textContent.replace("Rank ", "").trim();
- const rankValue = parseInt(rankText);
- if (!isNaN(rankValue)) {
- totalRank += rankValue;
- rankCount++;
- }
- }
- });
- return {
- avgRating: totalCount === 0 ? 0 : totalSum / totalCount,
- avgRank: rankCount === 0 ? 0 : totalRank / rankCount
- };
- }
- function updateDisplay() {
- const {avgRating, avgRank} = calculateAverage();
- const averageLi = document.querySelector("#averageValue");
- const rankAverageLi = document.querySelector("#rankAverage");
- const totalCountSpan = document.querySelector("#totalCount");
- const rankCountSpan = document.querySelector("#rankCount");
- if (averageLi)
- averageLi.textContent = avgRating.toFixed(4);
- if (rankAverageLi)
- rankAverageLi.textContent = avgRank.toFixed(4);
- if (totalCountSpan)
- totalCountSpan.textContent = totalCount;
- if (rankCountSpan)
- rankCountSpan.textContent = rankCount;
- }
- function createFilterButtons() {
- const subjectFilterElement = document.querySelector(".subjectFilter");
- if (subjectFilterElement) {
- const groupedUL = document.createElement("ul");
- groupedUL.className = "grouped clearit";
- const titleLi = document.createElement("li");
- titleLi.classList.add("title");
- titleLi.innerHTML = "<span>当前页面统计信息</span>";
- const averageLi = document.createElement("li");
- averageLi.innerHTML = `<span>评分平均值: <span id="averageValue">${ calculateAverage().avgRating.toFixed(4) }</span></span>`;
- const totalCountLi = document.createElement("li");
- totalCountLi.innerHTML = `<span>评分条目数: <span id="totalCount">${ totalCount }</span></span>`;
- const rankAverageLi = document.createElement("li");
- rankAverageLi.innerHTML = `<span>排名平均值: <span id="rankAverage">${ calculateAverage().avgRank.toFixed(4) }</span></span>`;
- const rankCountLi = document.createElement("li");
- rankCountLi.innerHTML = `<span>排名条目数: <span id="rankCount">${ rankCount }</span></span>`;
- groupedUL.appendChild(titleLi);
- groupedUL.appendChild(averageLi);
- groupedUL.appendChild(totalCountLi);
- groupedUL.appendChild(rankAverageLi);
- groupedUL.appendChild(rankCountLi);
- subjectFilterElement.appendChild(groupedUL);
- }
- }
- createFilterButtons();
- updateDisplay();
- const observer = new MutationObserver(() => {
- observer.disconnect();
- updateDisplay();
- observer.observe(document.body, {
- subtree: true,
- childList: true,
- attributes: true,
- attributeFilter: ["class"]
- });
- });
- observer.observe(document.body, {
- subtree: true,
- childList: true,
- attributes: true,
- attributeFilter: ["class"]
- });
- }());
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址