输入多个坐标和时间间隔实现自动化点击,支持修改和删除,任务管理面板优化
// ==UserScript== // @name 鼠标自动化操作 // @namespace http://tampermonkey.net/ // @version 0.8 // @description 输入多个坐标和时间间隔实现自动化点击,支持修改和删除,任务管理面板优化 // @author heiyu // @match *://*/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // 创建固定的 UI 框 const positionBox = document.createElement('div'); Object.assign(positionBox.style, { position: 'fixed', bottom: '10px', right: '10px', width: '350px', height: '400px', backgroundColor: 'rgba(0, 0, 0, 0.7)', color: 'white', borderRadius: '5px', zIndex: '1000', fontFamily: 'Arial, sans-serif', fontSize: '14px', cursor: 'move', display: 'flex', flexDirection: 'column', }); document.body.appendChild(positionBox); // 添加标题 const title = document.createElement('div'); title.textContent = '鼠标自动化操作'; Object.assign(title.style, { fontSize: '16px', fontWeight: 'bold', marginBottom: '10px', padding: '5px', }); positionBox.appendChild(title); // 显示当前鼠标位置 const mousePositionDisplay = document.createElement('div'); Object.assign(mousePositionDisplay.style, { marginBottom: '10px', padding: '5px', }); positionBox.appendChild(mousePositionDisplay); document.addEventListener('mousemove', event => { mousePositionDisplay.textContent = `捕获的位置: x: ${event.clientX}, y: ${event.clientY}`; }); // 添加任务输入区域 const inputContainer = document.createElement('div'); Object.assign(inputContainer.style, { marginBottom: '10px', padding: '5px', }); positionBox.appendChild(inputContainer); const coordXInput = createInput('输入捕获到的x坐标'); const coordYInput = createInput('输入捕获到的y坐标'); const countdownInput = createInput('鼠标点击的时间间隔(毫秒)'); inputContainer.appendChild(coordXInput); inputContainer.appendChild(coordYInput); inputContainer.appendChild(countdownInput); const addButton = createButton('添加任务', () => { const x = parseInt(coordXInput.value, 10); const y = parseInt(coordYInput.value, 10); const countdown = parseInt(countdownInput.value, 10); if (isNaN(x) || isNaN(y) || isNaN(countdown)) { alert('请输入有效的坐标和时间间隔。'); return; } addTask(x, y, countdown); }); const executeButton = createButton('开始执行', executeTasks); inputContainer.appendChild(addButton); inputContainer.appendChild(executeButton); // 添加任务列表容器 const taskListContainer = document.createElement('div'); Object.assign(taskListContainer.style, { flex: '1', overflowY: 'auto', padding: '5px', backgroundColor: 'rgba(50, 50, 50, 0.9)', borderRadius: '5px', }); positionBox.appendChild(taskListContainer); // 添加任务列表 const taskList = document.createElement('div'); taskListContainer.appendChild(taskList); // 任务队列 const tasks = []; // 添加任务到队列并更新显示 function addTask(x, y, countdown) { tasks.push({ x, y, countdown }); updateTaskList(); } // 更新任务列表显示 function updateTaskList() { taskList.innerHTML = ''; tasks.forEach((task, index) => { const taskDiv = document.createElement('div'); taskDiv.textContent = `任务${index + 1}: x:${task.x}, y:${task.y}, t:${task.countdown}ms`; const modifyButton = createButton('修改', () => modifyTask(index)); const deleteButton = createButton('删除', () => deleteTask(index)); taskDiv.appendChild(modifyButton); taskDiv.appendChild(deleteButton); Object.assign(taskDiv.style, { marginBottom: '5px', padding: '5px', border: '1px solid #666', borderRadius: '3px', }); taskList.appendChild(taskDiv); }); } // 修改任务 function modifyTask(index) { const task = tasks[index]; const newX = prompt('输入新的 x 坐标', task.x); const newY = prompt('输入新的 y 坐标', task.y); const newCountdown = prompt('输入新的时间间隔(毫秒)', task.countdown); if (newX !== null && newY !== null && newCountdown !== null) { tasks[index] = { x: parseInt(newX, 10), y: parseInt(newY, 10), countdown: parseInt(newCountdown, 10) }; updateTaskList(); } } // 删除任务 function deleteTask(index) { tasks.splice(index, 1); updateTaskList(); } // 执行任务 function executeTasks() { let delay = 0; tasks.forEach(task => { delay += task.countdown; setTimeout(() => simulateMouseClick(task.x, task.y), delay); }); } // 模拟鼠标点击 function simulateMouseClick(x, y) { const event = new MouseEvent('click', { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y, }); const target = document.elementFromPoint(x, y); if (target) { target.dispatchEvent(event); } } // 工具函数:创建输入框 function createInput(placeholder) { const input = document.createElement('input'); Object.assign(input.style, { display: 'block', marginBottom: '5px', width: 'calc(100% - 10px)', }); input.type = 'number'; input.placeholder = placeholder; return input; } // 工具函数:创建按钮 function createButton(label, onClick) { const button = document.createElement('button'); button.textContent = label; Object.assign(button.style, { display: 'inline-block', margin: '5px 5px 0 0', padding: '5px 10px', backgroundColor: '#007bff', color: 'white', border: 'none', borderRadius: '5px', cursor: 'pointer', }); button.addEventListener('click', onClick); return button; } // 使 UI 可拖动 positionBox.onmousedown = function(event) { const shiftX = event.clientX - positionBox.getBoundingClientRect().left; const shiftY = event.clientY - positionBox.getBoundingClientRect().top; function moveAt(pageX, pageY) { positionBox.style.left = pageX - shiftX + 'px'; positionBox.style.top = pageY - shiftY + 'px'; } function onMouseMove(event) { moveAt(event.pageX, event.pageY); } document.addEventListener('mousemove', onMouseMove); positionBox.onmouseup = function() { document.removeEventListener('mousemove', onMouseMove); positionBox.onmouseup = null; }; }; positionBox.ondragstart = () => false; })();