視頻演示+講解
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個反斜槓就是註釋。註釋後就不會打印了。