利用JS代码自动删除稿件的普通弹幕功能


Posted in Javascript onSeptember 20, 2019

事情的起因是在b站投稿了一个高级弹幕测试的视频(av9940487),但是由于b站的弹幕池机制是新的弹幕顶掉旧的弹幕,所以导致一些人发的高级弹幕很快就被顶掉了。

所以就想着写个脚本来自动删除属性为普通的弹幕,语言用的是javascript,在chrome的控制台就可以执行这个脚本。

1.删除弹幕的流程分析

判断弹幕A是否为普通弹幕,是则选中。

利用JS代码自动删除稿件的普通弹幕功能

点击删除弹幕的按钮,弹出二次确认框。

利用JS代码自动删除稿件的普通弹幕功能

点击确定,成功删除。

2.删除弹幕相关的html代码,js代码2.1 选中

利用JS代码自动删除稿件的普通弹幕功能

可通过判断class属性为"item-front"的标签里是否包含“高级”两个字来决定是否勾选该弹幕:

document.getElementsByClassName("item-font")[i].innerHTML.match("高级")
getElementsByClassName("bili-checkbox")[i+1].click()

这里i+1是由于有其他标签也使用了“bili-checkbox”属性。

利用JS代码自动删除稿件的普通弹幕功能

利用JS代码自动删除稿件的普通弹幕功能

2.2

利用JS代码自动删除稿件的普通弹幕功能

用click函数触发点击“删除弹幕”按钮的操作:

document.getElementsByClassName("dele-btn")[0].getElementsByClassName("plain")[0].click();

利用JS代码自动删除稿件的普通弹幕功能

点击二次确认框:

for (i = 0; i < document.getElementsByClassName("item-attr").length; i++) {if(!document.getElementsByClassName("item-font")[i].innerHTML.match("高级")){

document.getElementsByClassName("bili-checkbox")[i+1].click();
}}document.getElementsByClassName("dele-btn")[0].getElementsByClassName("plain")[0].click();document.getElementsByClassName("bili-btn")[2].click();

但是由于控制台执行js的代码速度过快,会导致在执行到第7行代码的时候,class属性为“bili-btn”的第3个标签还没加载出来,所以要在执行第7个语句之前让其停顿一下。

利用JS代码自动删除稿件的普通弹幕功能

利用setTimeout()方法可实现延迟执行

setTimeout(function () {document.getElementsByClassName("bili-btn")[2].click(); }, 1000);

setTimeout("document.getElementsByClassName(\"bili-btn\")[2].click()",1000);

至此,只实现了单页面的批量删除1次,但是我们知道,假设弹幕有N页,就必须让以上代码不断运行,直到第x页不包含普通弹幕,然后跳转至第x+1页继续执行以上删除代码。

3. 实现不断刷新页面,当删除完当前页的普通弹幕时,自动跳转至下一页

结合另一篇文章即可实现:https://www.cnblogs.com/wujiecong/p/11549738.html

var timeout = prompt("设置刷新时间");
var current = location.href;
var page = 0;
var count = 0;
if(timeout > 0)
{
  setTimeout('reload()', 1000 * timeout);
}
else
{
location.replace(current);
}

function reload()
{
  setTimeout('reload()', 1000 * timeout);
  if(count<10){
    const regex = /pn=(\d+)/;
    page = page +1;
  current = current.replace(regex,"pn="+page.toString())
  }  

var frame = '<frameset cols=\'*\'>\n<frame src=\'' + current + '\' /></frameset>';

with(document)

{
    // 引用document对象,调用write方法写入框架,打开新窗口


write(frame);



setTimeout(function(){


count = 0


getFrames = window.frames["0"]


for (i = 0; i < getFrames.document.getElementsByClassName("item-attr").length; i++) {



if(!getFrames.document.getElementsByClassName("item-font")[i].innerHTML.match("高级")){




getFrames.document.getElementsByClassName("bili-checkbox")[i+1].click();




count = count +1;
      }
    }


if(count>0){



getFrames.document.getElementsByClassName("dele-btn")[0].getElementsByClassName("plain")[0].click();



setTimeout(function () {




getFrames.document.getElementsByClassName("bili-btn")[2].click(); 



}, 1000);


}},2000);



   // 关闭上面的窗口


void(close());

};
}

总结

以上所述是小编给大家介绍的利用JS代码自动删除稿件的普通弹幕功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery的deferred对象使用详解
Aug 20 Javascript
jquery中插件实现自动添加用户的具体代码
Nov 15 Javascript
Jquery自定义button按钮的几种方法
Jun 11 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
Jul 09 Javascript
微信小程序-详解数据缓存
Nov 24 Javascript
Bootstrap一款超好用的前端框架
Sep 25 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
Sep 03 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
vue实现跳转接口push 转场动画示例
Nov 01 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
Apr 29 Javascript
解决vue项目 build之后资源文件找不到的问题
Sep 12 Javascript
基于layui table返回的值的多级嵌套的解决方法
Sep 19 #Javascript
layui默认选中table的CheckBox复选框方法
Sep 19 #Javascript
layui 数据表格复选框实现单选功能的例子
Sep 19 #Javascript
基于layui的table插件进行复选框联动功能的实现方法
Sep 19 #Javascript
解决layui的table插件无法多层级获取json数据的问题
Sep 19 #Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 #Javascript
用原生JS实现爱奇艺首页导航栏代码实例
Sep 19 #Javascript
You might like
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
Prototype Object对象 学习
2009/07/12 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
Python中类的初始化特殊方法
2017/12/01 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
python解释器spython使用及原理解析
2019/08/24 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
最新奶茶店创业计划书范文
2014/02/08 职场文书
初三学生个人自我评定
2014/04/06 职场文书
片区教研活动总结
2014/07/02 职场文书
文秘应届生求职信
2014/07/05 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang