一直以来喜欢没事挂在B站首页,然后看看有没有些有趣的人直播好玩的东西什么的。然而,B站首推的主播大多都是舞见唱见,视频陪聊什么的,流量至上没有错,但是让我目标信息获取率极低就很烦。
因此找了找根据分区删除元素的方式:
www.bilibili.com##.live-card:has-text(舞见)
工具
Chrome系浏览器,可以用Chrome插件
浏览器安装一个广告拦截插件,如Ads Killer Plus
添加屏蔽规则
通常广告拦截插件都支持自定义规则,而显然舞见直播什么的不会被内置定义为广告,虽然实际上差不多。 因此我们要自己写选择舞见的过滤器。 以Ads Killer Plus为例:
首页直播块结构如下:.live-card > a > .up > .txt > . tag
tag值即是主播分区名,如视频唱见、舞见...
我们想要通过 tag=舞见 去删除.live-card元素,正常的类选择器好像只能根据父元素选择子元素,而不能反过来。
这时候就需要用到插件的扩展语法功能,例如这款插件有如下两个选择语法:
subject:has(arg)
如果subject自身及其子元素有arg元素,则选定subject元素
使用方法即正常选择器选出一个subject对象,然后后面加上:has(arg)
,arg
也是一个选择器对象。
- Description: Select element subject if and only if evaluating arg in the context of subject returns one or more elements.
- Chainable: Yes.
- subject: Can be a plain CSS selector, or a procedural cosmetic filter.
- arg: A valid plain CSS selector or procedural cosmetic filter, which is evaluated in the context of the subject element.
subject:has-text(needle)
如果subject自身及其子元素有needle文本值,则选定subject元素。 needle可用正则表达式。
- Description: Select element subject if the text needle is found inside the element subject or its children.
- Chainable: Yes.
- subject: Can be a plain CSS selector, or a procedural cosmetic filter.
- needle: The literal text which must be found, or a literal regular expression. If using a literal regular expression, you can optionally use the i and/or m flags (version 1.15).
注意冒号后面不能有空格
我们只需判断分区文本值,因此用has-text即可,最终在自定义规则列表中添加如下规则应用:
www.bilibili.com##.live-card:has-text(/电台|陪伴学习|萌宠|唱见|舞见|视频|虚拟主播/)
后话
上述规则会选定整个live-card板块,因此删除后B站直播块可能会有点排版不整齐,如果仅删除live-card下的a元素,则删除后会在原位置保留一块空白,保持元素排版整齐。
另外这种方式应该适用于所有通过子类屏蔽父类的想法。