Bilibili 按标签、标题、时长、UP主屏蔽视频

对Bilibili的视频卡片,以标签、标题、UP主、时长、竖屏、充电、评论等信息来屏蔽视频,附带去除视频卡片中的直播、广告、推广内容的功能。

< Feedback on Bilibili 按标签、标题、时长、UP主屏蔽视频

Review: Good - script works

§
Posted: 2024-04-18
Edited: 2024-04-18

使用BewlyBewly网页插件美化bilibili,并同时使用该插件时,首页会因为获取视频列表失败而导致屏蔽失效,对部分代码进行修改可以修复: 将function getVideoElements()函数修改成如下内容:

// 获取视频元素
function getVideoElements() {
    // 获取所有有可能是视频元素的标签
    //let videoElements = document.querySelectorAll(
        // div.bili-video-card 首页(https://www.bilibili.com/)、分区首页(https://www.bilibili.com/v/*)、搜索页面(https://search.bilibili.com/*)
        // div.video-page-card-small 播放页右侧推荐(https://www.bilibili.com/video/BV****)
        // li.bili-rank-list-video__item 分区首页-子分区右侧热门(https://www.bilibili.com/v/*)
        // div.video-card 综合热门(https://www.bilibili.com/v/popular/all) 、每周必看(https://www.bilibili.com/v/popular/weekly) 、入站必刷(https://www.bilibili.com/v/popular/history)
        // div.video-card-reco 旧版首页推送(https://www.bilibili.com/)
        // div.video-card-common 旧版首页分区(https://www.bilibili.com/)
        // div.rank-wrap 旧版首页分区右侧排行(https://www.bilibili.com/)
        //"div.bili-video-card, div.video-page-card-small, li.bili-rank-list-video__item, div.video-card, div.video-card-reco, div.video-card-common, div.rank-wrap, div.video-card.group"
    //);

    let videoElements;
    if (window.location.href === "https://www.bilibili.com/"){
        //获取shadowDOM父标签
        let container = document.getElementById("bewly");
        let shadowRoot = container.shadowRoot;
        //获取视频列表
        videoElements = shadowRoot.querySelectorAll("div.bili-video-card, div.video-page-card-small, li.bili-rank-list-video__item, div.video-card, div.video-card-reco, div.video-card-common, div.rank-wrap, div.video-card.group");
        //为刷新视频列表按钮添加事件监听器再次调用屏蔽器,否则刷新的视频列表无法屏蔽,调用屏蔽器时延时调用,不然获取不到视频列表
        shadowRoot.querySelector("button.b-button.b-button--type-default.b-button--size-small").addEventListener("click", ()=>{
            setTimeout(FuckYouBilibiliRecommendationSystem, 1000);
        }, { once: true });
    }
    else{
        //如果不是首页,没有获取视频列表问题,使用原来的获取方式即可
        videoElements = document.querySelectorAll(
            "div.bili-video-card, div.video-page-card-small, li.bili-rank-list-video__item, div.video-card, div.video-card-reco, div.video-card-common, div.rank-wrap, div.video-card.group"
        );
    }


    //let videoElements = document.getElementsByClassName("video-card");

    // 过滤掉没有包含a标签的元素
    videoElements = Array.from(videoElements).filter((element) => element.querySelector("a"));

    // 返回处理后的结果
    return videoElements;
}

将1186行左右页面加载结束运行脚本的部分进行延时,否则太早获取视频列表无法成功(可以尝试把延时时间缩短,单位是ms)如下:

// 页面加载完成后运行脚本
window.addEventListener("load", ()=>{
    setTimeout(FuckYouBilibiliRecommendationSystem, 1000);
});

Post reply

Sign in to post a reply.