阻止b站搜索功能推荐视频(使用 Header Editor 修改请求头)

Copyright: 署名-非商业性使用-相同方式共享 4.0 国际 | CC BY-NC-SA 4.0 International

从某天开始,Bilibili 网页端的搜索功能开始在返回的结果中推送视频。这往往导致准确度下降,尤其是当我想搜索没有接触过的关键词的时候。这个功能目前还找不到关闭的方法,只好自己手动修改。

搜索功能是通过 Cookie 中包含的用户信息来推荐的。要阻止推荐行为,一个办法是直接修改发送的 Cookie。直接删除 Cookie 是行不通的,服务器会直接返回 412错误。因此较好的办法是根据没有登录时的 Cookie 来过滤掉会导致推荐行为的 Cookie。

这里要借助的浏览器插件是 Header Editor。这个插件能让用户以很高的自由度修改浏览器发送和接受的内容,包括请求头(Cookie 就在请求头内),响应头和响应体。

使用十个随机生成的中文词语,无推荐(左侧)和有推荐(右侧)的搜索结果对比

手动添加规则

安装 Header Editor 后,新建一条规则。选择“修改请求头”(Modify request header),“匹配类型”(Match Type)中选择“正则表达式”(Regular expression),“匹配规则”输入以下表达式(这个表达式同时包含了新版和旧版的搜索 URL)

1
^(?:https\:\/\/api\.bilibili\.com\/x\/web\-interface\/search|https\:\/\/api\.bilibili\.com\/x\/web\-interface\/wbi\/search)

然后选择“自定义函数”(Custom function),并输入以下的代码来过滤对请求头中的 Cookie。这些 Cookie 内容在没有登录的时候也会出现,可以保留:

1
2
3
4
5
6
7
8
9
for (const i in val) {
if (val[i].name.toLowerCase() === 'cookie') {
let oldCookie = val[i].value;
val[i].value = oldCookie
.split(/;\s*/)
.filter(val => val.match(/^(?:buvid3|buvid4|CURRENT_FNVAL|b_nut|sid|bili_ticket|bili_ticket_expires)/))
.join('; ');
}
}
设置内容

设置完成后点击“保存"(SAVE)

导入规则

将以下的代码保存到文件,并在“导入和导出”(EXPORT AND IMPORT)中导入,保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"request": [],
"sendHeader": [
{
"enable": false,
"name": "No recommendation in search",
"ruleType": "modifySendHeader",
"matchType": "regexp",
"pattern": "^(?:https\\:\\/\\/api\\.bilibili\\.com\\/x\\/web\\-interface\\/search|https\\:\\/\\/api\\.bilibili\\.com\\/x\\/web\\-interface\\/wbi\\/search)",
"exclude": "",
"group": "Bilibili",
"isFunction": true,
"action": {
"name": "cookie",
"value": " val.split(/;\\s*/).filter(val => val.match(/^(?:buvid3|buvid4|CURRENT_FNVAL|b_nut|sid|bili_ticket|bili_ticket_expires)/) != undefined).join('; ')"
},
"code": "for (const i in val) {\n if (val[i].name.toLowerCase() === 'cookie') {\n let oldCookie = val[i].value;\n val[i].value = oldCookie\n .split(/;\\s*/)\n .filter(val => val.match(/^(?:buvid3|buvid4|CURRENT_FNVAL|b_nut|sid|bili_ticket|bili_ticket_expires)/))\n .join('; ');\n }\n}"
}
],
"receiveHeader": [],
"receiveBody": []
}

也可以用这个链接导入:https://pastebin.com/raw/qaqVAEi2