您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Bili 個人主頁優化.
// ==UserScript== // @name B站個人主頁優化 (歸檔員自用) // @namespace http://yuhang0000.github.io/ // @version v1.14_2025-8-8 // @description Bili 個人主頁優化. // @author 欲行肆灵 // @match https://space.bilibili.com/* // @match https://t.bilibili.com/* // @match file:///* // @grant none // @license GPLv3 // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACnklEQVRYR+2XX0hTURzHv9edXVuNNaFhm+CLiBXh8qXaUGRBD+YCX8oSwerm34cG+RKxMGlILxMEwYxuTVCazxV7S8Q0eskUscboIWOzWpDWck5n9rDuzXO3dbu4raA+cGHn+/ve8/vew93ZGfBXolIRNPd40P/kAzrcXmi0OqlFFo1Whw63F/2TYTT3eKBSEaklPZV1TRia3xQv58ikohAarQ7OkUlqjsq6JqkNAFKnystTUePSCis6B31wt9YgGvlM1aRotDp0DvpQWmGl9DQrwEgFAABRs7jiGUuaJDA9BXfbCUS/LFO6QLrmgekp3DxnQ3x9jdKRLgDw68lShVDq/8HPAETNwlbfBkvtWRSVHsSOndotvu2zuhJBMDCHp4/uY2z0lrAaiQAFhUW4PPAQxfsOUTdli4VXL9Dbbsen90EGRM2ia/RZzpoLLPhn0F1/hMB2ujXnzQGguMwM26kWAou9gSrMTvjAOzkshRcpfbvoDUZwLh7lVTWiZrE3MOBnYiBqVhQd1aaMNxfQG4zoGw+J4/hajFDNAWStOZA8N2HzU+5OuUQ+QHlVDTgXDwDgnRxmJ3wSB41CP4Oh+U1KaTpA74594yHoDUYAiSV0VJuouhQ5v6Sf/AoIk0k/p0OhXz5AlpEPsBReFJ9k+eM7STUZhX75AHevXQTn4vFtYwP3ulqk5SQU+uVfwkyj+CXMMv8DEMTX16jfA73BmLRnZ4rde/ZS49WVCMGb+ecoMR8VxQs37oB3cr/zFVJEQWERznffprRgYI7B8cZLaLzaRxVyxXCPgwFh8xNHsjKztJ5V3vpncb3+8B86lPpn0NtWmziUChA1i2Nn2mE92QhTyX7ka3ZtuWX7xKJfEXr9ElMPhvHYO5DqT8q/yXdT6gC1Lkc+ZAAAAABJRU5ErkJggg== // ==/UserScript== (function() { 'use strict'; window.debug_space = false; //这是延时 function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // 定义一个函数来检查和修改每个 .bili-album 元素 (北站又 TM 改界面,现在是检查 .bili-dyn-gallery 元素) function modifyAlbums() { const albums = document.querySelectorAll('.bili-dyn-gallery'); albums.forEach(album => { if (album.querySelector('.bili-album__preview')) return; // 如果已经修改过,跳过 fiximg(album,"bili-dyn-gallery"); }); //我恨以条动态放 18 张图 const data_totals = document.querySelectorAll('div.bili-album__preview__picture.total-mask'); data_totals.forEach(data_total => { let data_tota; data_tota = data_total.parentElement; let delDOM = data_tota; data_tota = data_tota.parentElement; delDOM.remove(); delDOM = data_tota; data_tota = data_tota.lastChild; data_tota = data_tota.lastChild; data_tota = data_tota.querySelector('.bili-album__watch__track__slider'); //data_tota = data_tota.firstChild; fiximg(data_tota,"18-img"); delDOM = delDOM.querySelector('.bili-album__watch'); delDOM.remove(); }); } function fiximg(album, style_div){ // 新增代码块开始 //图片组 let imgPack = []; let imgclick = false; const newImgDiv = document.createElement('div'); const divL = document.createElement('div'); const divC = document.createElement('div'); const divR = document.createElement('div'); //图片左边 divL.style.position = "absolute"; divL.style.top = "0"; divL.style.height = "100%"; divL.style.cursor = "pointer"; divL.style.left = "0"; divL.style.width = "20%"; //鼠标点击 divL.addEventListener('click', function() { let divL1 = divL.parentElement; let firstChild = divL1.parentElement; divL1 = divL1.lastChild; divL.style.display = ''; divR.style.display = ''; if(firstChild.id != 0) { divL1.src = imgPack[parseInt(firstChild.id) - 1]; firstChild.id = parseInt(firstChild.id) - 1; if(firstChild.id == 0) { this.style.display = 'none'; this.style.cursor = 'zoom-out'; } } else { imgclick = true; this.style.cursor = 'zoom-out'; newImgDiv.style.display = 'none'; } }); //鼠标经过 divL.addEventListener('mouseover', function() { let divL1 = divL.parentElement; let firstChild = divL1.parentElement; if(firstChild.id != 0) { imgclick = false; this.style.cursor = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAA8CAYAAAADm2gpAAAAAXNSR0IArs4c6QAAAsVJREFUaAXtmUur2kAUx5NYUXtFiwtx0UU30iLcRWlx4aa4E8W29wv0G/QLlO5vP0BpN1210G0X9YlQC4ILKYLQhctaaF0IPrjx/Uj/I02ITXI1cSZCyUBwPJnM+eU/J5k5GZ6zsRSLxbs8z7/dbDYPXS5Xb7VaXWYymXc2InBcLpdLAkTsdDrr+XwuDQYDqVqtXhUKhRcEhLeDhkBAgc/xePwsFAopLmezGQeYWTgcDgiKlVHFCIK483q9nNvtXnS73TtMQa6DICCLxYIcHqj18wYxsCj7ICRJ4prN5hjB+zqdTs+ZKHIIRKPRmIxGo68+n+8lEYJ6sB4KMRwOqx6P52kymVxRB7EKQRXkGAhqIMdCUAGhAXE0CC2Io0BoQlgGoQ1hCYQFhGkQVhCmQFhCHAzCGoKA7J30TEB8Uc8dpHMz5dpJzyTEhTyBmQGQ2xqC2AlBYHRB7IbQBTkFhAbkVBA7IKeEUEAOhBj/Xd4d9XQQp3qFL5fL95ACfvs3+ZEbk9U2FrpMIYgvAY7exGIxnzoDsxtiCwI1HkQiEd03LPKOYb/f/443JpPhkG94CyIIQm8ymahtSj0ajd5CAnSO8xnFyKgirNfrV61WS4QyGheBQIBLJBI3AfsRAf1Y04C2AZ8LPtRqNRFQCBltQUYmoc2YOQxc8w6M3vA6yuipQmyOMo4yRgoY2Z2Y+e+UyefzT4xuiordTMw4MFBrp8hLCEeZHVnwx1Fm37LTiRmjmMGe3iMqLzejTuB474K81+uR7OA36UP3Q41R52btBKZUKr33+/0XyI/OkB9puqhUKiSNOdee0TS1bkCWKKVSqWeiKH6q1+tjvSQOe78ubDBeWfdi4kr1MGEzUQmXdru9hGI10hXToVGzEhh8ArnE7/NgMLiYTqfCcrn8gSOdzWZ/2QYiQ+EpuY36fQB1sbvZxPBtk+4/aTj+WpXZtpcAAAAASUVORK5CYII=),pointer"; } else { imgclick = true; this.style.cursor = 'zoom-out'; } }); //鼠标经出 divL.addEventListener('mouseout', function() { //this.style.cursor = 'default'; imgclick = true; }); /*图片中间 divC.style.position = "absolute"; divC.style.top = "0"; divC.style.height = "100%"; divC.style.cursor = "pointer"; divC.style.left = "20%"; divC.style.width = "60%"; divC.addEventListener('click', function() { newImgDiv.style.display = 'none'; }); divC.addEventListener('mouseover', function() { this.style.cursor = 'zoom-out'; }); divC.addEventListener('mouseout', function() { //this.style.cursor = 'default'; }); */ //图片右边 divR.style.position = "absolute"; divR.style.top = "0"; divR.style.height = "100%"; divR.style.cursor = "pointer"; divR.style.left = "80%"; divR.style.width = "20%"; divR.addEventListener('click', function() { let divR1 = divR.parentElement; let firstChild = divR1.parentElement; divR1 = divR1.lastChild; divL.style.display = ''; divR.style.display = ''; if(firstChild.id != imgPack.length - 1) { divR1.src = imgPack[parseInt(firstChild.id) + 1]; firstChild.id = parseInt(firstChild.id) + 1; if(parseInt(firstChild.id) == imgPack.length - 1) { this.style.display = 'none'; this.style.cursor = 'zoom-out'; } } else { imgclick = true; this.style.cursor = 'zoom-out'; newImgDiv.style.display = 'none'; } }); divR.addEventListener('mouseover', function() { let divR1 = divR.parentElement; let firstChild = divR1.parentElement; if(parseInt(firstChild.id) != imgPack.length - 1) { imgclick = false; this.style.cursor = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAA8CAYAAAADm2gpAAAAAXNSR0IArs4c6QAAAhNJREFUaAXtmb9OwlAUxttLiYkV0plB4sgLODC5QRTiYqIbcXDyHXwMEyMMbg7GBfmzEBISIDHdGYU3KLQQEwp4LvHE5oJJIfTS4XQ5vdDe+/V3Ttp+PaoCW7PZ1BzHuY1Go2fz+bwfiUSKmUzmi/8na1Or1eoBY8w0DOMkkUjo4/HY7ff737PZrJDL5d5lCVFAyINpms7Csw2Hw0W9Xh+Xy+UrWUIYpOEimUzq3gXj8biSTqcPIVUvssQwVVWt6XTq1bHcj8ViUsUwEPHY6/UcqIm9i1FqtdpTq9VyXNf1VMrf7mg0klMzsKQKxVkiMWJREBmRCI6JDJIQI5ERieA4dGTgDlwMzU2PxGCdeCOvGSLjJYL7RAZJiJHIiERwTGSQhBg3JHPOz1fFSXY15mLghfxZ1/UbMGs6GLmVqS3LUrrdrgWG7pit/LujH8C4LbLZ7B146dd2uz1c55vAbyvcyNm2fRqYEH49XIzf69L8HrjNcfx5BKm5htQc/ZcaoKFAaj63md/XOb8PRduHe1wWq69JNz1oAxHBffYgEZg2IkEkkABGqgkigQQwUk0QCSSAkWqCSCABjGGpCd4m8fOiG9w7ZqVSuWw0GvsVAWlhmqbdp1Kptb6De45OpzOBLlchn8+/YRqDiLynZ0ATcWVumSL44gwM0MdgMJh4lcgWwdcOTQN6+VlCaMl/gU8tyW7J/wCJLeOSU2dAQgAAAABJRU5ErkJggg==),pointer"; } else { imgclick = true; this.style.cursor = 'zoom-out'; } }); divR.addEventListener('mouseout', function() { //this.style.cursor = 'default'; imgclick = true; }); newImgDiv.className = 'bili-album__preview__picture__img b-img'; newImgDiv.style.display = 'none'; newImgDiv.style.marginBottom = '4px'; //点击介个大图时 newImgDiv.addEventListener('click', function() { if(imgclick == true){ newImgDiv.style.display = 'none'; } }); newImgDiv.addEventListener('mouseover', function() { this.style.cursor = 'zoom-out'; }); const newPicture = document.createElement('picture'); newPicture.className = 'b-img__inner'; const newImg = document.createElement('img'); newImg.src = 'none'; newImg.loading = 'lazy'; newImg.style.objectFit = 'cover'; newPicture.appendChild(divL); //newPicture.appendChild(divC); newPicture.appendChild(divR); newPicture.appendChild(newImg); newImgDiv.appendChild(newPicture); let parent = album.parentElement; parent.appendChild(newImgDiv); // 将新增的元素置于最顶层 if (style_div == "18-img"){ parent = parent.parentElement; parent = parent.parentElement; parent.prepend(newImgDiv); } else{ parent.prepend(newImgDiv); } // 新增代码块结束 function imgclickink() { imgclick = true; } //先判断 div 类型再枚举 img let images; if (style_div == "18-img"){ images = album.querySelectorAll('.bili-album__watch__track__item'); } else{ images = album.querySelectorAll('.b-img__inner'); } //console.log(images) if (images.length == 3) { createPreviewLayout(album, images, 3, style_div); } else if (images.length <= 4) { createPreviewLayout(album, images, 2, style_div); } else { createPreviewLayout(album, images, 3, style_div); } // 创建预览布局的函数 function createPreviewLayout(parent, images, gridType, style_div) { if(runtimes == 0 && window.debug_space == true) { console.log("==========================================================================="); } runtimes = runtimes + 1 if(window.debug_space == true){ console.log("No." + runtimes + " Style: " + style_div); } const previewWrapper = document.createElement('div'); previewWrapper.className = `bili-album__preview grid${gridType}`; //let imgPack = []; for (let i = 0; i < images.length; i++) { const pictureDiv = document.createElement('div'); pictureDiv.className = 'bili-album__preview__picture'; const imgDiv = document.createElement('div'); imgDiv.className = 'bili-album__preview__picture__img b-img'; imgDiv.appendChild(images[i]); let parent2 = images[i].lastChild; let imgraw; if (parent2.src.indexOf('@') !== -1) { imgraw = parent2.src.substring(0, parent2.src.indexOf('@')); } else { imgraw = parent2.src } imgPack.push(imgraw); if(window.debug_space == true){ console.log("第 " + i + " 张图片: " + imgPack[i]); } //图片点击放大事件 function zoomimg(here){ let parent = here.parentElement; parent = parent.parentElement; parent = parent.parentElement; parent = parent.parentElement; if (style_div == "bili-dyn-gallery") { parent = parent.parentElement; } var firstChild = parent.firstChild; firstChild.style.display = ''; firstChild.id = i; firstChild = firstChild.firstChild; //let divL = firstChild.firstChild; //let divR = firstChild.children[1]; firstChild = firstChild.lastChild; let zoomimg; if (parent2.src.indexOf('@') !== -1) { zoomimg = parent2.src.substring(0, parent2.src.indexOf('@')); } else { zoomimg = parent2.src } firstChild.src = zoomimg; //判断是否显示 divL & divR if(i == 0) { divL.style.display = 'none'; divR.style.display = ''; } else if(i == imgPack.length - 1) { divL.style.display = ''; divR.style.display = 'none'; } else { divL.style.display = ''; divR.style.display = ''; } imgclickink(); } // 添加点击事件监听器 if (style_div == "18-img"){ let fuckU = document.createElement('div'); fuckU.className = "b-img__inner"; images[i].parentElement.appendChild(fuckU); fuckU.appendChild(images[i].firstChild); fuckU.addEventListener('click',function(){zoomimg(this)}); images[i].remove(); } else{ images[i].addEventListener('click',function(){zoomimg(this)}); } pictureDiv.appendChild(imgDiv); previewWrapper.appendChild(pictureDiv); } parent.innerHTML = ''; // 清空原有内容 if (style_div == "18-img"){ let moveDOM = parent.parentElement; moveDOM = moveDOM.parentElement; moveDOM = moveDOM.parentElement; moveDOM = moveDOM.parentElement; moveDOM = moveDOM.firstChild; moveDOM.appendChild(previewWrapper); } else{ parent.appendChild(previewWrapper); } if(window.debug_space == true){ console.log("总计 " + imgPack.length + " 张图片"); } if(window.debug_space == true){ console.log("==========================================================================="); } //return imgPack; } } // 初始化检查 var runtimes = 0; //统计次数 let outputpageitemnum = 0; //也是统计次数 let outputpagenowtime = null; //该页面创建的时间 let hide_new_space_entry_status = false //隐藏 '体验新版' btn let output_page_div; //info 界面父节点 let topbarsize = 20; //默认顶栏尺寸 addoutputpage(); //modifyAlbums(); //去除 @ 后面的 function delat(text){ if(text.indexOf('@') != -1){ return text.substring(0,text.indexOf('@')); } else{ return text; } } //添加 Outut_page async function addoutputpage(){ output_page_div = document.createElement('div'); output_page_div.innerHTML = `<div class="output_page_background close" style=" position: fixed; top: 0; left: 0; animation-fill-mode: forwards; width: 100vw; height: 100vh; background-color: #00000044; display: flex; z-index: 99999; animation-fill-mode: forwards;"> <div class="output_page" style=" position: fixed; width: 80vw; height: 80vh; background-color: white; display: block; top: 10vh; left: 10vw; border-radius: 8px; box-shadow: 0 0 24px 0px #00000055;"> <style> .output_page_btn:hover { background-color: var(--brand_blue_hover); } .output_page_btn.hover { background-color: var(--brand_blue_hover); } .output_page_btn.ok:hover { background-color: var(--Gr4); } .output_page_btn.ok { background-color: var(--success_green); } .output_page_btn{ background-color: var(--brand_blue); user-select: none; } .output_page_btn_esc:hover { background-color: var(--stress_red_hover); } .output_page_btn_esc{ background-color: var(--stress_red); } .output_page_text:hover { border-color: #aaaaaaaa; } .output_page_text{ border-color: #aaaaaa33; } .output_page_background.close{ animation: output_page_close 0.5s; } .output_page_background{ animation: output_page_open 0.5s; } .output_page_title::-webkit-scrollbar{ display: none; } @keyframes output_page_close{ 0% {opacity: 1; display: block;} 100% {opacity: 0; display: none;} } @keyframes output_page_open{ 100% {opacity: 1; display: block;} 0% {opacity: 0; display: block;} } </style> <div style=" display: flex; flex-direction: column; height: 100%;"> <div style=" display: flex; flex-direction: row; align-items: center; flex-shrink: 0; margin: 2px 0px;"> <div style="flex: 1; margin: 0px; padding: 24px 12px 24px 24px; container-type: inline-size; overflow: hidden; box-shadow: inset 0px 0px 12px 0px #fff; border-radius: 8px;"> <span class="output_page_title" style=" /*overflow: scroll; text-overflow:ellipsis; white-space:nowrap;*/ line-height: 1; /*margin: 18px; padding: 6px;*/ display: flex; font-size: 1.45em; width: 100%; height: 20px; transition: font-size 0.5s; align-items: center;">Title</span> <span class="output_page_title_hidden" style=" overflow: scroll; line-height: 1; display: block; font-size: 1.45em; width: 100%; max-height: 20px; position: absolute; top: -100vh;">Title</span> </div> <div style=" user-select: none; margin-right: 24px;"> <div style=" position: relative; overflow: hidden; display: inline-flex;" title="拖拽以复制封面."> <button class="output_page_btn output_page_btn_cover" style=" font-size: 1em; color: white; padding: 6px 16px; border-style: none; border-radius: 4px; transition: background-color 0.5s; ">封面</button> <img class="output_page_btn_cover" src="none" style=" opacity: 0; position: absolute; width: 100%; height: 100%; inset: 0; pointer-events: stroke;"> </div> <button class="output_page_btn output_page_btn_copy" style=" margin-left: 12px; font-size: 1em; color: white; padding: 6px 16px; border-style: none; border-radius: 4px; transition: background-color 0.5s;">复制</button> <button class="output_page_btn output_page_btn_esc" style=" margin-left: 12px; font-size: 1em; color: white; padding: 6px 16px; border-style: none; border-radius: 4px; transition: background-color 0.5s;">关闭</button> </div> </div> <div style=" display: block; padding: 0 24px 24px 24px; width: 100%; height: 100%; flex-grow: 1; box-sizing: border-box;"> <textarea class="output_page_text" style=" height: 100%; width: 100%; display: block; background-color: #aaaaaa22; border-radius: 4px; border-style: double; font-size: 1em; font-family: monospace; padding: 4px; vertical-align: baseline; box-sizing: border-box; resize: none; line-height: 1.2em; transition: border-color 0.5s;" readonly></textarea> </div> </div> </div> </div>`; output_page_div.style.visibility = 'hidden'; document.body.appendChild(output_page_div); //那个封面 btn 还要单独做动画 let output_page_btn_cover = output_page_div.querySelector('button.output_page_btn_cover'); output_page_btn_cover.parentNode.addEventListener('mouseover', () => { output_page_btn_cover.classList.add('hover'); }); output_page_btn_cover.parentNode.addEventListener('mouseout', () => { output_page_btn_cover.classList.remove('hover'); }); //还是那个封面按钮 output_page_btn_cover.parentNode.addEventListener('click', () => { let link = output_page_btn_cover.getAttribute('href'); if(link != null){ window.open(link, "_blank"); } }); //复制到剪切板 let output_page_btn_copy = output_page_div.querySelector('button.output_page_btn_copy'); let output_page_text = output_page_div.querySelector('.output_page_text'); output_page_btn_copy.parentNode.addEventListener('click', () => { if(output_page_text.value != null){ let pos = [output_page_text.selectionStart,output_page_text.selectionEnd]; output_page_text.select(); document.execCommand('copy'); output_page_text.setSelectionRange(pos[0], pos[1]); //output_page_text.blur(); output_page_btn_copy.classList.add('ok'); output_page_btn_copy.innerText = '完成'; } }); //关闭事件 let output_page_btn_esc = output_page_div.querySelector('.output_page_btn_esc'); let output_page_background = output_page_div.querySelector('.output_page_background'); output_page_btn_esc.addEventListener('click', function(e){ closeoutputpage(e); } ); output_page_background.addEventListener('click', function(e){ closeoutputpage(e); } ); function closeoutputpage(e) { if(e.target == output_page_background || e.target == output_page_btn_esc){ output_page_background.classList.add('close'); output_page_btn_copy.classList.remove('ok'); output_page_btn_copy.innerText = '复制'; } } //await delay(2000); //output_page_div.style.visibility = 'visible'; } async function addoutputpageitem(){ //获取该页面创建时间 if(window.location.href.indexOf('file://') != -1 && outputpagenowtime == null){ let localinfo = document.querySelector('meta[id="localinfo"]'); if(localinfo != -1){ outputpagenowtime = new Date(localinfo.getAttribute('localdate')); console.log(outputpagenowtime); } else{ outputpagenowtime = new Date(); return; } } else if(outputpagenowtime == null){ outputpagenowtime = new Date(); } let items = document.querySelectorAll('.bili-dyn-list__item'); let num = outputpageitemnum; let length = items.length; //真怕哪天会抽风 for(let num1 = num; num1 < length; num1++){ //遍历循环每个动态 let item = items[num1]; let dyn_time = item.querySelector('.bili-dyn-time'); if(dyn_time.innerText.indexOf('视频') == -1){ continue; } let title = item.querySelector('.bili-dyn-card-video__title').innerText; //标题 let intro = item.querySelector('.bili-dyn-card-video__desc'); //简介 if(intro == null){ intro = '-'; } else{ intro = intro.innerText; } let cover = delat(item.querySelector('.b-img__inner').querySelector('img').src); //封面 let bvid = item.querySelector('a.bili-dyn-card-video').href.split('/'); //BV号 bvid = bvid[bvid.length - 2]; let aid = bv2av(bvid); let time = item.querySelector('.bili-dyn-time').innerText; //日期 let duration = gettime(item.querySelector('.duration-time').innerText); //时长 let playnum = item.querySelector('.bili-dyn-card-video__stat__item').innerText; //简写播放量 let playnumfull = numstr2int(item.querySelector('.bili-dyn-card-video__stat__item').innerText); //播放量 let danmaku = numstr2int(item.querySelector('.bili-dyn-card-video__stat__item.danmaku').innerText); //弹幕 let comment = numstr2int(item.querySelector('.bili-dyn-action.comment').innerText); //评论 let like = numstr2int(item.querySelector('.bili-dyn-action.like').innerText); //点赞 let share = numstr2int(item.querySelector('.bili-dyn-action.forward').innerText); //转发 let useruid = document.URL.split('/')[3]; //用户UID let username = document.querySelector('span[id="h-name"]').innerText; //用户ID let usericon = delat(document.querySelector('div.h-user').querySelector('img.bili-avatar-face').src); //用户头像 if(window.debug_space == true){ console.log('[' + bvid + '|AV' + aid + '] ' + title + '\n' + cover + '\n' + intro + '\n[' + gettime(time) + ']\t' + time + '\t 时长: ' + duration + '\n播放量: ' + playnumfull + '\t弹幕: ' + danmaku + '\t评论: ' + comment + '\t点赞: ' + like + '\t转发: ' + share); } let morebtn_dom = item.querySelector('div.tp.bili-dyn-more__btn'); //选单父控件 morebtn_dom.addEventListener('mousemove', () => { if(morebtn_dom.getAttribute('fixed') != 'true'){ morebtn_dom.setAttribute('fixed', 'true') let options_dom = item.querySelector('div.bili-cascader-options'); //选单 createinfobtn(options_dom, [title, intro, cover, bvid, aid, time.substring(0,time.indexOf(' ')), duration, playnum, playnumfull, danmaku, comment, like, share, useruid, username, usericon]); } }); } outputpageitemnum = length; } //获取时间戳的 function gettime(time){ let output; // HH:MM:SS 转 秒 if(time.indexOf(':') != -1){ let hhssmm = time.split(':'); switch (hhssmm.length){ case 2: output = (Number(hhssmm[0]) * 60) + Number(hhssmm[1]); break; case 3: output = (Number(hhssmm[0]) * 3600) + (Number(hhssmm[1]) * 60) + Number(hhssmm[2]); break; } return output; } // 日期转毫秒 let now = outputpagenowtime; if(time.indexOf("刚刚") != -1){ time = now.valueOf() } else if(time.indexOf("秒") != -1){ time = now.valueOf() - (time.substring(0,time.indexOf("秒")) * 1000); } else if(time.indexOf("分钟") != -1){ time = now.valueOf() - (time.substring(0,time.indexOf("分钟")) * 60 * 1000); } else if(time.indexOf("小时") != -1){ time = now.valueOf() - (time.substring(0,time.indexOf("小时")) * 60 * 60 * 1000); } else if(time.indexOf("天") != -1){ if(time.indexOf("昨天") != -1){ time = now.valueOf() - now.getHours() * 60 * 60 * 1000; } else if(time.indexOf("前天") != -1){ time = now.valueOf() - (now.getHours() * 60 * 60 * 1000) + 86400000; } else{ time = now.valueOf() - (now.getHours() * 60 * 60 * 1000) + time.substring(0,time.indexOf("天")) * 86400000; } } else{ time = time.replace(/\//g, "-"); time = time.replace(/年/g, "-"); time = time.replace(/月/g, "-"); //time = time.replace(/日/g, ""); if(time.indexOf("日") != -1){ time = time.substring(0,time.indexOf("日")) } if((time.split("-").length - 1) == 1){ time = now.getFullYear() + "-" +time; } let temptime = new Date(time); time = temptime.valueOf(); } return time; } // 万 > 整数 function numstr2int(text){ let num; if(text.indexOf('万') != -1){ text = text.substring(0,text.length - 1); num = parseFloat(text) * 10000 /*if(text.indexOf('.') != -1){ text = text.split('.'); num = (Number(text[0]) * 10000) + (Number(text[1]) * 1000); } else{ num = Number(text) * 10000 }*/ return num; } else if(text.indexOf('亿') != -1){ text = text.substring(0,text.length - 1); num = parseFloat(text) * 100000000 /*if(text.indexOf('.') != -1){ text = text.split('.'); num = (Number(text[0]) * 100000000) + (Number(text[1]) * 10000000); } else{ num = Number(text) * 100000000 }*/ return num; } else{ return text; } } //不喜欢 new-space-entry function hide_new_space_entry(){ if(hide_new_space_entry_status == true){ return; } let a = document.querySelector('.new-space-entry'); if(a != null){ a.remove(); hide_new_space_entry_status = true; } } //创建 info 选单 function createinfobtn(dom,data){ //data: 标题, 简介, 封面, BVID, AVID, 日期, 时长, 简写播放量, 播放量, 弹幕, 评论, 点赞, 转发, UID, 昵称, 头像 let item_div = document.createElement('div'); item_div.innerHTML = `<div class="bili-cascader-options__item"><div class="bili-cascader-options__item-custom"><div><div class="bili-cascader-options__item-label">信息</div></div></div></div>` //点击事件 item_div.addEventListener("click", () => { if(output_page_div == null){ output_page_div = document.querySelector('.output_page_background').parentNode; } let output_page = output_page_div.querySelector('.output_page_background'); let page_title = output_page.querySelector('.output_page_title'); page_title.innerText = data[0]; //标题 page_title.title = data[0]; output_page_div.querySelector('.output_page_title_hidden').innerText = data[0]; fixfontsize(output_page_div.querySelector('.output_page_title_hidden'), output_page_div.querySelector('.output_page_title'), topbarsize); let output_page_btn_cover_img = output_page_div.querySelector('img.output_page_btn_cover'); let output_page_btn_cover_btn = output_page_div.querySelector('button.output_page_btn_cover'); output_page_btn_cover_img.src = data[2]; //封面 output_page_btn_cover_btn.setAttribute('href', data[2]); let output_text = `{ "id": ${data[4]}, "type": 2, "title": "${data[0]}", "cover": "${data[2]}", "intro": "${data[1]}", "page": -1, "duration": ${data[6]}, "upper": { "mid": ${data[13]}, "name": "${data[14]}", "face": "${data[15]}" }, "attr": 0, "cnt_info": { "collect": -1, "play": ${data[8]}, "danmaku": ${data[9]}, "vt": 0, "play_switch": 0, "reply": ${data[10]}, "like": ${data[11]}, "share": ${data[12]}, "view_text_1": "${data[7]}" }, "link": "bilibili://video/${data[4]}", "ctime": ${gettime(data[5])}, "pubtime": ${gettime(data[5])}, "fav_time": -1, "bv_id": "${data[3]}", "bvid": "${data[3]}", "season": null, "ogv": null, "ugc": { "first_cid": -1 }, "media_list_link": "" },`; let output_page_text = output_page.querySelector('.output_page_text'); output_page_text.value = ''; //取消选择, 曲线救国 2333 output_page_text.setSelectionRange(0,0) output_page_text.value = output_text; output_page_div.style.visibility = 'visible'; output_page.classList.remove('close'); }); dom.appendChild(item_div); } //重复运行 (async function autorun() { await modifyAlbums(); await addoutputpageitem(); await hide_new_space_entry(); //隐藏 "体验新版" btn setTimeout(autorun, 1000); })(); //BV转AV function bv2av(bvid){ if(bvid == null || bvid.length < 10 || bvid.length == 11 || bvid.length > 12){ //console.log('无效的BVID'); return null; } else if(bvid.length == 12){ bvid = bvid.substring(2); } //let temp = new Array(10); //存储十个数 /*let temp = bvid[2]; bvid[2] = bvid[8]; bvid[8] = temp; temp = bvid[3]; bvid[3] = bvid[6]; bvid[6] = temp; temp = 0n;*/ let temp = 0n; let bv = [bvid[7],bvid[5],bvid[3],bvid[4],bvid[2],bvid[6],bvid[1],bvid[8],bvid[9]]; //console.log(bv); /*for(let t = 0 ; t < 10 ; t++){ //temp[t] = (bvdictionary[bvid[t]] * (58 ** bv58pow[t]) ); temp = temp + BigInt(BigInt(bvdictionary[bvid[t]]) * BigInt(58n ** BigInt(bv58pow[t])) ); //console.log(temp[t]); } //console.log(temp); temp = temp - 100618342136696320n;*/ /*temp = BigInt(bvdictionary[bvid[1]]) * 58n ** 2n + BigInt(bvdictionary[bvid[2]]) * 58n ** 4n + BigInt(bvdictionary[bvid[4]]) * 58n ** 5n + BigInt(bvdictionary[bvid[6]]) * 58n ** 3n + BigInt(bvdictionary[bvid[8]]) * 58n + BigInt(bvdictionary[bvid[9]]); temp = temp - 8728348608n;*/ for(let t of bv){ temp = temp * 58n + BigInt(57 - bvdictionary[t]); } //二进制转换 //console.log(temp); /*let temp2 = temp; temp = ''; while (temp2 != 0){ temp2 = temp2 / 2; if(String(temp2).indexOf('.') != -1){ temp = temp + '1'; temp2 = parseInt(temp2); } else{ temp = temp + '0'; } }*/ temp = temp.toString(2); //let xor = '1010100100111011001100100100'; //let xor = 177451812n.toString(2); //按位与运算 let xor = (2n ** 51n - 1n).toString(2); if(xor.length < temp.length){ //长度不够就补零 while(xor.length < temp.length){ xor = '0' + xor; } } else if(xor.length > temp.length){ //长度不够就补零 while(xor.length > temp.length){ temp = '0' + temp; } } //console.log(temp); //console.log(xor); let temp2 = ''; for(let tt = 0 ; tt < temp.length ; tt++){ switch ( Number(xor[tt]) + Number(temp[tt]) ){ case 2: temp2 = temp2 + 1; break; default: temp2 = temp2 + 0; break; } } //异或运算 temp = temp2; xor = 23442827791579n.toString(2); if(xor.length < temp.length){ //长度不够就补零 while(xor.length < temp.length){ xor = '0' + xor; } } //console.log(temp); //console.log(xor); temp2 = ''; for(let tt = 0 ; tt < temp.length ; tt++){ switch ( Number(xor[tt]) + Number(temp[tt]) ){ case 2: temp2 = temp2 + 0; break; case 1: temp2 = temp2 + 1; break; case 0: temp2 = temp2 + 0; break; } } //console.log(temp2); //console.log(parseInt(temp2,2)); return parseInt(temp2,2); } //字典 let bvdictionary = { '1':13,'2':12,'3':46,'4':31,'5':43,'6':18,'7':40,'8':28,'9':5,'A':54,'B':20,'C':15,'D':8,'E':39,'F':57,'G':45,'H':36,'J':38,'K':51, 'L':42,'M':49,'N':52,'P':53,'Q':7,'R':4,'S':9,'T':50,'U':10,'V':44,'W':34,'X':6,'Y':25,'Z':1,'a':26,'b':29,'c':56,'d':3,'e':24,'f':0, 'g':47,'h':27,'i':22,'j':41,'k':16,'m':11,'n':37,'o':2,'p':35,'q':21,'r':17,'s':33,'t':30,'u':48,'v':23,'w':55,'x':32,'y':14,'z':19 }; let bv58pow = [6,2,4,8,5,9,3,7,1,0]; /*let bvdictionary = { '1':'31', '2':'12', '3':'46', '4':'31', '5':'43', '6':'18', '7':'40', '8':'28', '9':'5', 'A':'54', 'B':'20', 'C':'15', 'D':'8', 'E':'39', 'F':'57', 'G':'45', 'H':'36', 'J':'38', 'K':'51', 'L':'42', 'M':'49', 'N':'52', 'P':'53', 'Q':'7', 'R':'4', 'S':'9', 'T':'50', 'U':'10', 'V':'44', 'W':'34', 'X':'6', 'Y':'25', 'Z':'1', 'a':'26', 'b':'29', 'c':'56', 'd':'3', 'e':'24', 'f':'0', 'g':'47', 'h':'27', 'i':'22', 'j':'41', 'k':'16', 'm':'11', 'n':'37', 'o':'2', 'p':'35', 'q':'21', 'r':'17', 's':'33', 't':'30', 'u':'48', 'v':'23', 'w':'55', 'x':'32', 'y':'14', 'z':'19' };*/ //AV转BV function av2bv(aid){ if(aid == null){ return null; } if(isNaN(aid) == true && aid.toLowerCase().indexOf('av') != -1){ aid = aid.substring(2); } if(isNaN(aid) == true){ return null; } let bvid = ['B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0']; //按位或运算 let temp = BigInt(aid).toString(2); let xor = (2n ** 51n).toString(2); if(xor.length < temp.length){ //长度不够就补零 while(xor.length < temp.length){ xor = '0' + xor; } } else if(xor.length > temp.length){ //长度不够就补零 while(xor.length > temp.length){ temp = '0' + temp; } } //console.log(temp); //console.log(xor); let temp2 = ''; for(let tt = 0 ; tt < temp.length ; tt++){ switch ( Number(xor[tt]) + Number(temp[tt]) ){ case 0: temp2 = temp2 + 0; break; default: temp2 = temp2 + 1; break; } } //异或运算 temp = temp2; xor = 23442827791579n.toString(2); if(xor.length < temp.length){ //长度不够就补零 while(xor.length < temp.length){ xor = '0' + xor; } } else if(xor.length > temp.length){ //长度不够就补零 while(xor.length > temp.length){ temp = '0' + temp; } } //console.log(temp); //console.log(xor); temp2 = ''; for(let tt = 0 ; tt < temp.length ; tt++){ switch ( Number(xor[tt]) + Number(temp[tt]) ){ case 2: temp2 = temp2 + 0; break; case 1: temp2 = temp2 + 1; break; case 0: temp2 = temp2 + 0; break; } } temp = BigInt('0b' + temp2); //console.log(temp2); //console.log(temp); temp2 = ''; //暂存 base58 字符 let temp3 = 0n; //以值求键 let keymap = Object.keys(bvdictionary) function readkey(value){ let key = null; for(let keys of keymap){ if(bvdictionary[keys] === value){ key = keys; break; } } return key; } while(temp > 0){ temp3 = temp - 58n * (temp / 58n); //求余数 temp = temp / 58n; temp2 = readkey(57 - parseInt(temp3)) + temp2; } //console.log(temp2); bvid[3] = temp2[6]; bvid[4] = temp2[4]; bvid[5] = temp2[2]; bvid[6] = temp2[3]; bvid[7] = temp2[1]; bvid[8] = temp2[5]; bvid[9] = temp2[0]; bvid[10] = temp2[7]; bvid[11] = temp2[8]; return bvid.join(''); } window.bv2av = bv2av; window.av2bv = av2bv; //URL 变化时, 重置计数 window.addEventListener('hashchange', () => { outputpageitemnum = 0; }); //监听键盘输入 document.addEventListener('keydown', (e) => { //Ctrl + S if(e.ctrlKey && e.keyCode === 83){ output_page_div.style.visibility = 'hidden'; output_page_div.querySelector('.output_page_background').classList.add('close'); output_page_div.querySelector('.output_page_btn_copy').classList.remove('ok'); output_page_div.querySelector('.output_page_btn_copy').innerText = '复制'; } else if(e.keyCode === 27){ //Esc //output_page_div.style.visibility = 'hidden'; output_page_div.querySelector('.output_page_background').classList.add('close'); output_page_div.querySelector('.output_page_btn_copy').classList.remove('ok'); output_page_div.querySelector('.output_page_btn_copy').innerText = '复制'; } else if(e.ctrlKey && e.shiftKey == false && e.keyCode === 67 && output_page_div.querySelector('.output_page_background').getAttribute('class').indexOf('close') == -1 && output_page_div.querySelector('.output_page_text') != document.activeElement){ //Ctrl + C let output_page_btn_copy = output_page_div.querySelector('button.output_page_btn_copy'); let output_page_text = output_page_div.querySelector('.output_page_text'); if(output_page_text.value != null){ let pos = [output_page_text.selectionStart,output_page_text.selectionEnd]; output_page_text.select(); document.execCommand('copy'); output_page_text.setSelectionRange(pos[0], pos[1]); //output_page_text.blur(); output_page_btn_copy.classList.add('ok'); output_page_btn_copy.innerText = '完成'; } } }, false); //自适应字体大小 let fixfontsizerunning = false; async function fixfontsize (hiddendom, dom, size = 20, num = 0.05){ //操纵对象; 目标对象; 目标值; 累加常量. if(fixfontsizerunning != false || dom == null || hiddendom == null){ return; } else{ fixfontsizerunning = true; if(output_page_div.querySelector('.output_page_background').getAttribute('class').indexOf('close') != -1){ //等待控件初始化 while(output_page_div.querySelector('.output_page_background').getAttribute('class').indexOf('close') != -1){ await delay(10); } } else if(hiddendom.scrollHeight == 0){ fixfontsizerunning = false; return; } } if(hiddendom.scrollHeight > size){ while(hiddendom.scrollHeight > size){ hiddendom.style.fontSize = Number(hiddendom.style.fontSize.substring(0,hiddendom.style.fontSize.indexOf('em'))) - num + 'em'; //hiddendom.offsetHeight; } if(hiddendom.scrollHeight < size){ //跳多了就缩回去 hiddendom.style.fontSize = Number(hiddendom.style.fontSize.substring(0,hiddendom.style.fontSize.indexOf('em'))) + num + 'em'; } } else if(hiddendom.scrollHeight < size){ while(hiddendom.scrollHeight < size){ hiddendom.style.fontSize = Number(hiddendom.style.fontSize.substring(0,hiddendom.style.fontSize.indexOf('em'))) + num + 'em'; //hiddendom.offsetHeight; } if(hiddendom.scrollHeight > size){ //跳多了就缩回去 hiddendom.style.fontSize = Number(hiddendom.style.fontSize.substring(0,hiddendom.style.fontSize.indexOf('em'))) - num + 'em'; } } //await delay(10); dom.style.fontSize = hiddendom.style.fontSize; fixfontsizerunning = false; } //监听窗体尺寸变化 let timer_resize; window.addEventListener('resize', () => { clearTimeout(timer_resize); timer_resize = setTimeout( () => { fixfontsize(output_page_div.querySelector('.output_page_title_hidden'), output_page_div.querySelector('.output_page_title'), topbarsize); } , 10); }, false); window.fixfontsize = fixfontsize; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址