利用JS代碼自動刪除稿件的普通彈幕功能
事情的起因是在b站投稿了一個高級彈幕測試的視頻(av9940487),但是由于b站的彈幕池機制是新的彈幕頂?shù)襞f的彈幕,所以導(dǎo)致一些人發(fā)的高級彈幕很快就被頂?shù)袅恕?/p>
所以就想著寫個腳本來自動刪除屬性為普通的彈幕,語言用的是javascript,在chrome的控制臺就可以執(zhí)行這個腳本。
1.刪除彈幕的流程分析
判斷彈幕A是否為普通彈幕,是則選中。

點擊刪除彈幕的按鈕,彈出二次確認框。

點擊確定,成功刪除。
2.刪除彈幕相關(guān)的html代碼,js代碼2.1 選中

可通過判斷class屬性為"item-front"的標簽里是否包含“高級”兩個字來決定是否勾選該彈幕:
document.getElementsByClassName("item-font")[i].innerHTML.match("高級")
getElementsByClassName("bili-checkbox")[i+1].click()
這里i+1是由于有其他標簽也使用了“bili-checkbox”屬性。


2.2

用click函數(shù)觸發(fā)點擊“刪除彈幕”按鈕的操作:
document.getElementsByClassName("dele-btn")[0].getElementsByClassName("plain")[0].click();

點擊二次確認框:
for (i = 0; i < document.getElementsByClassName("item-attr").length; i++) { if(!document.getElementsByClassName("item-font")[i].innerHTML.match("高級")){ document.getElementsByClassName("bili-checkbox")[i+1].click(); }}document.getElementsByClassName("dele-btn")[0].getElementsByClassName("plain")[0].click();document.getElementsByClassName("bili-btn")[2].click();
但是由于控制臺執(zhí)行js的代碼速度過快,會導(dǎo)致在執(zhí)行到第7行代碼的時候,class屬性為“bili-btn”的第3個標簽還沒加載出來,所以要在執(zhí)行第7個語句之前讓其停頓一下。

利用setTimeout()方法可實現(xiàn)延遲執(zhí)行
setTimeout(function () {document.getElementsByClassName("bili-btn")[2].click(); }, 1000);
或
setTimeout("document.getElementsByClassName(\"bili-btn\")[2].click()",1000);
至此,只實現(xiàn)了單頁面的批量刪除1次,但是我們知道,假設(shè)彈幕有N頁,就必須讓以上代碼不斷運行,直到第x頁不包含普通彈幕,然后跳轉(zhuǎn)至第x+1頁繼續(xù)執(zhí)行以上刪除代碼。
3. 實現(xiàn)不斷刷新頁面,當(dāng)刪除完當(dāng)前頁的普通彈幕時,自動跳轉(zhuǎn)至下一頁
結(jié)合另一篇文章即可實現(xiàn):https://www.cnblogs.com/wujiecong/p/11549738.html
var timeout = prompt("設(shè)置刷新時間");
var current = location.href;
var page = 0;
var count = 0;
if(timeout > 0)
{
setTimeout('reload()', 1000 * timeout);
}
else
{
location.replace(current);
}
function reload()
{
setTimeout('reload()', 1000 * timeout);
if(count<10){
const regex = /pn=(\d+)/;
page = page +1;
current = current.replace(regex,"pn="+page.toString())
}
var frame = '<frameset cols=\'*\'>\n<frame src=\'' + current + '\' /></frameset>';
with(document)
{
// 引用document對象,調(diào)用write方法寫入框架,打開新窗口
write(frame);
setTimeout(function(){
count = 0
getFrames = window.frames["0"]
for (i = 0; i < getFrames.document.getElementsByClassName("item-attr").length; i++) {
if(!getFrames.document.getElementsByClassName("item-font")[i].innerHTML.match("高級")){
getFrames.document.getElementsByClassName("bili-checkbox")[i+1].click();
count = count +1;
}
}
if(count>0){
getFrames.document.getElementsByClassName("dele-btn")[0].getElementsByClassName("plain")[0].click();
setTimeout(function () {
getFrames.document.getElementsByClassName("bili-btn")[2].click();
}, 1000);
}},2000);
// 關(guān)閉上面的窗口
void(close());
};
}
總結(jié)
以上所述是小編給大家介紹的利用JS代碼自動刪除稿件的普通彈幕功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
javascript回調(diào)函數(shù)的概念理解與用法分析
這篇文章主要介紹了javascript回調(diào)函數(shù)的概念理解與用法,結(jié)合具體實例形式分析了javascript回調(diào)函數(shù)的功能、原理、使用方法與相關(guān)注意事項,需要的朋友可以參考下2017-05-05

