利用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实现Web颜色值转换
Feb 05 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
再谈javascript常见错误及解决方法
Sep 16 Javascript
Vue.js双向绑定实现原理详解
Dec 22 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
Bootstrap实现下拉菜单多级联动
Nov 23 Javascript
Vue登录注册并保持登录状态的方法
Aug 17 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
Sep 05 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
layer关闭当前窗口页面以及确认取消按钮的方法
Sep 09 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
Nov 06 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
分享3个php获取日历的函数
2015/09/25 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
Python备份Mysql脚本
2008/08/11 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
用友笔试题目
2016/10/25 面试题
广州一家公司的.NET面试题
2016/06/11 面试题
法律专业应届本科毕业生求职信
2013/10/25 职场文书
销售实习自我鉴定
2013/12/07 职场文书
教师研修随笔感言
2014/01/23 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
导游欢迎词范文
2015/01/23 职场文书
2015年工程师工作总结
2015/04/30 职场文书
2015年电教工作总结
2015/05/26 职场文书