利用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 相关文章推荐
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
Feb 28 Javascript
jQuery侧边栏实现代码
May 06 Javascript
再谈Javascript中的异步以及如何异步
Aug 19 Javascript
利用jQuery实现一个简单的表格上下翻页效果
Mar 14 Javascript
JavaScript输出所选择起始与结束日期的方法
Jul 12 Javascript
Angular4编程之表单响应功能示例
Dec 13 Javascript
JavaScript选择排序算法原理与实现方法示例
Aug 06 Javascript
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 jQuery
webstorm中配置Eslint的两种方式及差异比较详解
Oct 19 Javascript
Javascript删除数组里的某个元素
Feb 28 Javascript
vue el-tree 默认展开第一个节点的实现代码
May 15 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/06/21 PHP
php中文验证码实现方法
2015/06/18 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
浅谈PHP的反射机制
2016/12/15 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
解读Django框架中的低层次缓存API
2015/07/24 Python
python开发之thread实现布朗运动的方法
2015/11/11 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
Python提取频域特征知识点浅析
2019/03/04 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
微观物理专业自荐信
2014/01/26 职场文书
实习生辞职信范文
2015/03/02 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
如何通过一篇文章了解Python中的生成器
2022/04/02 Python