您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
检测你的弹幕是否真的发出去了
当前为
// ==UserScript== // @name 检测B站弹幕拦截 // @namespace http://tampermonkey.net/ // @version 0.1.1 // @description 检测你的弹幕是否真的发出去了 // @author 熊孩子 // @match https://live.bilibili.com/* // @grant none // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js // ==/UserScript== (function () { function main () { init() } function init () { let i = 0; let id = setInterval(() => {//设置定时器每隔半秒找一下弹幕按钮的那个元素 let element = document.querySelector("#control-panel-ctnr-box"); if (element !== null) { clearInterval(id);//销毁定时器 let button = element.childNodes[2].childNodes[0].childNodes[0]; let textarea = element.childNodes[1].childNodes[1].childNodes[0]; button.addEventListener("click", click); textarea.addEventListener("keydown", keydown); } else if (i < 100) { i++; } else { clearInterval(id);//销毁定时器 } }, 500); } function keydown (event) { //表示键盘监听所触发的事件,同时传递参数event switch (event.keyCode) { case 13: click(); break; } } function click () {//点击了发送弹幕的按钮后 let id = setInterval(() => { clearInterval(id); let uid = getuid(); let barrage = getbarrage(uid); let barrageNetwork = getbarrageNetwork(uid); barrageNetwork.then(function (data) { if (data != barrage) { prompt("你的弹幕被吞了(Ctrl+c 复制该弹幕)", barrage); } }) }, 500); } function getuid () {//获取当前登录用户的uid if (document.querySelector("#right-part") !== null) { let url = document.querySelector("#right-part").childNodes[1].childNodes[0].childNodes[0].childNodes[0].href; let uid = url.split('/')[url.split('/').length - 1] return uid; } return null; } function getbarrage (uid) {//获取当前登录用户在这个直播间发的最后一条弹幕 let barrages = document.querySelector("#chat-items").childNodes; let barrage; for (let i = barrages.length - 1; i >= 0; i--) { if (barrages[i].dataset.uid === uid) { barrage = barrages[i].dataset.danmaku return barrage } } return null; } let apiClient = axios.create({ baseURL: 'https://api.live.bilibili.com', withCredentials: true }) async function getbarrageNetwork (uid) {//获取弹幕池中当前登录用户在这个直播间发的最后一条弹幕 let roomid = window.location.pathname.slice(1); let ajaxObj = (await apiClient.get('/ajax/msg?roomid=' + roomid)).data if (ajaxObj.code === 0) { let barrageNetworks = ajaxObj.data.room; for (let i = barrageNetworks.length - 1; i >= 0; i--) { if (barrageNetworks[i].uid == uid) { let barrageNetwork = barrageNetworks[i].text return barrageNetwork; } } return null; } return null; } main() })();