大善人又发了1000抽奖积分了,一次一次点太慢了,于是让AI搓了个自动抽奖的脚本。
// ==UserScript==// @name Alice 抽奖脚本// @namespace http://tampermonkey.net/// @version 3.0// @description Alice 抽奖脚本// @author Gemini// @match *://*/lottery/pool*// @grant GM_addStyle// @run-at document-idle// ==/UserScript==(function() { 'use strict'; // ================= 全局状态变量 ================= let isAutoDrawing = false; // 脚本是否正在执行自动抽奖 let targetDraws = 0; // 目标抽奖次数 let drawCount = 0; // 当前已抽奖次数 let intervalId = null; // 定时器ID // ================= 核心抽奖逻辑 ================= function autoDraw() { // 1. 如果当前不是抽奖状态,则直接退出 if (!isAutoDrawing) { return; } // 2. 检查是否已达到目标次数 if (drawCount >= targetDraws) { console.log(`任务完成: 已成功抽奖 ${drawCount} / ${targetDraws} 次。`); stopAutoDraw(); return; } // 3. 检查“抽奖中”弹窗,避免重复点击 const isDrawingModalVisible = document.querySelector('#drawModal.show'); if (isDrawingModalVisible) { console.log('抽奖进行中,等待...'); return; } // 4. 寻找可用的抽奖按钮 const availableDrawButton = document.querySelector('.draw-button:not(:disabled)'); if (availableDrawButton) { drawCount++; updateStatus(`抽奖中... (${drawCount} / ${targetDraws})`); console.log(`正在进行第 ${drawCount} / ${targetDraws} 次抽奖...`); availableDrawButton.click(); } else { // 如果找不到按钮,说明积分用尽,任务提前结束 console.log('找不到可用的抽奖按钮(可能积分不足),任务停止。'); updateStatus(`积分不足,任务停止于第 ${drawCount} 次。`); stopAutoDraw(); } } // ================= 控制函数 ================= function startAutoDraw(limit) { if (isAutoDrawing) return; // 如果已经在抽奖,则不响应新的开始命令 isAutoDrawing = true; targetDraws = limit; drawCount = 0; // 更新按钮状态 document.getElementById('start-10').disabled = true; document.getElementById('start-20').disabled = true; document.getElementById('start-50').disabled = true; document.getElementById('stop-draw').disabled = false; updateStatus(`任务开始,目标:${limit}次`); console.log(`自动抽奖任务开始,目标次数: ${limit}`); // 立即执行一次,然后开始定时循环 autoDraw(); intervalId = setInterval(autoDraw, 5000); // 5秒检查一次 } function stopAutoDraw() { isAutoDrawing = false; clearInterval(intervalId); // 停止定时器 // 恢复按钮状态 if (document.getElementById('start-10')) { document.getElementById('start-10').disabled = false; document.getElementById('start-20').disabled = false; document.getElementById('start-50').disabled = false; document.getElementById('stop-draw').disabled = true; } updateStatus(`待命中,请选择任务。`); console.log('自动抽奖已停止。'); } // ================= UI 创建和注入 ================= function setupUI() { const container = document.createElement('div'); container.id = 'auto-draw-controller'; container.innerHTML = ` <div class="controller-title">抽奖控制器</div> <div class="button-group"> <button id="start-10" class="controller-btn start">抽奖10次</button> <button id="start-20" class="controller-btn start">抽奖20次</button> <button id="start-50" class="controller-btn start">抽奖50次</button> <button id="stop-draw" class="controller-btn stop" disabled>停止抽奖</button> </div> <div id="controller-status" class="controller-status">待命中,请选择任务。</div> `; // 寻找一个合适的位置来插入我们的UI面板 const targetElement = document.querySelector('.points-card'); if (targetElement) { targetElement.insertAdjacentElement('afterend', container); // 绑定按钮事件 document.getElementById('start-10').addEventListener('click', () => startAutoDraw(10)); document.getElementById('start-20').addEventListener('click', () => startAutoDraw(20)); document.getElementById('start-50').addEventListener('click', () => startAutoDraw(50)); document.getElementById('stop-draw').addEventListener('click', stopAutoDraw); } } function updateStatus(message) { const statusEl = document.getElementById('controller-status'); if (statusEl) { statusEl.textContent = message; } } // 添加一些CSS样式,让界面更好看 GM_addStyle(` #auto-draw-controller { background-color: #f8f9fa; border: 1px solid #dee2e6; border-radius: 16px; padding: 20px; margin-bottom: 24px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif; } .controller-title { font-size: 1.2rem; font-weight: 700; color: #0d47a1; margin-bottom: 16px; text-align: center; } .button-group { display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; } .controller-btn { border: none; padding: 12px 24px; border-radius: 12px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: all 0.2s ease-in-out; } .controller-btn.start { background: linear-gradient(135deg, #1565c0 0%, #1e88e5 100%); color: white; } .controller-btn.start:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0,0,0,0.1); } .controller-btn.stop { background: linear-gradient(135deg, #d32f2f 0%, #f44336 100%); color: white; } .controller-btn:disabled { background: #e0e0e0; cursor: not-allowed; transform: none; box-shadow: none; } .controller-status { text-align: center; margin-top: 16px; font-size: 0.95rem; color: #546e7a; font-weight: 500; background: #e3f2fd; padding: 8px; border-radius: 8px; } `); // 等待页面完全加载后再执行UI注入 window.addEventListener('load', setupUI);})();