目录

  • 新前言
  • 旧前言
  • 视频讲解
  • 正文
    • 1.打开视频页面
    • 2.鼠标右键打开“检查”工具 或 按F12
    • 3.直接贴入代码-v3.1
    • 4.等待翻页到最底部后,运行 go(中奖人数)
  • 抽取多人版本
    • 【已不兼容】1.2 同理 控制台贴入代码,页数加载完后 然后输入 go(人数) 回车即可
    • 【已不兼容】1.1 同理 控制台贴入代码,页数加载完后 然后输入 go() 回车即可
  • 【已不兼容】2.0 b站新版本评论区 多人

新前言

因为 b站升级原因,原来评论的页数也变成了无限下拉加载的形式。导致旧版程序无法使用。
新版本的程序简单重构了一下,可参考下面的2.0版本新代码,使用方法一样。
ps:因为下拉加载的形式对浏览器压力过大,于是新一代程序上线,下方传送门

b站动态评论+视频评论区 抽奖2合1 JS版本

旧前言

如有 动态评论区 抽奖需要,可以参考:JS实现b站动态抽奖“公平”方案——动态+转发
因为转发抽奖只支持小人数,如果人少,可以使用:JS实现b站动态转发抽奖(小人数)新方案讲解
B站动态转发抽奖脚本+教程
为了方便我已经对代码做了整理,传送门:码云 GitHub

视频讲解

B站“视频评论区”抽奖 讲解【JS】

传送门

正文

1.打开视频页面

2.鼠标右键打开“检查”工具 或 按F12

3.直接贴入代码-v3.1

代码如下,复制粘贴进入“console”,然后回车

console.log("程序开始运行");
console.log("定义集合存储数据");
let name_set = new Set();
let id_set = new Set();
console.log("开始载入数据");// 循环变量
var my_loop;
// 下滑延时 800毫秒 网速/加载速度较慢的朋友们最好放慢速度 提高准确性
var r_time = 800;// 评论数
var comment_num = 1;
if(document.getElementsByClassName("total-reply")[0].innerText.indexOf("万") != -1)
{comment_num = 10000 * (parseInt(document.getElementsByClassName("total-reply")[0].innerText) + 1);
}
else
{comment_num = parseInt(document.getElementsByClassName("total-reply")[0].innerText);
}// 下滑
function r()
{setTimeout(() => {window.scroll(0, 1);}, 1000);window.scroll(0, 1920*comment_num);// 没有评论后自动停止下滑 并 抽奖if(document.getElementsByClassName("reply-end")[0]){// 停止下滑循环stop_r();// 抽奖函数draw();}
}// 停止下滑循环
function stop_r()
{clearInterval(my_loop);
}// 抽奖函数
function draw()
{// 循环次数var len = document.getElementsByClassName("user-name").length;for(var i=0; i<len; i++){var name = document.getElementsByClassName("user-name")[i].innerText;var id = document.getElementsByClassName("user-name")[i].getAttributeNode("data-user-id").value;// console.log(name+",加入集合");name_set.add(name);id_set.add(id);}console.log("全部数据加载完毕");console.log("总共"+name_set.size+"名用户");// 这就是注释//return false;
}// 获取幸运儿
function go(num)
{for(var i=0; i<num; i++){// 生成随机数,直接打印中奖者信息var lucky_num = parseInt(Math.random()*(name_set.size), 10);console.log(" ");console.log("中奖用户ID为:"+Array.from(id_set)[lucky_num]);console.log("中奖用户名为:"+Array.from(name_set)[lucky_num]);console.log(" ");}
}// 开始自动下滑 r_time毫秒一次
my_loop = setInterval(r, r_time);// 全部数据加载完毕后,使用 go(中奖数) 抽取中奖者

4.等待翻页到最底部后,运行 go(中奖人数)

例如 go(1) 就是抽一个人

ok 结束。

抽取多人版本

【已不兼容】1.2 同理 控制台贴入代码,页数加载完后 然后输入 go(人数) 回车即可

// 获取时间
function get_date() {var date = new Date();var h = date.getHours();var m = date.getMinutes();var s = date.getSeconds();h = h < 10 ? ('0' + h) : h;m = m < 10 ? ('0' + m) : m;s = s < 10 ? ('0' + s) : s;var currentDate = "[" + h + ":" + m + ":" + s + "] ";return currentDate;
}// 从map获取下标为index的键
function get_map_key(map, index)
{var i = 0;for (var [key, value] of map) {if(i == index){return key;}i++;}
}// 从map获取下标为index的值
function get_map_value(map, index)
{var i = 0;for (var [key, value] of map) {if(i == index){return value;}i++;}
}// 遍历map
function get_map(map)
{for (var [key, value] of map) {console.log(key + " = " + value);}
}console.log(get_date() + "程序开始运行");
console.log(get_date() + "定义图存储数据(自动去重)");
let name_map = new Map();
let id_map = new Map();
console.log(get_date() + "开始载入数据");
var page = 1;
var my_loop;// 抽奖函数
function draw()
{// 循环次数var len = document.getElementsByClassName("list-item reply-wrap").length;for(var i=0; i<len; i++){var name = document.getElementsByClassName("list-item reply-wrap")[i].getElementsByClassName("con")[0].getElementsByClassName("user")[0].getElementsByTagName("a")[0].innerText;var id = document.getElementsByClassName("list-item reply-wrap")[i].getElementsByClassName("con")[0].getElementsByClassName("user")[0].getElementsByTagName("a")[0].getAttributeNode("data-usercard-mid").value;//console.log(name+",加入图");name_map.set(name, page);id_map.set(id, page);}console.log(get_date() + "第"+page+"页数据存入Map完毕");if(null != document.getElementsByClassName("next")[0]){page++;//console.log("自动翻页...");document.getElementsByClassName("next")[0].click();//return true;}else{console.log(get_date() + "全部数据加载完毕");console.log(get_date() + "总共" + name_map.size + "名用户");clearInterval(my_loop);// 这就是注释//return false;}
}function go(num)
{if(num > name_map.size){console.log("???搞事情???,一共都没那么多人");return;}var arr = [];var lucky_num;for(var i = 0; i < num; i++){lucky_num = parseInt(Math.random()*(name_map.size), 10);if (arr.toString().indexOf(lucky_num) > -1) {i--;continue;}else{arr.push(lucky_num);}console.log(" ");console.log("中奖用户ID为:" + get_map_key(id_map, lucky_num));console.log("中奖用户名为:" + get_map_key(name_map, lucky_num));console.log("中奖者位于页:" + get_map_value(name_map, lucky_num));console.log(" ");}
}// 定时调用函数
my_loop = setInterval(draw, 1500);

【已不兼容】1.1 同理 控制台贴入代码,页数加载完后 然后输入 go() 回车即可

// 获取时间
function get_date() {var date = new Date();var h = date.getHours();var m = date.getMinutes();var s = date.getSeconds();h = h < 10 ? ('0' + h) : h;m = m < 10 ? ('0' + m) : m;s = s < 10 ? ('0' + s) : s;var currentDate = "[" + h + ":" + m + ":" + s + "] ";return currentDate;
}// 从map获取下标为index的键
function get_map_key(map, index)
{var i = 0;for (var [key, value] of map) {if(i == index){return key;}i++;}
}// 从map获取下标为index的值
function get_map_value(map, index)
{var i = 0;for (var [key, value] of map) {if(i == index){return value;}i++;}
}// 遍历map
function get_map(map)
{for (var [key, value] of map) {console.log(key + " = " + value);}
}console.log(get_date() + "程序开始运行");
console.log(get_date() + "定义图存储数据(自动去重)");
let name_map = new Map();
let id_map = new Map();
console.log(get_date() + "开始载入数据");
var page = 1;
var my_loop;// 抽奖函数
function draw()
{// 循环次数var len = document.getElementsByClassName("list-item reply-wrap").length;for(var i=0; i<len; i++){var name = document.getElementsByClassName("list-item reply-wrap")[i].getElementsByClassName("con")[0].getElementsByClassName("user")[0].getElementsByTagName("a")[0].innerText;var id = document.getElementsByClassName("list-item reply-wrap")[i].getElementsByClassName("con")[0].getElementsByClassName("user")[0].getElementsByTagName("a")[0].getAttributeNode("data-usercard-mid").value;//console.log(name+",加入图");name_map.set(name, page);id_map.set(id, page);}console.log(get_date() + "第"+page+"页数据存入Map完毕");if(null != document.getElementsByClassName("next")[0]){page++;//console.log("自动翻页...");document.getElementsByClassName("next")[0].click();//return true;}else{console.log(get_date() + "全部数据加载完毕");console.log(get_date() + "总共" + name_map.size + "名用户");clearInterval(my_loop);// 这就是注释//return false;}
}function go()
{var lucky_num = parseInt(Math.random()*(name_map.size),10);console.log(" ");console.log("中奖用户ID为:" + get_map_key(id_map, lucky_num));console.log("中奖用户名为:" + get_map_key(name_map, lucky_num));console.log("中奖者位于页:" + get_map_value(name_map, lucky_num));console.log(" ");
}// 定时调用函数
my_loop = setInterval(draw, 1500);

【已不兼容】2.0 b站新版本评论区 多人

数据加载完毕后,使用 go(中奖人数) 即可抽取

console.log("程序开始运行");
console.log("定义集合存储数据");
let name_set = new Set();
let id_set = new Set();
console.log("开始载入数据");// 循环变量
var my_loop;
// 下滑延时 500毫秒 网速/加载速度较慢的朋友们最好放慢速度 提高准确性
var r_time = 500;// 评论数
var comment_num = 1;
if(document.getElementsByClassName("b-head-t")[0].innerText.indexOf("万") != -1)
{comment_num = 10000 * (parseInt(document.getElementsByClassName("b-head-t")[0].innerText) + 1);
}
else
{comment_num = parseInt(document.getElementsByClassName("b-head-t")[0].innerText);
}// 下滑
function r()
{window.scroll(0, 1920*comment_num);// 没有评论后自动停止下滑 并 抽奖if(document.getElementsByClassName("loading-state")[0].innerText == "没有更多评论"){// 停止下滑循环stop_r();// 抽奖函数draw();}
}// 停止下滑循环
function stop_r()
{clearInterval(my_loop);
}// 抽奖函数
function draw()
{// 循环次数var len = document.getElementsByClassName("con").length;for(var i=0; i<len; i++){var name = document.getElementsByClassName("list-item reply-wrap")[i].getElementsByClassName("con")[0].getElementsByClassName("user")[0].getElementsByTagName("a")[0].innerText;var id = document.getElementsByClassName("list-item reply-wrap")[i].getElementsByClassName("con")[0].getElementsByClassName("user")[0].getElementsByTagName("a")[0].getAttributeNode("data-usercard-mid").value;// console.log(name+",加入集合");name_set.add(name);id_set.add(id);}console.log("全部数据加载完毕");console.log("总共"+name_set.size+"名用户");// 这就是注释//return false;
}// 获取幸运儿
function go(num)
{for(var i=0; i<num; i++){// 生成随机数,直接打印中奖者信息var lucky_num = parseInt(Math.random()*(name_set.size), 10);console.log(" ");console.log("中奖用户ID为:"+Array.from(id_set)[lucky_num]);console.log("中奖用户名为:"+Array.from(name_set)[lucky_num]);console.log(" ");}
}// 开始自动下滑 r_time毫秒一次
my_loop = setInterval(r, r_time);// 全部数据加载完毕后,使用 go(中奖数) 抽取中奖者

b站“视频评论区”抽奖 讲解(含JS源码)相关推荐

  1. JS实现b站动态评论区抽奖(含去重)

    目录 新前言 补充 视频演示 旧前言 教程 1.访问页面 2.打开"检查" 3.贴入代码 2.0版本多人抽取 3.0新版本单人抽取(适应b站动态改动) 3.1新版本多人抽取(适应b ...

  2. 【目标检测】基于matlab GUI背景差分算法视频运动物体跟踪【含Matlab源码 1915期】

    一.背景差分法和帧间差分法的车辆运动目标检测简介 1 引言 运动目标检测是从图像序列中检测运动目标.通过运动目标检测可以得到图像中的运动目标,获取图像中的运动信息.运动目标检测在医学辅助诊断.航天航空 ...

  3. 【Matlab系列】视频图像数字水印系统设计【含Matlab源码】

    Date: 2019.3.24 前言     数字水印技术一般用于版权认证.在实际使用中,嵌入水印的鲁棒性就显得非常重要.通常会采用各种方式进行攻击测试,比如加噪滤波,缩放.旋转.剪切.JPEG压缩等 ...

  4. python b站动态转发、动态评论区抽奖(已打包成exe,可以下载食用)

    前言 更新日志 2022-5-28 由于发现b站api变更,更新新版本v3.6进行适配 2022-8-1 更新兼容视频动态版本v3.7 2022-9-20 基于ttk库优化UI,发布版本v3.8 简述 ...

  5. 爬取b站视频评论用户信息!这些评论的才是大神!

    最近马保国老师在b站挺火的,关于他的视频播放量很高,b站视频评论区都是人才说话好听,写个爬虫爬取一下b站评论区用户信息和评论内容. 一.准备工作 1.工具 (1)Chrome 谷歌浏览器 安装地址:h ...

  6. python3网络爬虫--爬取b站视频评论用户信息(附源码)

    文章目录 一.准备工作 1.工具 二.思路 1.整体思路 2.爬虫思路 三.分析网页 1.分析网页加载方式 2.分析数据接口 3.获取oid 四.撰写爬虫 五.存储数据 六.总结 你爱我,我爱你,蜜雪 ...

  7. B站评论区抽奖[python]

    Bili-Luckdog B站评论区抽奖工具 by - ALKEYSHENG 2020.5.21 第三方库requests Blog: i.2017.work Github项目: Bili-Lucky ...

  8. 简单的爬取B站视频评论

    2019年12月20日15:14:09补充: 这篇博客为刚学爬虫的一个简单实践,主要使用到的为selenium模拟点击 补充说明的主要原因是有小伙伴问我评论提取的相关问题,这里统一回复一下 最简单的办 ...

  9. python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

最新文章

  1. echarts 自定义图表
  2. 996和被辞退,二选一
  3. java.nio.file.FileSystemException: xxx: Too many open files
  4. C++中函数模板template和函数参数为指针,且有返回值的结合使用
  5. 【centos7】添加开机启动服务/脚本
  6. JAVA入门[22]—thymeleaf
  7. 将速度加快到自己的个人代码生成器中
  8. BSD:Berkeley Software Distribution,伯克利软件套件
  9. mysql oldaltertable_MySQL5.6 ALTER TABLE 分析和测试
  10. 记录mysql in和not in 效率低下的问题
  11. 《三国演义》里到底描写了多少个人物,你知道吗?
  12. 各地大厂名单(一二线城市知名公司)
  13. 录屏 java_Java小程序—录屏小程序(上半场)
  14. python-控制键盘鼠标
  15. Oracle 工作语句记录
  16. 野火F1开发板STM32案例-USART使用
  17. java并发原理实战(8)-- lock接口使用和认识
  18. 最优投资组合构建问题,Python实现
  19. win7 ftp服务器修改读写权限,win7 ftp服务器文件夹权限修改
  20. 大商创如何重置或修改商家店铺登录密码?

热门文章

  1. (转)多媒体通话杂谈:SBC设备(边界会话控制器)全面剖析讲解
  2. 3.licheepi wifi
  3. ExternalInterface的call函数返回null的原因分析(AS2)
  4. 解决 clean-webpack-plugin www has been removed 问题
  5. 全球最强图标库:码农福利图标库Easyicon、Thenounproject、icons8、flaticons超值大礼包,你值得拥有……
  6. 企业IT架构转型之道:阿里巴巴中台战略思想与架构实战. 2.4 赋予业务快速创新和试错能力...
  7. ubuntu软件安装方法大全
  8. 称重软件-汽车衡称重防作弊系统整体解决方案
  9. Atlas(2):开源数据治理方案
  10. 单相逆变器第三课、系统结构分析梳理