利用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 相关文章推荐
js post方式传递提交的实现代码
May 31 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 Javascript
js用typeof方法判断undefined类型
Jul 15 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
Aug 10 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
JS中SetTimeout和SetInterval使用初探
Mar 23 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
Mar 30 Javascript
浅析Vue自定义组件的v-model
Nov 26 Javascript
Angular实现的table表格排序功能完整示例
Dec 22 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
Aug 13 Javascript
小程序多图列表实现性能优化的方法步骤
May 28 Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 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相关资料
2006/10/09 PHP
php 购物车的例子
2009/05/04 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
python 中文字符串的处理实现代码
2009/10/25 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
django静态文件加载的方法
2018/05/20 Python
详解python的四种内置数据结构
2019/03/19 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
教师年度考核个人总结
2015/02/12 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
售后服务质量承诺书
2015/04/29 职场文书
妇产科护理心得体会
2016/01/22 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA