在B站直播间“点赞”按钮前增加一个控制按钮,点击或按小键盘【-】键可启动持续10分钟的自动点赞(0.3秒/次),期间可再次操作提前停止。
// ==UserScript==
// @name Bilibili直播间自动点赞 (定时+按钮版)
// @namespace http://tampermonkey.net/
// @version 3.0
// @description 在B站直播间“点赞”按钮前增加一个控制按钮,点击或按小键盘【-】键可启动持续10分钟的自动点赞(0.3秒/次),期间可再次操作提前停止。
// @author Gemini
// @match https://live.bilibili.com/*
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// --- 配置项 ---
const clickInterval = 300; // 每次点击的间隔时间(毫秒),300毫秒 = 0.3秒
const duration = 10 * 60 * 1000; // 自动点赞的总时长(10分钟)
// --- 全局变量 ---
let intervalId = null; // 存储点赞定时器的ID
let stopTimeoutId = null; // 存储自动停止的定时器ID
let toggleButton = null; // 存储我们创建的按钮元素
// --- 核心功能:切换自动点赞状态 ---
function toggleAutoLike() {
if (intervalId) {
// 如果正在运行,则停止
clearInterval(intervalId);
clearTimeout(stopTimeoutId);
intervalId = null;
stopTimeoutId = null;
console.log('自动点赞已停止。');
updateButtonState(false); // 更新按钮为“未运行”状态
} else {
// 如果未运行,则启动
console.log(`自动点赞已启动,将持续10分钟。间隔: ${clickInterval}ms`);
triggerClick(); // 立即执行一次
intervalId = setInterval(triggerClick, clickInterval);
updateButtonState(true); // 更新按钮为“运行中”状态
// 设置10分钟后自动停止
stopTimeoutId = setTimeout(() => {
if (intervalId) { // 再次检查以防被手动停止
clearInterval(intervalId);
intervalId = null;
console.log('自动点赞已达到10分钟,自动停止。');
updateButtonState(false);
}
}, duration);
}
}
// --- 模拟点击操作 ---
function triggerClick() {
const likeButton = document.querySelector('.like-btn');
if (!likeButton) {
console.log('未找到点赞按钮,任务已停止。');
if(intervalId) { // 如果找不到按钮,则强制停止所有任务
toggleAutoLike();
}
} else {
likeButton.click();
}
}
// --- 更新按钮的文本和样式 ---
function updateButtonState(isRunning) {
if (toggleButton) {
if (isRunning) {
toggleButton.textContent = '停止点赞';
toggleButton.style.backgroundColor = '#e74c3c'; // 红色
toggleButton.style.borderColor = '#c0392b';
} else {
toggleButton.textContent = '自动赞10min';
toggleButton.style.backgroundColor = '#3498db'; // 蓝色
toggleButton.style.borderColor = '#2980b9';
}
}
}
// --- 创建并插入控制按钮 ---
function createToggleButton() {
// 检查按钮是否已存在,或点赞按钮还未加载
if (document.getElementById('auto-like-toggle-btn') || !document.querySelector('.like-btn')) {
return;
}
const likeButton = document.querySelector('.like-btn');
toggleButton = document.createElement('button');
toggleButton.id = 'auto-like-toggle-btn';
// 设置按钮样式
Object.assign(toggleButton.style, {
marginRight: '8px',
padding: '0 10px',
border: '1px solid',
borderRadius: '4px',
cursor: 'pointer',
fontSize: '12px',
height: likeButton.offsetHeight + 'px', // 高度与原生按钮保持一致
color: 'white',
transition: 'background-color 0.3s'
});
updateButtonState(false); // 初始化按钮状态
// 为按钮添加点击事件
toggleButton.addEventListener('click', toggleAutoLike);
// 将按钮插入到原生点赞按钮的前面
likeButton.parentNode.insertBefore(toggleButton, likeButton);
console.log('自动点赞控制按钮已加载。');
}
// --- 事件监听 ---
// 监听键盘事件
document.addEventListener('keydown', function(event) {
if (event.code === 'NumpadSubtract') {
toggleAutoLike();
}
});
// --- 初始化 ---
// B站页面是动态加载的,所以需要定时检查点赞按钮是否出现,以便插入我们的按钮
const initInterval = setInterval(() => {
if (document.querySelector('.like-btn')) {
createToggleButton();
clearInterval(initInterval); // 找到并创建按钮后,停止检查
}
}, 1000); // 每秒检查一次
})();