Bilibili - 在未登录的情况下照常加载评论

在未登录的情况下照常加载评论 | V3.3 修复动态页面偶尔无法正常获取评论数据的问题

< Обсуждения Bilibili - 在未登录的情况下照常加载评论

Отзыв: Хороший — скрипт работает как нужно

报告一个小bug,在启用 子评论改为默认一次性全部加载 之后,评论最后会不断出现 undefinedundefined,把页面宽度变得很长。

另外能否增加记住一些弹幕和播放设定的功能?比如屏蔽等级,透明度和是否启用连续播放之类的。

另外非常感谢作者,终于有免登录脚本了!各种登录实在是太恼人了。

DD1969Автор
§
Создано: 09.12.2023

已修复,感谢反馈

感谢修复
这个免登录系列的脚本主要是隐私窗口用,请问作者是否有计划写一个记住设定的脚本?这样就不用每次都手动点击了

DD1969Автор
§
Создано: 12.12.2023

记忆播放设定的功能在 Bilibili - 在未登录的情况下自动并无限试用最高画质 的最新V0.7版中更新了,但测试不是很充分,你可以先试试看

感谢增加功能
测试了下,弹幕音量和自动连播开关都可以,不过设置,更多,视频策略好像没有记录?平时选择的是avc,好像说更好一些

AVC? HEVC? AV1? B站三种视频编码简单比较 - 哔哩哔哩
https://www.bilibili.com/read/cv28110422/

DD1969Автор
§
Создано: 13.12.2023

更新至V0.9,已支持记忆视频编码设置。
不过在edge中测试发现虽然能正常记忆视频编码设置,但是会在打开视频页面后不久被B站自动设置回'默认'。chrome和firefox则没有这个问题。

感谢作者更新,用的是chrome,可以正常运行

另外请问能否告知如何选择这些会自动隐藏的元素,以及改变这些选项?不会编程但是对js有点兴趣,想尝试自己实现一些功能,比如记住弹幕颜色和位置,但是在gpt的帮助下试了下发现还是无从下手

DD1969Автор
§
Создано: 15.12.2023

鼠标移上去就出现,鼠标移开就消失这种效果一般来说,简单的就用CSS中的hover来实现,复杂的就用JavaScript给元素添加mouseentermouseleave事件监听器来实现。

就B站视频播放器的小齿轮的情况来说,属于是后者,可以按照以下步骤将其定住:

  1. F12打开控制台
  2. 点击一下控制台左上角的元素选择器
  3. 点击一下小齿轮,找到它在HTML文档中对应的元素,注意要找到的是如图的外层元素
  4. 点击一下右侧的Event Listeners一栏,查看它被安装的事件监听器列表
  5. 找到mouseleave一项,展开,里面的都是在鼠标离开这个元素时会触发的事件监听器
  6. 把这些事件监听器的Remove按钮都按一下,按一个少一个,将其全部移除
  7. 此时再把鼠标移到小齿轮上然后移开,“设置”气泡就不会再自动隐藏了

如果是用hover来实现显示/隐藏效果的,可以让元素处于强制hover的状态:右键一下元素 > Force state > :hover

不过并不适用于B站这里的情况


自动开播这种设置,可以发现它会在所有的视频页面中都通用,可以推断出用户的设置被记录下来了,要么是播放设置会上传到B站服务器,然后每次打开视频时获取并应用,要么是存在了本地。显然这种不重要的数据存储在本地更加合理,还能减少服务器的负担。那么根据经验就可以去Local Storage中去找了。

  1. F12打开控制台
  2. 点击Application选项卡
  3. 在左侧的Local storage中选择https://www.bilibili.com
  4. 在右侧找到并点击bpx_player_profile
  5. 在下方的条目详情中找到media并展开
  6. 可以看到autoplay的值为false,意思就是目前自动开播是关闭的状态
  7. 如果此时把自动开播打开,再找到autoplay就可以看到它的值变成了true
  8. 反之,如果能修改autoplay的值,那么自动开播就能自由控制。复制下面的4行代码,并在控制台的Console选项卡中粘贴并回车,然后刷新页面,就可以看到自动开播回到了关闭的状态:
// 从localStorage中获取'bpx_player_profile'的值的字符串
const objectString = window.localStorage.getItem('bpx_player_profile');

// 将字符串解析为对象
const object = JSON.parse(objectString);

// 修改对象中的media的autoplay的值为false,即关闭自动开播
object.media.autoplay = false;

// 重新将对象字符串化,设置为localStorage中'bpx_player_profile'的值,完成修改
window.localStorage.setItem('bpx_player_profile', JSON.stringify(object));

感谢作者的教学,尝试了下,能够做到。又增加了新知识,真不错

Ответить

Войдите, чтобы ответить.