JS实现b站动态转发抽奖(小人数)新方案讲解
前言
即 B站动态转发抽奖脚本+教程 之后。
因b站数据包地址生成做了改动,猜测通过某种方式进行了加密后减去某一数值的方式。
原抽奖脚本难以获取全部转发者信息。
ps:即使是手动翻页记录,也无法获取所有转发者信息。即:前面的信息已不被动态页面记录。
再次提供另一种方案,可以极大程度的提高抽奖的准确性和真实性(小人数)。
为了方便我已经对代码做了整理,传送门:码云 GitHub
教程
1、访问页面
PC端打开浏览器,访问你的动态抽奖页面。
2、打开“检查”
鼠标右键,打开“检查”,一般的快捷键都是F12
长这样,我们需要在console(控制台)下输入代码。
3、手动加载所有可加载数据
点击“转发”图标,并一直滚动到没有新数据刷新为止!
4、执行代码
获取可加载转发者的人数
在“检查”的控制台下输入以下命令,获取所有可加载转发者的人数。
document.getElementsByClassName("user-name c-pointer").length
可以看到,2k多的转发,但是实际加载到570的时候就不能加载新数据了。
将转发者信息存入集合(集合自带去重)
在“检查”的控制台下输入以下命令,定义一个集合,叫my_set。记得按回车啊!!!
let my_set = new Set();
循环将数据存入集合
for(var i=0; i<document.getElementsByClassName("user-name c-pointer").length; i++)
{my_set.add(document.getElementsByClassName("user-name c-pointer")[i].innerText);
}
可以看到得到的Set在下面已经打印了,我们点击Set左侧的小三角,展开。
可以看到,我们一共获取到 249条数据,已经去重后的转发者的昵称。可以继续展开查看。
可以看到已经成功去重了。
5、抽取幸运儿
直接生成随机数并打印幸运儿
在“检查”的控制台输入以下代码,my_set.size就是 Set的长度。可以改成数字,例如:249。
这个代码会生成 0到my_set.size-1 的整数。将这个整数做为Set转Array后的下标,打印结果。
Array.from(my_set)[parseInt(Math.random()*(my_set.size),10)]
其他程序生成随机数进行抽取
将Set的长度记录下来,即 249名用户。
抽奖方式很简单,随便百度个随机数生成程序。例子:http://www.99cankao.com/numbers/random-number-generator.php
注意是从 0开始,到Set长度减1。
生成结果 203 后,我们继续在“检查”下的控制台下执行代码,转Set为Array,打印其值。
Array.from(my_set)[203]
或是直接翻开来找。
6、一步到位 单人中奖
console.log("程序开始运行");
console.log("定义集合存储数据");
let my_set = new Set();
var offset = document.getElementsByClassName("text-bar selected")[0].getElementsByClassName("text-offset")[0].innerText;
if(offset/20 > 25)
{offset = 500;
}
console.log("开始载入数据");
var my_loop;
function r()
{window.scroll(0, 1920*100);
}
function stop_r()
{clearInterval(my_loop);
}
function draw()
{for(var i=0; i<document.getElementsByClassName("user-name c-pointer").length; i++){my_set.add(document.getElementsByClassName("user-name c-pointer")[i].innerText);}console.log("全部数据加载完毕");console.log("总共"+my_set.size+"名用户");console.log("中奖用户为:"+Array.from(my_set)[parseInt(Math.random()*(my_set.size),10)]);}
my_loop = setInterval(r, 3000);
setTimeout(stop_r, 3000 * (parseInt(offset)/10 + 5));
setTimeout(draw, 3000 * (parseInt(offset)/10 + 6));
7、一步到位 多人中奖
console.log("程序开始运行");
console.log("定义集合存储数据");
let my_set = new Set();
var offset = document.getElementsByClassName("text-bar selected")[0].getElementsByClassName("text-offset")[0].innerText;
if(offset/20 > 25)
{offset = 500;
}
console.log("开始载入数据");
var my_loop;
function r()
{window.scroll(0, 1920*100);
}
function stop_r()
{clearInterval(my_loop);
}
function draw()
{// 修改num为你需要抽奖的人数var num = 3;for(var i=0; i<document.getElementsByClassName("user-name c-pointer").length; i++){my_set.add(document.getElementsByClassName("user-name c-pointer")[i].innerText);}let num_set = new Set();while(1){if(num_set.size >= num)break;var lucky_num = parseInt(Math.random()*(my_set.size),10);num_set.add(lucky_num);}for(var i=0; i<num; i++){console.log("中奖用户为:"+Array.from(my_set)[i]);}}
my_loop = setInterval(r, 3000);
setTimeout(stop_r, 3000 * (parseInt(offset)/10 + 5));
setTimeout(draw, 3000 * (parseInt(offset)/10 + 6));
8、多人数二步到位脚本
自动翻页到底部时,再输入 draw(中奖数) 回车即可
console.log("程序开始运行");
console.log("定义集合存储数据");
let my_set = new Set();console.log("开始载入数据");
var my_loop;
function r()
{window.scroll(0, 1920*100);
}function draw(num)
{clearInterval(my_loop);for(var i=0; i<document.getElementsByClassName("user-name c-pointer").length; i++){my_set.add(document.getElementsByClassName("user-name c-pointer")[i].innerText);}console.log("全部数据加载完毕");console.log("总共"+my_set.size+"名用户");let num_set = new Set();while(1){if(num_set.size >= num)break;var lucky_num = parseInt(Math.random()*(my_set.size),10);num_set.add(lucky_num);}for(var i=0; i<num; i++){console.log("中奖用户为:"+Array.from(my_set)[i]);}
}
my_loop = setInterval(r, 3000);
// 当页面到底时, 输入 draw(你要抽的人的数量) 即可
JS实现b站动态转发抽奖(小人数)新方案讲解相关推荐
- python测试抽奖脚本_B站动态转发抽奖脚本+教程
重要提醒!!! 经过大数据量测试后发现,程序不能爬取多转发人数的所有数据.原因是程序内API的数据不全,并没有提供所有的转发人员数据,导致数据的缺失. 测试数据量 转发人数6w+,而https://a ...
- B站动态转发抽奖脚本+教程
此版本可能不兼容了,推荐使用下面这个文章的新版本(暂时保持维护的版本)
- JS实现b站动态评论区抽奖(含去重)
目录 新前言 补充 视频演示 旧前言 教程 1.访问页面 2.打开"检查" 3.贴入代码 2.0版本多人抽取 3.0新版本单人抽取(适应b站动态改动) 3.1新版本多人抽取(适应b ...
- python b站动态转发、动态评论区抽奖(已打包成exe,可以下载食用)
前言 更新日志 2022-5-28 由于发现b站api变更,更新新版本v3.6进行适配 2022-8-1 更新兼容视频动态版本v3.7 2022-9-20 基于ttk库优化UI,发布版本v3.8 简述 ...
- 一个简单的B站视频抽奖小程序
环境与工具:win10 + IDEA 语言与框架:Java+JavaFX+Maven 功能描述 根据视频ID抽取该视频下的评论人员信息,统计总人数.评论页数对应的就是实际总评论分页.展示的就是幸运观众 ...
- 利用js实现抽奖小游戏
这次依然是大大的js干货,不知道大家有没有看到过类似下面这种抽奖小游戏: 这种小游戏实现的原理是什么呢?我们该怎样使用学习过的js知识来实现这个小游戏呢?你别一看到"利用js实现游戏&quo ...
- 如何用html5制作抽奖游戏,原生js实现抽奖小游戏
这个小游戏可以设置为抽奖小游戏,也可以设置为随机点名器,这个软件实现可以多次获取同一个元素的 1.HTML结构代码如下: 开始点名 停止 幸运的的你 2.css样式设置页面代码如下: css代码不仅仅 ...
- html+css+js实现带有转盘的抽奖小程序
html+css+js实现带有转盘的抽奖小程序 简介:html+css+js实现带有转盘的抽奖小程序. 效果展示 抽奖方式: 飞镖 飞镖制作成飞机的模样,没人的号码用黄色标签做成云朵模样黏贴在背景板上 ...
- 微信小程序 index.js获取app.js异步请求的动态数据
对于 "index.js不能获取app.js异步请求的动态数据" 这个问题,本人也是郁闷了好几分钟. 解决方法是:getApp().wxFunction().then(res =& ...
最新文章
- python中weekid什么意思_week_one-python格式化输出
- android之Notification通知
- NBT:Rob Knight团队发表微生物组数据降维新方法
- CentOS 安装NTFS-3G,让系统支持NTFS分区的方法
- XDP/eBPF — eBPF
- UVA11054Gergovia的酒交易
- kafka linux客户端,kafka linux 客户端操作命令
- 【内有网易黑猪肉券福利】网易MCTalk首秀——在线教育是一场马拉松
- JSP、EL和JSTL-学习笔记03【EL介绍和运算符、EL获取域中存储的数据】
- 【数据结构与算法】之深入解析“最长有效括号”的求解思路与算法示例
- 数据结构之排序五:选择排序
- Java与Http协议
- python - 环境搭建
- 嘉年华回顾丨PingCAP CEO 刘奇,带你探寻TiDB...
- 计算机视觉︱图像取证技术
- Windows Phone开发之路(6) XAML基础(下)
- Scihub永久链接
- MVC中的action验证登录(ActionFilterAttribute)
- 电脑表格制作教程入门_微信销售小程序入门教程:制作+营销
- 剧本写作app——Final Draft,帮你创建专业的主流编剧格式!