您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
专门针对百度网盘优化,完整提取所有Cookie(含HttpOnly)
// ==UserScript== // @name 百度网盘 Cookie 完整提取器 // @namespace http://tampermonkey.net/ // @version 4.0 // @license MIT // @description 专门针对百度网盘优化,完整提取所有Cookie(含HttpOnly) // @author Marx Engels // @match *://*.baidu.com/* // @match *://pan.baidu.com/* // @match *://yun.baidu.com/* // @grant GM_registerMenuCommand // @grant GM_setClipboard // @grant GM_notification // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant GM_cookie // @connect baidu.com // @connect pan.baidu.com // @run-at document-start // @icon https://pan.baidu.com/res/static/images/favicon.ico // ==/UserScript== (function() { 'use strict'; const DEBUG = true; // 百度关键Cookie列表 const BAIDU_CRITICAL_COOKIES = [ 'BDUSS', 'BDUSS_BFESS', // 百度通行证 'STOKEN', // 会话令牌 'PANPSC', 'PANWEB', // 网盘专用 'csrfToken', // CSRF防护 'BAIDUID', 'BIDUPSID', // 用户标识 'ndut_fmt' // 网盘格式化 ]; GM_addStyle(` .baidu-cookie-notifier { all: initial; position: fixed !important; top: 20px !important; right: 20px !important; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important; color: white !important; padding: 16px 24px !important; border-radius: 12px !important; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3) !important; z-index: 2147483647 !important; font-family: 'Segoe UI', 'Microsoft Yahei', sans-serif !important; font-size: 14px !important; font-weight: 500 !important; min-width: 200px !important; max-width: 400px !important; opacity: 0 !important; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; transform: translateX(100px) !important; border: 2px solid rgba(255, 255, 255, 0.2) !important; } .baidu-cookie-notifier.show { opacity: 1 !important; transform: translateX(0) !important; } .baidu-cookie-notifier.success { background: linear-gradient(135deg, #10b981 0%, #059669 100%) !important; } .baidu-cookie-notifier.error { background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%) !important; } .baidu-cookie-notifier.warning { background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%) !important; } .baidu-cookie-title { font-weight: 700 !important; font-size: 15px !important; margin-bottom: 6px !important; } .baidu-cookie-content { font-size: 13px !important; opacity: 0.95 !important; line-height: 1.5 !important; } .baidu-cookie-stats { margin-top: 8px !important; padding-top: 8px !important; border-top: 1px solid rgba(255, 255, 255, 0.3) !important; font-size: 12px !important; opacity: 0.9 !important; } `); function showNotification(title, content, stats = '', type = 'default', duration = 2500) { try { const existing = document.querySelector('.baidu-cookie-notifier'); if (existing) existing.remove(); const notification = document.createElement('div'); notification.className = `baidu-cookie-notifier ${type}`; notification.innerHTML = ` <div class="baidu-cookie-title">${title}</div> <div class="baidu-cookie-content">${content}</div> ${stats ? `<div class="baidu-cookie-stats">${stats}</div>` : ''} `; (document.body || document.documentElement).appendChild(notification); setTimeout(() => { notification.classList.add('show'); setTimeout(() => { notification.classList.remove('show'); setTimeout(() => notification.remove(), 300); }, duration); }, 10); } catch (e) { console.error('通知显示失败:', e); } } // 方法1: 使用GM_cookie API (Tampermonkey特有) function getCookiesViaGM(callback) { if (typeof GM_cookie === 'undefined') { if (DEBUG) console.log('GM_cookie API不可用'); callback(null); return; } const domain = window.location.hostname; const allDomains = [ domain, '.baidu.com', 'pan.baidu.com', '.pan.baidu.com' ]; let allCookies = []; let processed = 0; allDomains.forEach(d => { GM_cookie.list({ domain: d }, (cookies, error) => { if (!error && cookies) { allCookies = allCookies.concat(cookies); } processed++; if (processed === allDomains.length) { // 去重 const uniqueCookies = Array.from( new Map(allCookies.map(c => [c.name, c])).values() ); callback(uniqueCookies); } }); }); } // 方法2: document.cookie function getDocumentCookies() { const cookieString = document.cookie; if (!cookieString) return []; return cookieString.split(';').map(cookie => { const [name, ...valueParts] = cookie.split('='); return { name: name.trim(), value: valueParts.join('=').trim(), source: 'document.cookie' }; }).filter(c => c.name); } // 方法3: 通过请求拦截 function interceptRequestCookies() { const cookies = []; const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(...args) { this.addEventListener('load', function() { const setCookie = this.getAllResponseHeaders().match(/^set-cookie:(.*)$/gim); if (setCookie) { setCookie.forEach(header => { const cookieString = header.substring(12).trim(); const [nameValue] = cookieString.split(';'); const [name, ...valueParts] = nameValue.split('='); if (name) { cookies.push({ name: name.trim(), value: valueParts.join('=').trim(), source: 'xhr-intercept' }); } }); } }); return originalOpen.apply(this, args); }; return cookies; } // 主提取函数 function extractAllCookies(callback) { showNotification( '🔄 正在提取...', '正在从多个来源收集Cookie', '', 'default', 1000 ); const results = { document: getDocumentCookies(), gm: null, merged: [] }; // 尝试使用GM_cookie getCookiesViaGM((gmCookies) => { if (gmCookies) { results.gm = gmCookies.map(c => ({ name: c.name, value: c.value, httpOnly: c.httpOnly || false, secure: c.secure || false, source: 'GM_cookie' })); } // 合并所有Cookie const cookieMap = new Map(); // 优先使用GM_cookie结果(更完整) if (results.gm) { results.gm.forEach(c => cookieMap.set(c.name, c)); } // 补充document.cookie中的 results.document.forEach(c => { if (!cookieMap.has(c.name)) { cookieMap.set(c.name, c); } }); results.merged = Array.from(cookieMap.values()); callback(results); }); } // 格式化为标准Cookie字符串 function formatCookieString(cookies) { return cookies.map(c => `${c.name}=${c.value}`).join('; '); } // 分析Cookie完整性 function analyzeCookies(results) { const merged = results.merged; const criticalFound = BAIDU_CRITICAL_COOKIES.filter(name => merged.some(c => c.name === name) ); const criticalMissing = BAIDU_CRITICAL_COOKIES.filter(name => !merged.some(c => c.name === name) ); const httpOnlyCount = merged.filter(c => c.httpOnly).length; const secureCount = merged.filter(c => c.secure).length; return { total: merged.length, criticalFound: criticalFound.length, criticalMissing: criticalMissing.length, httpOnlyCount, secureCount, missingCookies: criticalMissing, completeness: (criticalFound.length / BAIDU_CRITICAL_COOKIES.length * 100).toFixed(0) }; } // 完整提取功能 function fullExtract() { extractAllCookies((results) => { const cookieString = formatCookieString(results.merged); const analysis = analyzeCookies(results); if (cookieString) { GM_setClipboard(cookieString, 'text'); const type = analysis.completeness >= 80 ? 'success' : 'warning'; showNotification( `✅ 已复制 ${analysis.total} 个Cookie`, `关键Cookie: ${analysis.criticalFound}/${BAIDU_CRITICAL_COOKIES.length}`, `完整度: ${analysis.completeness}% | HttpOnly: ${analysis.httpOnlyCount} | Secure: ${analysis.secureCount}`, type, 3000 ); if (DEBUG) { console.group('%c 🍪 百度Cookie完整提取报告', 'color: #667eea; font-weight: bold; font-size: 16px'); console.log('%c 📊 统计信息', 'color: #10b981; font-weight: bold'); console.log('总数量:', analysis.total); console.log('关键Cookie:', `${analysis.criticalFound}/${BAIDU_CRITICAL_COOKIES.length}`); console.log('HttpOnly:', analysis.httpOnlyCount); console.log('Secure:', analysis.secureCount); console.log('完整度:', analysis.completeness + '%'); if (analysis.missingCookies.length > 0) { console.log('%c ⚠️ 缺失的关键Cookie:', 'color: #f59e0b; font-weight: bold'); analysis.missingCookies.forEach(name => console.log(' - ' + name)); } console.log('\n%c 📋 Cookie字符串 (已复制到剪贴板):', 'color: #3b82f6; font-weight: bold'); console.log(cookieString); if (results.gm) { console.log('\n%c ✅ 通过GM_cookie获取到完整Cookie (含HttpOnly)', 'color: #10b981; font-weight: bold'); console.table(results.gm.map(c => ({ 名称: c.name, 值长度: c.value.length + '字符', HttpOnly: c.httpOnly ? '✓' : '-', Secure: c.secure ? '✓' : '-', 来源: c.source }))); } else { console.log('\n%c ⚠️ GM_cookie不可用,可能缺少HttpOnly Cookie', 'color: #f59e0b; font-weight: bold'); console.log('请确保使用最新版本的Tampermonkey'); } console.groupEnd(); } } else { showNotification( '❌ 提取失败', '当前页面没有找到Cookie', '', 'error' ); } }); } // 仅提取关键Cookie function extractCritical() { extractAllCookies((results) => { const critical = results.merged.filter(c => BAIDU_CRITICAL_COOKIES.includes(c.name) ); if (critical.length > 0) { const cookieString = formatCookieString(critical); GM_setClipboard(cookieString, 'text'); showNotification( `🎯 已复制 ${critical.length} 个关键Cookie`, BAIDU_CRITICAL_COOKIES.slice(0, 3).join(', ') + '...', `完整度: ${(critical.length/BAIDU_CRITICAL_COOKIES.length*100).toFixed(0)}%`, 'success', 2500 ); if (DEBUG) { console.log('%c 🎯 关键Cookie提取:', 'color: #667eea; font-weight: bold'); console.table(critical.map(c => ({ 名称: c.name, 值: c.value.substring(0, 30) + '...', 来源: c.source }))); } } else { showNotification( '⚠️ 未找到关键Cookie', '请确保已登录百度账号', '', 'warning' ); } }); } // 诊断功能 function runDiagnostics() { console.clear(); console.log('%c 🔬 百度Cookie诊断工具', 'font-size: 18px; font-weight: bold; color: #667eea'); console.log('\n%c 【环境检查】', 'color: #10b981; font-weight: bold; font-size: 14px'); console.log('当前URL:', window.location.href); console.log('域名:', window.location.hostname); console.log('协议:', window.location.protocol); console.log('GM_cookie可用:', typeof GM_cookie !== 'undefined' ? '✅ 是' : '❌ 否'); extractAllCookies((results) => { const analysis = analyzeCookies(results); console.log('\n%c 【Cookie统计】', 'color: #10b981; font-weight: bold; font-size: 14px'); console.log('document.cookie:', results.document.length, '个'); console.log('GM_cookie:', results.gm ? results.gm.length + '个' : '不可用'); console.log('合并后总数:', results.merged.length, '个'); console.log('HttpOnly Cookie:', analysis.httpOnlyCount, '个'); console.log('\n%c 【关键Cookie检查】', 'color: #f59e0b; font-weight: bold; font-size: 14px'); BAIDU_CRITICAL_COOKIES.forEach(name => { const found = results.merged.find(c => c.name === name); if (found) { console.log(`✅ ${name}: 已找到 (${found.source}${found.httpOnly ? ', HttpOnly' : ''})`); } else { console.log(`❌ ${name}: 缺失`); } }); console.log('\n%c 【建议】', 'color: #3b82f6; font-weight: bold; font-size: 14px'); if (analysis.completeness < 100) { console.log('• 完整度仅 ' + analysis.completeness + '%,部分关键Cookie缺失'); if (!results.gm) { console.log('• GM_cookie不可用,无法获取HttpOnly Cookie'); console.log('• 建议更新Tampermonkey到最新版本'); } if (analysis.missingCookies.length > 0) { console.log('• 缺失Cookie:', analysis.missingCookies.join(', ')); console.log('• 请确保已登录百度账号并刷新页面'); } } else { console.log('✅ Cookie完整度100%,所有关键Cookie已获取'); } console.log('\n%c 如需导出,请使用"完整提取"功能', 'color: #8b5cf6'); }); showNotification( '📊 诊断完成', '详细信息请查看控制台', '', 'success', 2000 ); } // 对比开发者工具 function compareWithDevTools() { console.clear(); console.log('%c 🔍 与开发者工具对比', 'font-size: 16px; font-weight: bold; color: #667eea'); extractAllCookies((results) => { console.log('\n%c 【提取结果】', 'color: #10b981; font-weight: bold'); console.log('脚本获取数量:', results.merged.length); console.log('Cookie字符串长度:', formatCookieString(results.merged).length); console.log('\n%c 【手动验证步骤】', 'color: #f59e0b; font-weight: bold'); console.log('1. 按F12打开开发者工具'); console.log('2. 点击 Application 标签'); console.log('3. 左侧点击 Cookies → ' + window.location.hostname); console.log('4. 数一下有多少个Cookie(包括HttpOnly的)'); console.log('5. 对比上面的"脚本获取数量"'); console.log('\n%c 如果数量一致 = 脚本获取完整 ✅', 'color: #10b981; font-weight: bold'); console.log('%c 如果开发者工具更多 = 存在HttpOnly Cookie ⚠️', 'color: #ef4444; font-weight: bold'); console.log('\n%c 【参考数据】', 'color: #3b82f6; font-weight: bold'); console.log('您提供的Cookie示例有29个,长度1847字符'); console.log('当前获取与参考对比:'); console.log(' 数量差:', 29 - results.merged.length); console.log(' 长度差:', 1847 - formatCookieString(results.merged).length); }); showNotification( '📋 对比指南已输出', '请按控制台提示操作', '', 'default', 2500 ); } // 注册菜单 function initializeScript() { GM_registerMenuCommand('🚀 完整提取所有Cookie', fullExtract); GM_registerMenuCommand('🎯 仅提取关键Cookie', extractCritical); GM_registerMenuCommand('🔬 运行诊断测试', runDiagnostics); GM_registerMenuCommand('🔍 与开发者工具对比', compareWithDevTools); if (DEBUG) { console.log('%c 百度Cookie提取器已加载', 'color: #667eea; font-weight: bold; font-size: 14px'); console.log('%c 支持完整提取HttpOnly Cookie', 'color: #10b981'); console.log('%c 使用Tampermonkey菜单选择功能', 'color: #8b5cf6'); } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initializeScript); } else { initializeScript(); } })();