您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
获取大乐斗cookies并执行请求
// ==UserScript== // @name 获取大乐斗cookies // @namespace http://tampermonkey.net/ // @version 1.0 // @description 获取大乐斗cookies并执行请求 // @author You // @include https://dld.qzapp.z.qq.com/* // @grant GM_setClipboard // ==/UserScript== (function() { 'use strict'; const cookieNames = ['RK', 'ptcz', 'openId', 'accessToken', 'newuin']; let requestIntervalId = null; let isRunning = false; function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); } function createRequestControls() { const controlsContainer = document.createElement('div'); controlsContainer.style.position = 'fixed'; controlsContainer.style.bottom = '60px'; controlsContainer.style.right = '10px'; controlsContainer.style.zIndex = '10000'; controlsContainer.style.backgroundColor = '#f0f0f0'; controlsContainer.style.padding = '15px'; controlsContainer.style.border = '1px solid #ccc'; controlsContainer.style.borderRadius = '5px'; controlsContainer.style.display = 'flex'; controlsContainer.style.flexDirection = 'column'; controlsContainer.style.gap = '10px'; controlsContainer.id = 'controlsContainer'; // 标题栏 const header = document.createElement('div'); header.style.cursor = 'move'; header.style.fontWeight = 'bold'; header.style.marginBottom = '6px'; header.textContent = '大乐斗请求面板(双击重置)'; controlsContainer.appendChild(header); // --- 创建控件(保持原样) --- const urlInputLabel = document.createElement('label'); urlInputLabel.innerHTML = '请求 URL:'; urlInputLabel.style.display = 'block'; urlInputLabel.style.marginBottom = '5px'; urlInputLabel.style.fontSize = '14px'; const urlInput = document.createElement('input'); urlInput.type = 'text'; urlInput.placeholder = '粘贴要执行的链接到此处'; urlInput.style.width = '250px'; urlInput.style.padding = '8px'; urlInput.style.border = '1px solid #ccc'; urlInput.style.borderRadius = '3px'; const countLabel = document.createElement('label'); countLabel.innerHTML = '执行次数:'; countLabel.style.display = 'block'; countLabel.style.marginBottom = '5px'; countLabel.style.fontSize = '14px'; const countInput = document.createElement('input'); countInput.type = 'number'; countInput.min = '1'; countInput.value = '10'; countInput.style.width = '80px'; countInput.style.padding = '8px'; countInput.style.border = '1px solid #ccc'; countInput.style.borderRadius = '3px'; const intervalLabel = document.createElement('label'); intervalLabel.innerHTML = '间隔 (秒):'; intervalLabel.style.display = 'block'; intervalLabel.style.marginBottom = '5px'; intervalLabel.style.fontSize = '14px'; const intervalInput = document.createElement('input'); intervalInput.type = 'number'; intervalInput.min = '0'; intervalInput.value = '1'; intervalInput.style.width = '80px'; intervalInput.style.padding = '8px'; intervalInput.style.border = '1px solid #ccc'; intervalInput.style.borderRadius = '3px'; const toggleButton = document.createElement('button'); toggleButton.innerHTML = '开始请求'; toggleButton.style.padding = '10px'; toggleButton.style.backgroundColor = '#28a745'; toggleButton.style.color = '#ffffff'; toggleButton.style.border = 'none'; toggleButton.style.borderRadius = '5px'; toggleButton.style.cursor = 'pointer'; toggleButton.style.fontSize = '14px'; const statusDisplay = document.createElement('div'); statusDisplay.innerHTML = '状态: 空闲'; statusDisplay.style.fontSize = '12px'; statusDisplay.style.marginTop = '5px'; statusDisplay.style.color = '#555'; const button = document.createElement('button'); button.innerHTML = '获取会话'; button.style.zIndex = '10000'; button.style.backgroundColor = '#00a2d8'; button.style.color = '#ffffff'; button.style.border = 'none'; button.style.padding = '10px'; button.style.cursor = 'pointer'; button.style.fontSize = '14px'; button.style.borderRadius = '5px'; document.body.appendChild(button); button.addEventListener('click', () => { let extractedCookies = []; cookieNames.forEach(name => { const value = getCookie(name); if (value !== undefined) { extractedCookies.push(`${name}=${value}`); } }); const cookieString = extractedCookies.join('; '); if (cookieString) { console.log(`Cookies : ${cookieString}`); GM_setClipboard(cookieString); alert(`成功复制会话信息到粘贴板`); } else { alert('Cookies匹配失败'); } }); controlsContainer.appendChild(button); controlsContainer.appendChild(urlInputLabel); controlsContainer.appendChild(urlInput); controlsContainer.appendChild(countLabel); controlsContainer.appendChild(countInput); controlsContainer.appendChild(intervalLabel); controlsContainer.appendChild(intervalInput); controlsContainer.appendChild(toggleButton); controlsContainer.appendChild(statusDisplay); document.body.appendChild(controlsContainer); // 悬浮开关按钮 const togglePanelBtn = document.createElement('div'); togglePanelBtn.innerHTML = '☰'; togglePanelBtn.style.position = 'fixed'; togglePanelBtn.style.bottom = '10px'; togglePanelBtn.style.right = '10px'; togglePanelBtn.style.width = '40px'; togglePanelBtn.style.height = '40px'; togglePanelBtn.style.borderRadius = '50%'; togglePanelBtn.style.backgroundColor = '#007bff'; togglePanelBtn.style.color = '#fff'; togglePanelBtn.style.display = 'flex'; togglePanelBtn.style.alignItems = 'center'; togglePanelBtn.style.justifyContent = 'center'; togglePanelBtn.style.cursor = 'pointer'; togglePanelBtn.style.fontSize = '20px'; togglePanelBtn.style.zIndex = '10001'; document.body.appendChild(togglePanelBtn); togglePanelBtn.addEventListener('click', () => { if (controlsContainer.style.display === 'none') { controlsContainer.style.display = 'flex'; savePosition(true); } else { controlsContainer.style.display = 'none'; savePosition(false); } }); // --- 拖动功能 --- let isDragging = false; let offsetX = 0, offsetY = 0; function startDrag(x, y) { const rect = controlsContainer.getBoundingClientRect(); offsetX = x - rect.left; offsetY = y - rect.top; controlsContainer.style.left = rect.left + 'px'; controlsContainer.style.top = rect.top + 'px'; controlsContainer.style.removeProperty('bottom'); controlsContainer.style.removeProperty('right'); isDragging = true; } function doDrag(x, y) { if (!isDragging) return; let newLeft = x - offsetX; let newTop = y - offsetY; newLeft = Math.max(0, Math.min(window.innerWidth - controlsContainer.offsetWidth, newLeft)); newTop = Math.max(0, Math.min(window.innerHeight - controlsContainer.offsetHeight, newTop)); controlsContainer.style.left = newLeft + 'px'; controlsContainer.style.top = newTop + 'px'; } function endDrag() { isDragging = false; } header.addEventListener('mousedown', e => startDrag(e.clientX, e.clientY)); header.addEventListener('dblclick', () => { controlsContainer.style.removeProperty('left'); controlsContainer.style.removeProperty('top'); controlsContainer.style.bottom = '60px'; controlsContainer.style.right = '10px'; }); document.addEventListener('mousemove', e => doDrag(e.clientX, e.clientY)); document.addEventListener('mouseup', endDrag); // --- 保存/恢复状态 --- function savePosition(hidden = false) { localStorage.setItem('PanelState', JSON.stringify({ hidden: hidden })); } // 页面加载时恢复状态 const saved = JSON.parse(localStorage.getItem('PanelState') || '{}'); if (saved.hidden) { controlsContainer.style.display = 'none'; } // --- 保留原来的请求逻辑 --- toggleButton.addEventListener('click', async () => { const urlToFetch = urlInput.value.trim(); const repeatCount = parseInt(countInput.value, 10); const intervalSeconds = parseInt(intervalInput.value, 10); const intervalMilliseconds = intervalSeconds * 1000; if (!urlToFetch) { alert('请输入要请求的 URL!'); return; } if (isNaN(repeatCount) || repeatCount < 1) { alert('执行次数至少为1'); return; } if (isNaN(intervalMilliseconds) || intervalMilliseconds < 0) { alert('间隔至少为0秒'); return; } if (isRunning) { clearInterval(requestIntervalId); isRunning = false; toggleButton.innerHTML = '开始请求'; toggleButton.style.backgroundColor = '#28a745'; statusDisplay.innerHTML = '状态: 已停止'; return; } isRunning = true; toggleButton.innerHTML = '停止请求'; toggleButton.style.backgroundColor = '#dc3545'; statusDisplay.innerHTML = `状态: 运行中... (剩余 ${repeatCount} 次)`; let currentCount = 0; const requestLoop = async () => { if (currentCount >= repeatCount) { clearInterval(requestIntervalId); isRunning = false; toggleButton.innerHTML = '开始请求'; toggleButton.style.backgroundColor = '#28a745'; statusDisplay.innerHTML = '状态: 空闲'; alert('所有请求已完成!'); return; } try { let authHeader = ''; cookieNames.forEach(name => { const value = getCookie(name); if (value !== undefined) { authHeader += authHeader ? `; ${name}=${value}` : `${name}=${value}`; } }); const headers = { 'User-Agent': navigator.userAgent, 'Referer': window.location.href, 'Cookie': authHeader }; const response = await fetch(urlToFetch, { method: 'GET', headers }); const text = await response.text(); console.log(`[${currentCount + 1}/${repeatCount}] 响应: `, text.substring(0,100) + '...'); } catch (e) { console.error(e); statusDisplay.innerHTML = `状态: 请求失败! ${e.message}`; } currentCount++; statusDisplay.innerHTML = `状态: 运行中... (剩余 ${repeatCount - currentCount} 次)`; }; await requestLoop(); if (currentCount < repeatCount) requestIntervalId = setInterval(requestLoop, intervalMilliseconds); }); } window.addEventListener('load', () => { createRequestControls(); }); })();