最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

JS實(shí)現(xiàn)b站動(dòng)態(tài)抽獎(jiǎng)“公平”方案——?jiǎng)討B(tài)+轉(zhuǎn)發(fā)

2020-06-01 22:46 作者:Love丶伊卡洛斯  | 我要投稿

新前言

????因?yàn)?b站動(dòng)態(tài)升級(jí)原因,原來(lái)評(píng)論的頁(yè)數(shù)也變成了無(wú)限下拉加載的形式,導(dǎo)致舊版程序無(wú)法使用,新版本的程序簡(jiǎn)單重構(gòu)了一下,可參考下面的3.0版本新代碼,使用方法一樣。
????目前成功完成1250評(píng)論的動(dòng)態(tài)的測(cè)試

補(bǔ)充

當(dāng)然 感興趣的可以去試試官方API?

https://api.bilibili.com/x/v2/reply/main?callback=jQuery33106548244954033764_1618553940827&jsonp=jsonp&next=4&type=11&oid=130267145&mode=3&_=1618553940831

我這也簡(jiǎn)單分析一下

開發(fā)者工具?Network?JS
用戶數(shù)據(jù)
postman 構(gòu)建GET請(qǐng)求
請(qǐng)求頭追加referer

不加referer

視頻演示+講解

前期

因?yàn)?span id="s0sssss00s" class="color-blue-03">非官方途徑無(wú)法獲取全部的轉(zhuǎn)發(fā)人員信息,但評(píng)論的人員信息可以全部獲?。〞簳r(shí)看來(lái)一百多頁(yè)加載都沒(méi)有問(wèn)題)
參考鏈接:JS實(shí)現(xiàn)b站動(dòng)態(tài)轉(zhuǎn)發(fā)抽獎(jiǎng)(小人數(shù))新方案講解
JS實(shí)現(xiàn)b站動(dòng)態(tài)評(píng)論區(qū)抽獎(jiǎng)(含去重)

公平抽獎(jiǎng)實(shí)現(xiàn)方案講解

因?yàn)樵u(píng)論獲取數(shù)是的,那么只需要轉(zhuǎn)發(fā)+評(píng)論雙管齊下,就可以通過(guò)在評(píng)論區(qū)抽獎(jiǎng),再對(duì)中獎(jiǎng)用戶的動(dòng)態(tài)繼續(xù)檢索,中獎(jiǎng)?wù)邥?huì)有評(píng)論時(shí)間,當(dāng)天查看他的動(dòng)態(tài)是否有轉(zhuǎn)發(fā)抽獎(jiǎng)動(dòng)態(tài),從而判斷其資格。

抽獎(jiǎng)代碼

打開“動(dòng)態(tài)”,保持評(píng)論第一頁(yè)?。?!,鼠標(biāo)右鍵打開“檢查”,來(lái)到“console”,貼入代碼運(yùn)行即可。
代碼如下:

console.log("程序開始運(yùn)行");
console.log("定義集合存儲(chǔ)數(shù)據(jù)");
let name_set = new Set();
let id_set = new Set();
console.log("開始載入數(shù)據(jù)");
var page = 1;
var my_loop;

// 抽獎(jiǎng)函數(shù)
function draw()
{
? ?// 循環(huán)次數(shù)
????for(var i=0; i<document.getElementsByClassName("con").length; i++)
????{
????????var name = document.getElementsByClassName("con")[i].getElementsByClassName("user")[0].getElementsByTagName("a")[0].innerText;
????????console.log(name+",加入集合");
????????name_set.add(name);
????????var id = document.getElementsByClassName("con")[i].getElementsByClassName("user")[0].getElementsByTagName("a")[0].getAttributeNode("data-usercard-mid").value;
????????id_set.add(id);
????}
????console.log("第"+page+"頁(yè)數(shù)據(jù)存入Set完畢");
????if(null != document.getElementsByClassName("next")[0])
????{
????????page++;
????????console.log("自動(dòng)翻頁(yè)...");
????????document.getElementsByClassName("next")[0].click();
????????//return true;
????}
????else
????{
????????console.log("全部數(shù)據(jù)加載完畢");
????????console.log("總共"+name_set.size+"名用戶");
????????// 生成隨機(jī)數(shù),直接打印中獎(jiǎng)?wù)咝畔?br> ????????var lucky_num = parseInt(Math.random()*(name_set.size),10);
????????console.log("中獎(jiǎng)用戶ID為:"+Array.from(id_set)[lucky_num]);
????????console.log("中獎(jiǎng)用戶名為:"+Array.from(name_set)[lucky_num]);
????????console.log("中獎(jiǎng)?wù)叽蟾盼挥?第" +parseInt(lucky_num/20+1)+ "頁(yè)");
????????clearInterval(my_loop);
????????// 這就是注釋
????????//return false;
????}
}
// 定時(shí)調(diào)用函數(shù)
my_loop = setInterval(draw, 1500);



相關(guān)問(wèn)題

最后一行my_loop = setInterval(draw, 1500);,這里的1500代表毫秒數(shù),你可以修改這個(gè)數(shù)字來(lái)實(shí)現(xiàn)延長(zhǎng)自動(dòng)翻頁(yè)時(shí)間差,因?yàn)榉?yè)加載數(shù)據(jù)會(huì)受網(wǎng)絡(luò)影響,網(wǎng)速慢的話,數(shù)據(jù)加載慢,可能會(huì)丟失數(shù)據(jù),所以可以相對(duì)的延長(zhǎng)翻頁(yè)時(shí)間。
如果打印的內(nèi)容不需要,可以注釋掉相關(guān) console.log代碼,注釋就是在這個(gè)代碼前加 //,這2個(gè)反斜杠就是注釋。注釋后就不會(huì)打印了。

代碼升級(jí)

準(zhǔn)確獲取中獎(jiǎng)?wù)呶恢?,不過(guò)是在數(shù)據(jù)不丟失的前提下

// 獲取時(shí)間

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獲取下標(biāo)為index的鍵

function get_map_key(map, index)

{

???? var i = 0;

???? for (var [key, value] of map) {

???????? if(i == index)

???????? {

???????? ???? return key;

???????? }

???????? i++;

???? }

}


// 從map獲取下標(biāo)為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() + "程序開始運(yùn)行");

console.log(get_date() + "定義圖存儲(chǔ)數(shù)據(jù)(自動(dòng)去重)");

let name_map = new Map();

let id_map = new Map();

console.log(get_date() + "開始載入數(shù)據(jù)");

var page = 1;

var my_loop;


// 抽獎(jiǎng)函數(shù)

function draw()

{

? ? // 循環(huán)次數(shù)

???? for(var i=0; i<document.getElementsByClassName("con").length; i++)

???? {

???????? var name = document.getElementsByClassName("con")[i].getElementsByClassName("user")[0].getElementsByTagName("a")[0].innerText;

???????? var id = document.getElementsByClassName("con")[i].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+"頁(yè)數(shù)據(jù)存入Map完畢");

???? if(null != document.getElementsByClassName("next")[0])

???? {

???????? page++;

???????? //console.log("自動(dòng)翻頁(yè)...");

???????? document.getElementsByClassName("next")[0].click();

???????? //return true;

???? }

???? else

???? {

???????? console.log(get_date() + "全部數(shù)據(jù)加載完畢");

???????? console.log(get_date() + "總共" + name_map.size + "名用戶");

???????? // 生成隨機(jī)數(shù),直接打印中獎(jiǎng)?wù)咝畔?/span>

???????? var lucky_num = parseInt(Math.random()*(name_map.size),10);

???????? console.log(" ");

???????? console.log("中獎(jiǎng)用戶ID為:" + get_map_key(id_map, lucky_num));

???????? console.log("中獎(jiǎng)用戶名為:" + get_map_key(name_map, lucky_num));

???????? console.log("中獎(jiǎng)?wù)呶挥陧?yè):" + get_map_value(name_map, lucky_num));

???????? console.log(" ");

???????? console.log("程序運(yùn)行結(jié)束");

???????? clearInterval(my_loop);

???????? // 這就是注釋

???????? //return false;

???? }

}


// 定時(shí)調(diào)用函數(shù)

my_loop = setInterval(draw, 1500);

3.0?新版本b站?單人版

使用方法相同,選中評(píng)論區(qū)后,console中貼入代碼即可

console.log("程序開始運(yùn)行");

console.log("定義集合存儲(chǔ)數(shù)據(jù)");

let name_set = new Set();

let id_set = new Set();

console.log("開始載入數(shù)據(jù)");


// 循環(huán)變量

var my_loop;

// 下滑延時(shí) 500毫秒 網(wǎng)速/加載速度較慢的朋友們最好放慢速度 提高準(zhǔn)確性

var r_time = 500;


// 評(píng)論數(shù)

var comment_num = parseInt(document.getElementsByClassName("text-offset")[1].innerText);


// 下滑

function r()

{

window.scroll(0, 1920*comment_num);

// 沒(méi)有評(píng)論后自動(dòng)停止下滑 并 抽獎(jiǎng)

if(document.getElementsByClassName("loading-state")[0].innerText == "沒(méi)有更多評(píng)論")

{

// 停止下滑循環(huán)

stop_r();

// 抽獎(jiǎng)函數(shù)

draw();

}

}


// 停止下滑循環(huán)

function stop_r()

{

clearInterval(my_loop);

}


// 抽獎(jiǎng)函數(shù)

function draw()

{

? ? // 循環(huán)次數(shù)

? ? var len = document.getElementsByClassName("con").length;

for(var i=0; i<len; i++)

{

var name = document.getElementsByClassName("con")[i].getElementsByClassName("user")[0].getElementsByTagName("a")[0].innerText;

// console.log(name+",加入集合");

name_set.add(name);

var id = document.getElementsByClassName("con")[i].getElementsByClassName("user")[0].getElementsByTagName("a")[0].getAttributeNode("data-usercard-mid").value;

id_set.add(id);

}

console.log("全部數(shù)據(jù)加載完畢");

console.log("總共"+name_set.size+"名用戶");

// 生成隨機(jī)數(shù),直接打印中獎(jiǎng)?wù)咝畔?/span>

var lucky_num = parseInt(Math.random()*(name_set.size),10);

console.log("中獎(jiǎng)用戶ID為:"+Array.from(id_set)[lucky_num]);

console.log("中獎(jiǎng)用戶名為:"+Array.from(name_set)[lucky_num]);

// 這就是注釋

//return false;

}


// 開始自動(dòng)下滑 r_time毫秒一次

my_loop = setInterval(r, r_time);


3.1新版本多人抽?。ㄟm應(yīng)b站動(dòng)態(tài)改動(dòng))

數(shù)據(jù)加載完畢后,使用 go(中獎(jiǎng)人數(shù)) 即可抽取

console.log("程序開始運(yùn)行");

console.log("定義集合存儲(chǔ)數(shù)據(jù)");

let name_set = new Set();

let id_set = new Set();

console.log("開始載入數(shù)據(jù)");


// 循環(huán)變量

var my_loop;

// 下滑延時(shí) 500毫秒 網(wǎng)速/加載速度較慢的朋友們最好放慢速度 提高準(zhǔn)確性

var r_time = 500;


// 評(píng)論數(shù)

var comment_num = 1;

if(document.getElementsByClassName("text-offset")[1].innerText.indexOf("萬(wàn)") != -1)

{

comment_num = 10000 * (parseInt(document.getElementsByClassName("text-offset")[1].innerText) + 1);

}

else

{

comment_num = parseInt(document.getElementsByClassName("text-offset")[1].innerText);

}


// 下滑

function r()

{

window.scroll(0, 1920*comment_num);

// 沒(méi)有評(píng)論后自動(dòng)停止下滑 并 抽獎(jiǎng)

if(document.getElementsByClassName("loading-state")[0].innerText == "沒(méi)有更多評(píng)論")

{

// 停止下滑循環(huán)

stop_r();

// 抽獎(jiǎng)函數(shù)

draw();

}

}


// 停止下滑循環(huán)

function stop_r()

{

clearInterval(my_loop);

}


// 抽獎(jiǎng)函數(shù)

function draw()

{

? ? // 循環(huán)次數(shù)

? ? var len = document.getElementsByClassName("con").length;

for(var i=0; i<len; i++)

{

var name = document.getElementsByClassName("con")[i].getElementsByClassName("user")[0].getElementsByTagName("a")[0].innerText;

// console.log(name+",加入集合");

name_set.add(name);

var id = document.getElementsByClassName("con")[i].getElementsByClassName("user")[0].getElementsByTagName("a")[0].getAttributeNode("data-usercard-mid").value;

id_set.add(id);

}

console.log("全部數(shù)據(jù)加載完畢");

console.log("總共"+name_set.size+"名用戶");

// 這就是注釋

//return false;

}


// 獲取幸運(yùn)兒

function go(num)

{

for(var i=0; i<num; i++)

{

// 生成隨機(jī)數(shù),直接打印中獎(jiǎng)?wù)咝畔?/span>

var lucky_num = parseInt(Math.random()*(name_set.size), 10);


console.log(" ");

console.log("中獎(jiǎng)用戶ID為:"+Array.from(id_set)[lucky_num]);

console.log("中獎(jiǎng)用戶名為:"+Array.from(name_set)[lucky_num]);

console.log(" ");

}

}


// 開始自動(dòng)下滑 r_time毫秒一次

my_loop = setInterval(r, r_time);


// 全部數(shù)據(jù)加載完畢后,使用 go(中獎(jiǎng)數(shù)) 抽取中獎(jiǎng)?wù)?/span>


JS實(shí)現(xiàn)b站動(dòng)態(tài)抽獎(jiǎng)“公平”方案——?jiǎng)討B(tài)+轉(zhuǎn)發(fā)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
河南省| 满城县| 莆田市| 缙云县| 抚州市| 绍兴县| 常州市| 淮北市| 德江县| 平江县| 富顺县| 庆云县| 绥江县| 温泉县| 尚义县| 南通市| 巢湖市| 察哈| 临城县| 九江市| 湘潭县| 韶山市| 江阴市| 莱州市| 乌兰浩特市| 咸丰县| 武陟县| 阜康市| 华安县| 仁寿县| 卫辉市| 莎车县| 海口市| 诏安县| 勐海县| 平舆县| 上栗县| 海南省| 青河县| 太康县| 宽甸|