编写一个油猴脚本 您所在的位置:网站首页 b站看观看记录 编写一个油猴脚本

编写一个油猴脚本

2023-08-21 07:19| 来源: 网络整理| 查看: 265

前言

对于普通的多p视频,B站没有提供集数观看进度的功能,所以网课资源虽多,但是一不小心就会忘记看到的集数。可以通过编写脚本来记录集数,还可以设置一键跳转上次观看集数等。插件已在greasyfork发布,点击即可跳转安装 -> 【看网课必备】 哔哩哔哩(bilibili|B站)小功能汇总

监听集数切换

通过F12打开控制台查看切换集数的时候返回的数据,发现切换集数的时候都会返回这个数据accept_description。那么我们可以使用拦截器监听返回数据是否存在这个参数,存在则触发更新集数观看进度。 在这里插入图片描述

XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, { "apply": (target, thisArg, args) => { thisArg.addEventListener( "load", event => { try { // 没返回responseText,直接跳过 if (!/^{.*}$/.test(event.target.responseText)) { return; } const result = JSON.parse(event.target.responseText); // 没返回accept_description,直接跳过 if (!result.data.accept_description || !result.data.accept_description.length) { return; } // console.log("this:", result) // 返回accept_description,更新观看集数 listener(); } catch (err) { } }) return target.apply(thisArg, args); } })

记录观看集数

通过上面的监听函数,我们进入listener()函数,在里面记录我们观看视频的集数,集数标题和B站视频专属的BVid。

function listener(e) { // 获取已缓存的视频集数记录 var schedule_chart = GM_getValue('schedule_chart') || [] // 通过分析可以知道`document.getElementsByClassName('on')`这个元素块里面存有视频集数、名称和视频id等数据 var info = [] var node = document.getElementsByClassName('on') for (var i = 0, len = node.length; i // 通过正则把视频集数、名称和id提取出来 var regx = /video\/(.V[0-9a-zA-Z]*)\?p=(\d+).*title="(.*?)">info[2]}`, title: info[3] } // 检查视频是否已有记录,已有则更新,没有则添加 if (schedule_chart.length) { for (i = 0, len = schedule_chart.length; i schedule_chart[i] = dic break; } else if (i == (len - 1)) { schedule_chart.push(dic) } } } else { schedule_chart.push(dic) alert('首个视频观看集数进度已经记录啦,点开油猴可以查看菜单~') } // 重新设置视频观看记录的缓存 GM_setValue('schedule_chart', schedule_chart) }

显示视频观看集数

缓存到了视频观看集数,就要在需要的时候显示出来告诉我们观看进度啦。

function _getChapDic() { // 我们只匹配URL中是video/.v也就是上传视频区的有av或bv号的链接 if (!/video\/(.v[0-9|a-z|A-Z]*)\??/i.exec(document.location.href)) { return 0; } var cur_dic = {} var schedule_chart = GM_getValue('schedule_chart') || [] var bv_id = /video\/(.v[0-9|a-z|A-Z]*)\??/i.exec(document.location.href)[1] // bv_id part title // 遍历观看记录,返回视频观看记录dic,可以用alert显示,或者设置快捷键直接跳转。 for (var i = 0, len = schedule_chart.length; i continue; } var regx = new RegExp(schedule_chart[i].bv_id, "i"); // console.log(regx, regx.test(bv_id)) if (regx.test(bv_id)) { cur_dic = schedule_chart[i] break; } } return cur_dic }

以上就是B站集数观看记录的步骤啦,具体的细节可以到 【看网课必备】 哔哩哔哩(bilibili|B站)小功能汇总 或者 github 查看完整源码嗷~

ps:一年前写的代码,很多地方不是很好哈哈哈



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有