利用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创建命名空间(namespace)的最简实现
Dec 11 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
Aug 21 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
Dec 02 Javascript
正则中的回溯定义与用法分析【JS与java实现】
Dec 27 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
在Vue组件上动态添加和删除属性方法
Feb 23 Javascript
vue 获取视频时长的实例代码
Aug 20 Javascript
layui 弹出层值回传解决方式
Nov 14 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
Jul 27 Javascript
如何使用three.js 制作一个三维的推箱子游戏
Jul 29 Javascript
vue中 this.$set的使用详解
Nov 17 Vue.js
基于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
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
Python struct.unpack
2008/09/06 Python
python 正则式 概述及常用字符
2009/05/07 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
深入学习Python中的装饰器使用
2016/06/20 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
模具设计与制造专业推荐信
2014/02/16 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
文艺晚会开场白
2015/05/29 职场文书
高一地理教学工作总结
2015/08/12 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
vue+iview实现手机号分段输入框
2022/03/25 Vue.js
Go语言grpc和protobuf
2022/04/13 Golang