关于B站(bilibili)对未登录用户视频观看进行暂停和弹窗的分析与简单解决方案

这篇具有很好参考价值的文章主要介绍了关于B站(bilibili)对未登录用户视频观看进行暂停和弹窗的分析与简单解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

情况介绍

于近日的某次更新后,B站(bilibili)网页端出现了一个新功能:当用户没有登录时,将对每个视频间隔性地(目前的情况是视频开始播放后的1分钟)进行自动暂停并弹出登录窗口。不得不说,这个功能使得使用体验极差,每个视频都要经历暂停和弹窗实在是让人不爽。有些时候,仅仅只是在B站上看几个视频,或是挂着听听歌,再者也可能试着避开大数据推送和账号的绑定。总之,登录也许不是时时刻刻必须的,而通过恶心用户、严重降低用户体验来迫使用户进行某些操作从而为在线或推广等做出贡献,也许并不是一个好主意。通过一些简单的探索和尝试,这里给出一个非常初级的分析和解决方案,供没有意愿次次登录的用户们参考。

简要分析

通过浏览器F12的网络模块,暂停弹窗事件发生的前后没有特殊的网络请求,可以初步判断出这个功能是在页面加载时引入的JS实现的,并不存在使用与远程服务器交互的内容,如使用心跳包报告用户情况并实时加载JS等,暂时没有发现。也就是说,不太能通过阻止网页向某个URL发送请求或是修改数据包内容来解决这一问题。
既然很可能是网页加载时引入的JS实现的,于是通过edge禁止部分JS加载的debug模式,排查出所属的文件。经验证,该功能存在于来自s1.hdslb.com的stardust-video.****的js文件。当禁止该js加载时,不再出现自动暂停和弹窗的情况。然而,虽然视频可以继续播放,弹幕也没有问题,但是评论区、头像、及右侧推送区的加载出现了异常。这也是可以预见的,很显然是一个压缩后的综合性JS文件,并不可能单独实现这一功能。也因此,禁止该文件的引入虽然能解决所述的问题,但仍然影响着用户的正常使用和体验。
于是想到换一下思路,如通过重写同名函数覆盖该功能。遗憾的是该文件是经过压缩混淆的生产环境文件,内容太多太杂,实现的功能较多,难以定位(例如,搜索setTimeoutset和setInterval可以得到成百上千的结果)。尝试过简单的反混淆工具,也未能得到易于解读的效果。
由于精力有限,上面几条不易走通的道路没有继续尝试了,想做一个简单的用户脚本自己凑合用吧。虽然B站使用了特殊的架构,与一般的video属性不太一致,但是模拟点击操作总是没问题的,能使得视频继续播放就是。唯一需要操心的是如何分别用户自行的暂停和被脚本进行的暂停,一个简单的方式就是判断弹窗,用户自行暂停一般不会出现弹窗,而网页进行的暂停和弹窗总是伴随出现的。

初步的解决方案

根据以上的分析,一个简单的思路就是判断视频暂停的同时是否出现了B站的登录弹窗。通过审查元素可以发现,当视频暂停时,一些模块的class会出现变化,可以利用这一点,监听该元素的属性变化。经过检查,最后发现比较适合的是一个class为bpx-player-row-dm-wrap的元素,其在暂停和播放状态切换只涉及到一个class的增加和减少(即bili-paused),比较适合监听。其他元素,如bpx-player-container,状态变化较多,有时监听会出现一些意外情况。而弹窗的元素较为好判断,会伴随着覆盖网页的mask出现。关闭弹窗和续播视频的功能直接调用click来完成,应该可以初步实现正常续播的功能。

这里使用MutationObserver来监听元素属性变化完成相关功能:

var target = document.getElementsByClassName("bpx-player-row-dm-wrap")[0];
var config = {attributes: true, attributeFilter: ["class"]};
var observer = new MutationObserver(function(motationList, observer) {
	// console.log("captured!");
	setTimeout(function(){
		if (document.getElementsByClassName("bili-mini-mask").length > 0) {
		document.getElementsByClassName("bili-mini-close-icon")[0].click();
		document.getElementsByClassName("bpx-player-ctrl-btn bpx-player-ctrl-play")[0].click();
		// observer.takeRecorders();
  		} 
	}, 1000);
});
observer.observe(target, config);

需要解释的是,MutationObserver回调函数使用setTimeout是为了等待属性加载,调试发现视频会先暂停然后网页弹窗,第一时间检测元素有时并不能检测到。好吧这个策略并不优雅,但是实际用起来还行。

总结(太长不看点这里)

目前来看,阻止网络请求/禁用部分JS/复写相关函数的难度还是比较大的,简单的方法就是文中所提到的检测暂停并自动续播。这里把自用的脚本分享一下(我自己只是开个页面挂着听歌,偶尔看个视频,用起来没什么问题,总比歌放了一分钟就要暂停然后回去点两下好多了,不过离完全解决肯定还是差挺多的,凑合用吧):

去安装浏览器脚本文章来源地址https://www.toymoban.com/news/detail-782271.html

到了这里,关于关于B站(bilibili)对未登录用户视频观看进行暂停和弹窗的分析与简单解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp(全端兼容) - 最新详细禁用video视频组件的拖动快进快退功能,禁止视频播放组件video拖曳改变视频进度,uni-app如何不让视频播放器手动快进和快退(可保证用户完整观看完视频)

    在uniapp小程序/h5网页网站/安卓苹果app/nvue等(全平台完美兼容)开发中,详细实现Video视频组件禁止用户快进和快退,屏蔽禁用屏幕拖拽进行快退和快进功能(禁止用户拖动视频进度条),强制让用户从0-100完整观看完视频允许中途快进,适用于uni-app官方video视频组件,也支持

    2024年04月27日
    浏览(66)
  • Blazor WebAssembly 自定义用户登录进行授权

    主要是前面四步,第五步是需要授权验证画面的书写参数。 1. 引用 Microsoft.AspNetCore.Components.Authorization 2. Program.cs 加入:             var builder = WebAssemblyHostBuilder.CreateDefault(args);             builder.Services.AddAuthorizationCore();//There is no registered service of type \\\'Microsoft.AspNetCore.Aut

    2024年04月28日
    浏览(38)
  • 支付宝小程序获取用户授权并进行认证登录流程(前端)

    1.1申请获取用户信息能力     登录功能做之前要先沟通好客户的需求,支付宝小程序获取用户授权调用相应的接口之前要先获得对应的能力。如果需要获取身份证号、手机号、姓名,则需要登录支付宝开放平台,登录企业账号后,在控制台–能力管理–添加“获取会员信

    2024年02月11日
    浏览(55)
  • JavaWeb项目----实现用户登录、注册、对商品信息进行的添加、删除、修改功能

    在idea中创建有关类   web中写jsp页面,index.jsp是首页布局 运行效果如下:  登录页面 运行效果如下:   注册页面  运行效果如下:   登陆正确时跳转到zhuye.jsp主页页面( 使用Java脚本获取集合中对象的元素,放html标签中) 运行效果如下:   在登陆页面,密码或用户名输入

    2024年02月11日
    浏览(39)
  • 下载 bilibili 视频字幕文件

    打开一个 bilibili 网页,鼠标右键,然后点击 “检查” 选项切换到 “Network”,然后重新打开此网页 在搜索栏中输入 json 进行过滤,然后可以看到一个 后缀为 .json 的文件,即为该视频对应的字幕文件。 首先将上述字幕文件下载到本地,然后执行如下代码,提取字幕文件中的

    2024年02月14日
    浏览(78)
  • 视频观看行为高级分析(大数据分析)

     今天介绍一下我们的视频观看行为高级分析功能。 观看行为分析,基于Polyv大数据分析,能够以秒为粒度展示观众如何观看您的视频。 视频观看热力图是单次观看行为的图形化表示,Polyv云点播视频的每一次播放,都会产生一个热力图。这是一种强大的工具,因为热力图不

    2024年02月08日
    浏览(36)
  • 将Cookies信息伪造成手机注册的高级用户来免费观看收费电影

    如今网络上的电影网站不少,但很多都是需收费的,很少会有免费的“午餐”等待大家前去享受,但是现在很多电影网站注册的普通会员,如果不续费,剩余钱数便为0元,此时是根本无法观看到收费电影的。 即使你是刚刚用完钱币的普通用户,也会被拒绝在无法浏览的“门

    2024年02月05日
    浏览(52)
  • 【Bilibili视频嵌入技巧】如何嵌入720PBilibili视频

    如果你需要将Bilibili的视频分享在别的论坛,Bilibili的视频分享有一个很方便的嵌入选项,点击后会自动复制嵌入视频前端代码到剪贴板。 嵌入代码如下: 但你如果把这个代码直接贴到你的论坛中,播放出来的会是低分辨率比如360p,480p清晰度的视频,如果想提高清晰度,有

    2024年02月11日
    浏览(32)
  • python爬取bilibili,下载视频

    python下载bilibili视频合集 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 链接:https://pan.baidu.com/s/1WuXTso_iltLlnrLffi1kYQ?pwd=1234 3.1 下载单个视频 感觉现在下载的清晰度不够,可以在找找,给这块替换了就行 代码 3.2 下载选集视频 选集视频的播放链接很好找,就是后面的p=几啥的,拼一

    2024年02月10日
    浏览(41)
  • bilibili视频合集下载,python实现

    python下载bilibili视频合集 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 链接:https://pan.baidu.com/s/1WuXTso_iltLlnrLffi1kYQ?pwd=1234 3.1 下载单个视频 感觉现在下载的清晰度不够,可以在找找,给这块替换了就行 代码 3.2 下载选集视频 选集视频的播放链接很好找,就是后面的p=几啥的,拼一

    2024年02月06日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包