前言

即 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站动态转发抽奖(小人数)新方案讲解相关推荐

  1. python测试抽奖脚本_B站动态转发抽奖脚本+教程

    重要提醒!!! 经过大数据量测试后发现,程序不能爬取多转发人数的所有数据.原因是程序内API的数据不全,并没有提供所有的转发人员数据,导致数据的缺失. 测试数据量 转发人数6w+,而https://a ...

  2. B站动态转发抽奖脚本+教程

    此版本可能不兼容了,推荐使用下面这个文章的新版本(暂时保持维护的版本)

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

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

  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站视频抽奖小程序

    环境与工具:win10 + IDEA 语言与框架:Java+JavaFX+Maven 功能描述 根据视频ID抽取该视频下的评论人员信息,统计总人数.评论页数对应的就是实际总评论分页.展示的就是幸运观众 ...

  6. 利用js实现抽奖小游戏

    这次依然是大大的js干货,不知道大家有没有看到过类似下面这种抽奖小游戏: 这种小游戏实现的原理是什么呢?我们该怎样使用学习过的js知识来实现这个小游戏呢?你别一看到"利用js实现游戏&quo ...

  7. 如何用html5制作抽奖游戏,原生js实现抽奖小游戏

    这个小游戏可以设置为抽奖小游戏,也可以设置为随机点名器,这个软件实现可以多次获取同一个元素的 1.HTML结构代码如下: 开始点名 停止 幸运的的你 2.css样式设置页面代码如下: css代码不仅仅 ...

  8. html+css+js实现带有转盘的抽奖小程序

    html+css+js实现带有转盘的抽奖小程序 简介:html+css+js实现带有转盘的抽奖小程序. 效果展示 抽奖方式: 飞镖 飞镖制作成飞机的模样,没人的号码用黄色标签做成云朵模样黏贴在背景板上 ...

  9. 微信小程序 index.js获取app.js异步请求的动态数据

    对于 "index.js不能获取app.js异步请求的动态数据" 这个问题,本人也是郁闷了好几分钟. 解决方法是:getApp().wxFunction().then(res =& ...

最新文章

  1. python中weekid什么意思_week_one-python格式化输出
  2. android之Notification通知
  3. NBT:Rob Knight团队发表微生物组数据降维新方法
  4. CentOS 安装NTFS-3G,让系统支持NTFS分区的方法
  5. XDP/eBPF — eBPF
  6. UVA11054Gergovia的酒交易
  7. kafka linux客户端,kafka linux 客户端操作命令
  8. 【内有网易黑猪肉券福利】网易MCTalk首秀——在线教育是一场马拉松
  9. JSP、EL和JSTL-学习笔记03【EL介绍和运算符、EL获取域中存储的数据】
  10. 【数据结构与算法】之深入解析“最长有效括号”的求解思路与算法示例
  11. 数据结构之排序五:选择排序
  12. Java与Http协议
  13. python - 环境搭建
  14. 嘉年华回顾丨PingCAP CEO 刘奇,带你探寻TiDB...
  15. 计算机视觉︱图像取证技术
  16. Windows Phone开发之路(6) XAML基础(下)
  17. Scihub永久链接
  18. MVC中的action验证登录(ActionFilterAttribute)
  19. 电脑表格制作教程入门_微信销售小程序入门教程:制作+营销
  20. 剧本写作app——Final Draft,帮你创建专业的主流编剧格式!

热门文章

  1. OS App体验设计
  2. python中execute函数_python中的函数是如何使用的?
  3. 同事的你--写给那些离职的同事们
  4. 字节跳动2021批笔试题解
  5. 一张图看懂苹果MacBook所有屏幕分辨率
  6. Java遍历list集合转换成PDF
  7. CSP-J 2021-网络连接
  8. 怎样快速查询多个天天欧洲物流单号的在途信息
  9. python如何画3个相切的圆_如何在几何画板中画出三个两两相切的圆
  10. 微信小程序---密码输入