the1812 / Bilibili-Evolved

强大的哔哩哔哩增强脚本
Other
23.02k stars 1.59k forks source link

传统播放模式不兼容播放列表 #4699

Closed IEXPECTATION closed 5 months ago

IEXPECTATION commented 6 months ago

对应功能

对应功能为传统播放模式。

问题描述

在播放合集页面时,脚本报出未找到 rightPanelContainer。实际上网页上使用了 .playlist-container--right 作为播放列表类名。

image

脚本版本

Commit: 29059634f

脚本管理器及版本

暴力猴 2.18.0

浏览器及版本

版本 123.0.2420.53 (正式版本) (64 位)

播放器版本

4.8.12

播放策略

默认

错误信息

如图。

附加截图

image

致遇到了相同问题准备回复的人

太长不看: 1、遇到了相同的问题:请用左下角的 reaction 点赞 2、实时关注该 Issue 的后续进展:请用 Issue 页上的 Subscribe 功能(在 PC 端按钮通常位于页面右侧)。 请您回复前务必确认您有在本 Issue 之外补充了其它相关信息(比如 Log)再行回复以免对他人造成不必要的困扰

完整版 由于每个 Issue 甚至整个项目都是可以订阅通知的, 对于已经有人汇报过的 Bug, 如果您也遇到了并且没有其他信息要补充, 可以直接在左下点个赞表示 +1, 不要再去新增评论。想关注后续的可以用 Subscribe,Subscribe 之后该 Issue 如果有变动都可以收到通知,如果不想被回复打扰可以使用更加进阶的 Customize 功能,勾选 "Closed" & "Reopened"。Closed 通常代表该 Issue 已被解决,极少数情况下的 Reopened 代表该 Issue 的问题重新出现。如果您新增了无意义评论,因为 Issue 这个 bug tracker 与邮件列表类似,订阅某个 Issue 的用户会在每次这个 Issue 有新的动态时收到一封新的提醒邮件。也就是说,在 Issue 中的一个不能提供新的信息的评论,相当于给所有订阅这个 Issue 的用户发了一封垃圾邮件(spam)。尤其项目的维护者也是订阅者中的一员,太多垃圾邮件会对维护者带来很多不必要的困扰。发送垃圾邮件在开源社区通常是不那么受欢迎的行为。
IEXPECTATION commented 6 months ago

而且,这类网页上神奇的没有 next-button。当我在其他网页上播放时取消了自动连播。回到这个网页不小心刷新后,网页就不会自动连播了。🥲

the1812 commented 6 months ago

这个合集给个链接看看?

IEXPECTATION commented 6 months ago

链接:https://www.bilibili.com/video/BV1VU421Z7UX/?p=5&share_source=copy_web&vd_source=f7ecd673930d9b1e707ce9e2d25cd654&t=0 (这个可以打开) 属实是被 B 站的自动联播恶心到了。大佬写的脚本真棒,太感谢了。

AquaMT commented 6 months ago

https://www.bilibili.com/list/498208177?sid=3049052&desc=1&oid=781142976&bvid=BV1B24y1u7tD 这个页面我试了点蓝链会显示视频找不到,地址栏重新回车一下就可以正常访问. 以防万一,附上此链接 https://space.bilibili.com/498208177/channel/seriesdetail?sid=3049052 ,点击右侧播放全部后就可以进入到上面的页面 这种页面似乎是叫视频列表而不是合集,目前我找到的有三种方法可以进入这种页面 1.把多个视频添加到同一收藏夹后,在收藏夹点击"播放全部视频" 2.在up主投稿页面点击播放全部 3.在up主空间-合集和列表页面点进去一个列表,并点击播放全部。如果列表名称为"合集·****",则进入合集页面,没有“合集·”前缀的则进入播放列表界面(例如https://space.bilibili.com/14110780/channel/series 两种都有) 这种页面即使关掉bilibili evolved加载b站原生页面也没有连播的开关,但是页面确实受连播模式控制(在其他页面关掉连播后,此页面就只播放第一分p;其他页面打开连播,此页面就可以正常连播) QQ截图20240328135854

IEXPECTATION commented 6 months ago

@the1812 佬,我这边尝试改了一下下。下面是效果,你要是不嫌弃的话。可以看一下行不行?

https://github.com/the1812/Bilibili-Evolved/assets/40608137/39acdeda-812c-434e-aa21-cf3db1abf482

IEXPECTATION commented 6 months ago

上面的操作可能引起误会,我上传另一个。 https://github.com/the1812/Bilibili-Evolved/assets/40608137/2a2ad7e5-9a05-491f-982f-84675c6a3712

the1812 commented 5 months ago

链接:https://www.bilibili.com/video/BV1VU421Z7UX/?p=5&share_source=copy_web&vd_source=f7ecd673930d9b1e707ce9e2d25cd654&t=0 (这个可以打开) 属实是被 B 站的自动联播恶心到了。大佬写的脚本真棒,太感谢了。

为啥我打开显示的是传统分 P 的样子, 不是你图里的那个 "纯音乐" 播放列表 (传统分 P 按照策略是启用连播的)

Snipaste_2024-04-08_22-45-37

Geeyun-JY3 commented 5 months ago

为啥我打开显示的是传统分 P 的样子, 不是你图里的那个 "纯音乐" 播放列表 (传统分 P 按照策略是启用连播的)

因为 issue 主给错 URL 了。 看那两个录屏,URL 应该是播放该 UP 主的这个纯音乐视频列表才对:https://www.bilibili.com/medialist/play/71573495?from=space&business=space_series&business_id=529503&desc=1 (上述〔旧版〕播单 URL 打开后会跳转至 https://www.bilibili.com/list/71573495?sid=529503&desc=1,但旧版和这种新版播单 URL 都有莫名其妙的直接点开会显示视频不见了的行为,在我印象中在本项目相关讨论区这都已经不是第一次提及)

@AquaMT 说得应该大致没错,不过这种页面也是能找到 b 站原生的连播开关的(播放收藏夹全部视频的页面一直以来都没有一个显示在列表右上角的自动连播开关),就在播放器控制栏的齿轮里: image 之前也有人做过更为完整的总结:https://github.com/the1812/Bilibili-Evolved/issues/3916#issuecomment-1386937358

吐槽碎碎念:近几年破站对这功能改动不少,也改过名,URL 都变过,个人空间的 tab 名从频道改成现在的合集和列表(#2096、#2236);破站对这功能的相关(曾)用词就有频道、播单、(视频)合集、视频列表、视频专辑,加上分 P 功能的用词如「视频选集」,和视频网站常用词如「播放列表」(印象中破站好像也用过这词),真是乱得不得了。

the1812 commented 5 months ago

看那两个录屏,URL 应该是播放该 UP 主的这个纯音乐视频列表才对:https://www.bilibili.com/medialist/play/71573495?from=space&business=space_series&business_id=529503&desc=1

明白了, 这个不属于传统连播模式的作用范围 (没有那个外露的开关).

但旧版和这种新版播单 URL 都有莫名其妙的直接点开会显示视频不见了的行为

因为直接点过去带有 GitHub 的 Referer 头, b 站是禁止部分第三方 Referer 的, 重新地址栏回车可以清空 Referer 就可以进去.

IEXPECTATION commented 5 months ago

很抱歉,我给了错误的 URL。不过,我上次研究了一下他那个播放列表的网页。他是通过 vue 里的一个 SetContinuousPlay 直接设置的。也把状态保存在 LocalStorage 里的 recommend_auto_play 里。其实只要看它是不是最后一个视频,然后调用 SetContinuousPlay 就可以。需要我这边提个 PR,让你们 review 一下吗?

Geeyun-JY3 commented 5 months ago

很抱歉,我给了错误的 URL。不过,我上次研究了一下他那个播放列表的网页。他是通过 vue 里的一个 SetContinuousPlay 直接设置的。也把状态保存在 LocalStorage 里的 recommend_auto_play 里。其实只要看它是不是最后一个视频,然后调用 SetContinuousPlay 就可以。需要我这边提个 PR,让你们 review 一下吗?

你的需求是无论任何情况都让这种视频列表页面自动连播吗?你平时是有可能关掉破站自带的那个自动连播吗? 作者说得很清楚了,此类页面不是传统连播模式的作用范围,因为当年破站改连播逻辑其实并没有影响到此类页面。

IEXPECTATION commented 5 months ago

很抱歉,我给了错误的 URL。不过,我上次研究了一下他那个播放列表的网页。他是通过 vue 里的一个 SetContinuousPlay 直接设置的。也把状态保存在 LocalStorage 里的 recommend_auto_play 里。其实只要看它是不是最后一个视频,然后调用 SetContinuousPlay 就可以。需要我这边提个 PR,让你们 review 一下吗?

你的需求是无论任何情况都让这种视频列表页面自动连播吗?你平时是有可能关掉破站自带的那个自动连播吗? 作者说得很清楚了,此类页面不是传统连播模式的作用范围,因为当年破站改连播逻辑其实并没有影响到此类页面。

我现在的状态其实是,这个网页的连播受其他网页连播影响的。我在其他网页里看到最后一个视频的时候,插件会停止自动联播。但回到这个播放列表的网页时,如果不小心刷新网页。这个网页的播放设置就会被更改,也变成播完停止。这个应该算是插件的一个小小的副作用。我觉得可以把插件做的更好。

the1812 commented 5 months ago

可以的, 判断一下改 localStorage 就行了

IEXPECTATION commented 5 months ago

@the1812 大佬,我晚点把代码整理好。提个 PR 让你们 review 一下。我主要加了一些判断播放列表的网页的代码,基本上没有改动旧的代码。目前我看到的网页代码,只会在初始化的时候读一下 localStorage。并不会在切视频的时候读取。所以,我直接使用他们 vue 实例里的 setContinuousPlay 直接设置是否连播。