Bili-Recommended-List-Blocker

屏蔽b站首页推荐中的指定up

目前为 2021-12-24 提交的版本。查看 最新版本

// ==UserScript==
// @name         Bili-Recommended-List-Blocker
// @description  屏蔽b站首页推荐中的指定up
// @icon         http://www.bilibili.com/favicon.ico
// @namespace    https://gf.qytechs.cn/zh-CN/users/xxxxx
// @version      1.0
// @author       kuzen
// @run-at       document-start
// @include      *://www.bilibili.com/
// @include      *://www.bilibili.com/?*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    var search = function(nums, target) {
        const n = nums.length;
        let left = 0, right = n - 1, ans = n;
        while (left <= right) {
            let mid = ((right - left) >> 1) + left;
            if (target <= nums[mid]) {
                ans = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    };

    var removeDuplicates = function(nums) {
        const n = nums.length;
        if (n === 0) {
            return 0;
        }
        let fast = 1, slow = 1;
        while (fast < n) {
            if (nums[fast] !== nums[fast - 1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    };

    var addBlockUid = function(blockList, uid) {
        var index = search(blockList, uid);
        if (blockList[index] !== uid) {
            blockList.splice(index, 0, uid);
        }
        GM_setValue('blockList', JSON.stringify(blockList));
    }


    var blockDivCss = '.bili-block-uid .bili-block-uid__icon{pointer-events:none;user-select:none;width:22px;height:22px;color:#fff}.bili-block-uid__icon{pointer-events:none;user-select:none;width:22px;height:22px;color:#fff;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC4wMSIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjQgNDRDMzUuMDQ1NyA0NCA0NCAzNS4wNDU3IDQ0IDI0QzQ0IDEyLjk1NDMgMzUuMDQ1NyA0IDI0IDRDMTIuOTU0MyA0IDQgMTIuOTU0MyA0IDI0QzQgMzUuMDQ1NyAxMi45NTQzIDQ0IDI0IDQ0WiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZjNmM2YzIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxwYXRoIGQ9Ik0xNSAxNUwzMyAzMyIgc3Ryb2tlPSIjZjNmM2YzIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==)}.bili-block-uid{display:-webkit-flex;display:flex;align-items:center;justify-content:center;position:absolute;top:72px;right:8px;width:28px;height:28px;border-radius:6px;cursor:pointer;background-color:rgba(33,33,33,.8);z-index:9;transform:translateZ(0)}.bili-block-uid .bili-block-uid__tip{pointer-events:none;user-select:none;position:absolute;bottom:-6px;right:-10px;transform:translateY(100%);font-size:12px;color:#fff;border-radius:4px;line-height:18px;padding:4px 8px;background-color:rgba(0,0,0,.8);white-space:nowrap}';
    var style_tag = document.createElement('style');
    style_tag.innerHTML = blockDivCss;
    document.head.appendChild(style_tag);

    var blockList = JSON.parse(GM_getValue('blockList') || '[]');
    blockList.sort();
    removeDuplicates(blockList);

    console.log(GM_getValue('blockList'))

    // identical array to arr
    var blockContext = document.createElement("div");
    blockContext.setAttribute("class", "bili-video-card")
    blockContext.innerHTML = '<a target="_blank" data-spmid="333.851" data-mod="b_7265636f6d6d656e64" data-idx="1""><div class="bili-video-card__image __scale-player-wrap"><div class="bili-video-card__image--wrap"><div class="bili-watch-later" style="display: none;"><svg class="bili-watch-later__icon"><use xlink:href="#widget-watch-later"></use></svg><span class="bili-watch-later__tip" style="display: none;"></span></div><picture class="v-img bili-video-card__cover"><source srcset="//s6.jpg.cm/2021/12/23/LbJgzO.jpg" type="image/jpg"><img src="//s6.jpg.cm/2021/12/23/LbJgzO.jpg" alt="黑名单内容" loading="eager" onload="fsrCb()"></picture></div></div></a><div class="bili-video-card__info __scale-disable"><a target="_blank" data-spmid="333.851" data-mod="b_7265636f6d6d656e64" data-idx="1""><div class="v-avatar bili-video-card__avatar"><picture class="v-img v-avatar__face"><source srcset="//s6.jpg.cm/2021/12/23/LbJ0Iw.jpg" type="image/jpg"><img src="//s6.jpg.cm/2021/12/23/LbJ0Iw.jpg" alt="黑名单" loading="lazy" onload=""></picture></div></a><div class="bili-video-card__info--right"><a target="_blank" data-spmid="333.851" data-mod="b_7265636f6d6d656e64" data-idx="1""><h3 class="bili-video-card__info--tit" title="黑名单内容">黑名单内容</h3></a><p class="bili-video-card__info--bottom"><a class="bili-video-card__info--owner" data-spmid="333.851" data-mod="b_7265636f6d6d656e64" data-idx="1""><span class="bili-video-card__info--author">已屏蔽</span></a></p></div></div>';
    // item.replaceChildren(block_dom);

    var blockDiv = document.createElement("div");
    blockDiv.setAttribute("class", "bili-block-uid");
    // blockDiv.setAttribute("style", "display: none;");
    blockDiv.innerHTML = '<svg class="bili-block-uid__icon"></svg><span class="bili-block-uid__tip" style="display: none;">屏蔽用户</span>'
    blockDiv.innerHTML = '<svg class="bili-block-uid__icon""></svg>'
    var clickBtn = function(event) {
        console.log(event.currentTarget.parentElement);
        var cardInfo = event.currentTarget.parentElement.getElementsByClassName("bili-video-card__info")[0];
        var uidStr = cardInfo.firstElementChild["href"]
        var uid = uidStr.substr(uidStr.lastIndexOf("/") + 1);
        console.log(uid + " 已屏蔽");
        addBlockUid(blockList, uid);
        event.currentTarget.parentElement.lastElementChild.replaceChildren(blockContext.cloneNode(true));
        return false;
    };

    // bili-video-card__wrap

    setTimeout(function () {
        var list = document.getElementsByClassName('recommend-container__2-line')[0].getElementsByClassName('bili-video-card__wrap');
        for (let item of list) {
            // item.replaceChildren(blockDom);
            // 判断是否屏蔽
            // var cardView = item.getElementsByClassName("bili-video-card__image--wrap")[0];
            var uidStr = item.lastElementChild.firstElementChild["href"]
            var uid = uidStr.substr(uidStr.lastIndexOf("/") + 1);
            // console.log(uid);
            var index = search(blockList, uid);
            if (blockList[index] == uid) {
                item.replaceChildren(blockContext.cloneNode(true));
            }
            // break;

            // 添加屏蔽按钮
            var bd = blockDiv.cloneNode(true);
            bd.addEventListener("click", clickBtn);
            item.parentElement.insertBefore(bd, item.parentElement.childNodes[1]);
        }
    }, 1000);
})();

QingJ © 2025

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