🏠 Home 

抖音直播自动点赞-作者:1kb(云看北)

在抖音直播间自动点赞,支持自定义设置,随机点击间隔,理论其他网站也支持


Install this script?
// ==UserScript==
// @name         抖音直播自动点赞-作者:1kb(云看北)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  在抖音直播间自动点赞,支持自定义设置,随机点击间隔,理论其他网站也支持
// @author       1KB(云看北)
// @license      MIT
// @match        https://live.douyin.com/*
// @grant        none
// ==/UserScript==
(function() {
'use strict';
// 配置项
const config = {
enabled: false,
clickPosition: null,
clickInterval: 150,    // 基础点击间隔
clickDuration: 50,     // 点击持续时间
intervalVariation: 20, // 间隔波动范围(±500ms)
clickCount: 0,
isSettingPosition: false,
isPanelExpanded: false
};
// 创建控制面板
function createControlPanel() {
const mainButton = document.createElement('div');
mainButton.innerHTML = '⚙️';
mainButton.style.cssText = `
position: fixed;
top: 10px;
right: 350px;
z-index: 9999999;
width: 32px;
height: 32px;
background: rgba(0, 0, 0, 0.6);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 18px;
transition: all 0.3s;
`;
const panel = document.createElement('div');
panel.innerHTML = `
<div id="autoLikePanel" style="
position: fixed;
top: 50px;
right: 90px;
z-index: 9999998;
background: rgba(0, 0, 0, 0.8);
color: white;
padding: 10px;
border-radius: 4px;
font-size: 14px;
display: none;
flex-direction: column;
gap: 5px;
min-width: 200px;
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;">
<span style="font-weight: bold;">自动点赞设置</span>
<span id="closePanel" style="cursor: pointer; padding: 2px 6px;">×</span>
</div>
<button id="setClickArea" style="
padding: 5px;
margin: 2px;
background: #2196F3;
border: none;
color: white;
cursor: pointer;
border-radius: 4px;
">设置点击位置</button>
<div style="display: flex; align-items: center; gap: 5px; margin: 5px 0;">
<label style="flex: 1;">基础间隔(ms):</label>
<input type="number" id="intervalInput"
value="${config.clickInterval}"
min="100"
max="5000"
style="width: 70px; padding: 2px;">
</div>
<div style="display: flex; align-items: center; gap: 5px; margin: 5px 0;">
<label style="flex: 1;">间隔波动(±ms):</label>
<input type="number" id="variationInput"
value="${config.intervalVariation}"
min="0"
max="2000"
style="width: 70px; padding: 2px;">
</div>
<div style="display: flex; align-items: center; gap: 5px; margin: 5px 0;">
<label style="flex: 1;">点击持续(ms):</label>
<input type="number" id="durationInput"
value="${config.clickDuration}"
min="50"
max="1000"
style="width: 70px; padding: 2px;">
</div>
<button id="startBtn" style="
padding: 5px;
margin: 2px;
background: #fe2c55;
border: none;
color: white;
cursor: pointer;
border-radius: 4px;
">开始点赞</button>
<div style="font-size: 12px; margin-top: 5px;">
<div id="status">未设置点击位置</div>
<div id="clickCount">点击次数: 0</div>
<div id="nextClick">下次点击: - ms</div>
</div>
</div>
`;
document.body.appendChild(mainButton);
document.body.appendChild(panel);
// 绑定面板显示/隐藏事件
mainButton.addEventListener('click', () => {
const panelEl = document.getElementById('autoLikePanel');
config.isPanelExpanded = !config.isPanelExpanded;
panelEl.style.display = config.isPanelExpanded ? 'flex' : 'none';
mainButton.style.transform = config.isPanelExpanded ? 'rotate(180deg)' : 'rotate(0)';
});
document.getElementById('closePanel').addEventListener('click', () => {
config.isPanelExpanded = false;
document.getElementById('autoLikePanel').style.display = 'none';
mainButton.style.transform = 'rotate(0)';
});
bindEventHandlers();
}
// 绑定事件处理程序
function bindEventHandlers() {
document.getElementById('setClickArea').addEventListener('click', startPositionSelection);
document.getElementById('startBtn').addEventListener('click', function() {
if (!config.clickPosition) {
alert('请先设置点击位置!');
return;
}
config.enabled = !config.enabled;
this.textContent = config.enabled ? '停止点赞' : '开始点赞';
this.style.background = config.enabled ? '#ff4444' : '#fe2c55';
if (config.enabled) {
startAutoClick();
} else {
stopAutoClick();
}
});
document.getElementById('intervalInput').addEventListener('change', function() {
const value = parseInt(this.value);
if (value >= 100 && value <= 5000) {
config.clickInterval = value;
if (config.enabled) {
startAutoClick();
}
} else {
alert('基础间隔请设置在100-5000ms之间');
this.value = config.clickInterval;
}
});
document.getElementById('variationInput').addEventListener('change', function() {
const value = parseInt(this.value);
if (value >= 0 && value <= 2000) {
config.intervalVariation = value;
} else {
alert('波动范围请设置在0-2000ms之间');
this.value = config.intervalVariation;
}
});
document.getElementById('durationInput').addEventListener('change', function() {
const value = parseInt(this.value);
if (value >= 50 && value <= 1000) {
config.clickDuration = value;
} else {
alert('点击持续时间请设置在50-1000ms之间');
this.value = config.clickDuration;
}
});
}
// 开始位置选择
function startPositionSelection() {
if (config.isSettingPosition) return;
config.isSettingPosition = true;
const statusEl = document.getElementById('status');
statusEl.textContent = '请点击要点赞的位置...';
const overlay = document.createElement('div');
overlay.style.cssText = `
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: transparent;
cursor: crosshair;
z-index: 9999998;
`;
document.body.appendChild(overlay);
overlay.addEventListener('click', function handleClick(e) {
e.preventDefault();
e.stopPropagation();
config.clickPosition = {
x: e.clientX,
y: e.clientY
};
statusEl.textContent = `点击位置已设置: (${e.clientX}, ${e.clientY})`;
config.isSettingPosition = false;
overlay.remove();
}, { once: true });
}
// 获取随机间隔时间
function getRandomInterval() {
const variation = Math.random() * 2 * config.intervalVariation - config.intervalVariation;
return Math.max(100, config.clickInterval + variation);
}
// 更新下次点击时间显示
function updateNextClickTime(interval) {
const nextClickEl = document.getElementById('nextClick');
if (nextClickEl) {
nextClickEl.textContent = `下次点击: ${Math.round(interval)}ms`;
}
}
// 执行点击
async function performClick() {
if (!config.enabled || !config.clickPosition) return;
try {
const element = document.elementFromPoint(
config.clickPosition.x,
config.clickPosition.y
);
if (element) {
// 模拟鼠标按下
element.dispatchEvent(new MouseEvent('mousedown', {
bubbles: true,
cancelable: true,
view: window,
clientX: config.clickPosition.x,
clientY: config.clickPosition.y
}));
// 等待设定的持续时间
await new Promise(resolve => setTimeout(resolve, config.clickDuration));
// 模拟鼠标松开和点击
['mouseup', 'click'].forEach(eventType => {
element.dispatchEvent(new MouseEvent(eventType, {
bubbles: true,
cancelable: true,
view: window,
clientX: config.clickPosition.x,
clientY: config.clickPosition.y
}));
});
config.clickCount++;
document.getElementById('clickCount').textContent = `点击次数: ${config.clickCount}`;
}
} catch (error) {
console.error('点击失败:', error);
}
}
// 开始自动点击
function startAutoClick() {
stopAutoClick();
function scheduleNextClick() {
if (!config.enabled) return;
const nextInterval = getRandomInterval();
updateNextClickTime(nextInterval);
window.clickTimer = setTimeout(() => {
performClick();
scheduleNextClick();
}, nextInterval);
}
performClick();
scheduleNextClick();
}
// 停止自动点击
function stopAutoClick() {
if (window.clickTimer) {
clearTimeout(window.clickTimer);
window.clickTimer = null;
}
}
// 初始化
function init() {
createControlPanel();
}
// 页面加载完成后初始化
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
// 页面卸载时清理
window.addEventListener('unload', stopAutoClick);
})();