JS實現b站動態抽獎“公平”方案——動態+轉發

視頻演示+講解

b站“動態抽獎” 較公平方案 講解


傳送門

前期

因爲非官方途徑無法獲取全部的轉發人員信息,但評論的人員信息可以全部獲取(暫時看來一百多頁加載都沒有問題)
參考鏈接:JS實現b站動態轉發抽獎(小人數)新方案講解
JS實現b站動態評論區抽獎(含去重)

公平抽獎實現方案講解

因爲評論獲取數是全的,那麼只需要轉發+評論雙管齊下,就可以通過在評論區抽獎,再對中獎用戶的動態繼續檢索,中獎者會有評論時間,當天查看他的動態是否有轉發抽獎動態,從而判斷其資格。

抽獎代碼

打開“動態”,保持評論第一頁,鼠標右鍵打開“檢查”,來到“console”,貼入代碼運行即可。
代碼如下:

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

// 抽獎函數
function draw()
{
    // 循環次數
	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+"頁數據存入Set完畢");
	if(null != document.getElementsByClassName("next")[0])
	{
		page++;
		console.log("自動翻頁...");
		document.getElementsByClassName("next")[0].click();
		//return true;
	}
	else
	{
		console.log("全部數據加載完畢");
		console.log("總共"+name_set.size+"名用戶");
		// 生成隨機數,直接打印中獎者信息
		var lucky_num = parseInt(Math.random()*(name_set.size),10);
		console.log("中獎用戶ID爲:"+Array.from(id_set)[lucky_num]);
		console.log("中獎用戶名爲:"+Array.from(name_set)[lucky_num]);
		console.log("中獎者大概位於 第" +parseInt(lucky_num/20+1)+ "頁");
		clearInterval(my_loop);
		// 這就是註釋
		//return false;
	}
}

// 定時調用函數
my_loop = setInterval(draw, 1500);

在這裏插入圖片描述

相關問題

最後一行my_loop = setInterval(draw, 1500);,這裏的1500代表毫秒數,你可以修改這個數字來實現延長自動翻頁時間差,因爲翻頁加載數據會受網絡影響,網速慢的話,數據加載慢,可能會丟失數據,所以可以相對的延長翻頁時間。
如果打印的內容不需要,可以註釋掉相關 console.log代碼,註釋就是在這個代碼前加 //,這2個反斜槓就是註釋。註釋後就不會打印了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章