获取ChatGPT SessionToken

一键获取并复制OpenAI聊天的SessionToken,简化用户操作。

// ==UserScript==
// @name         获取ChatGPT SessionToken
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  一键获取并复制OpenAI聊天的SessionToken,简化用户操作。
// @author       Flyrr & Yongmo & lyy0709 & GPT-4
// @match        https://chatgpt.com/*
// @grant        GM_xmlhttpRequest
// @grant        GM_setClipboard
// @grant        GM_addStyle
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 创建一个悬浮面板
    const panel = document.createElement('div');
    panel.style.cssText = 'position: fixed; top: 20px; right: 20px; z-index: 1000; padding: 15px; border: 1px solid #ccc; border-radius: 12px; background: white; box-shadow: 0 4px 8px rgba(0,0,0,0.3); font-family: "Microsoft YaHei", sans-serif; display: none; flex-direction: column; align-items: start;';

    // 创建展开面板按钮
    const toggleButton = document.createElement('button');
    toggleButton.textContent = '☰';
    toggleButton.style.cssText = 'position: fixed; top: 20px; right: 20px; z-index: 1100; padding: 4px 8px; background: #007bff; color: white; cursor: pointer; font-size: 24px; border-radius: 6px; display: block;';

    // 创建操作按钮
    const btnFetchAndCopy = document.createElement('button');
    btnFetchAndCopy.textContent = '获取并复制SessionToken';
    btnFetchAndCopy.style.cssText = 'margin-bottom: 10px; padding: 8px 15px; border: none; border-radius: 6px; color: white; cursor: pointer; font-size: 16px; width: 100%; text-align: center; background-color: #007bff;';

    // 创建文本显示区域
    const tokenDisplay = document.createElement('textarea');
    tokenDisplay.style.cssText = 'width: 100%; height: 60px; margin-bottom: 10px; padding: 10px; border-radius: 6px; border: 1px solid #ccc;';

    // 隐藏面板按钮
    const btnHidePanel = document.createElement('button');
    btnHidePanel.textContent = '隐藏面板';
    btnHidePanel.style.cssText = 'margin-bottom: 10px; padding: 8px 15px; border: none; border-radius: 6px; color: white; cursor: pointer; font-size: 16px; width: 100%; text-align: center; background-color: #ffc107;';
    btnHidePanel.onclick = function() {
        panel.style.display = 'none';
        toggleButton.style.display = 'block';
    };

    // 将元素添加到面板
    panel.appendChild(tokenDisplay);
    panel.appendChild(btnFetchAndCopy);
    panel.appendChild(btnHidePanel);
    document.body.appendChild(panel);
    document.body.appendChild(toggleButton);

    // Toggle panel display
    toggleButton.onclick = function() {
        panel.style.display = (panel.style.display === 'none') ? 'flex' : 'none';
        toggleButton.style.display = (panel.style.display === 'flex') ? 'none' : 'block';
    };

    // 按钮点击事件:获取并复制Token
    btnFetchAndCopy.onclick = function() {
        GM_xmlhttpRequest({
            method: "GET",
            url: "https://chatgpt.com/chat",
            onload: function(response) {
                const cookieHeader = response.responseHeaders;
                const match = cookieHeader.match(/__Secure-next-auth.session-token=([^;]+);/);
                if (match && match[1]) {
                    const sessionToken = match[1];
                    tokenDisplay.value = sessionToken;
                    GM_setClipboard(sessionToken, 'text');
                    alert('Session Token 已复制到剪贴板:\n' + sessionToken);
                } else {
                    alert('Session Token 未找到。可能是因为浏览器安全策略限制了头部信息的获取。');
                }
            },
            onerror: function() {
                alert('Failed to fetch session information.');
            }
        });
    };
})();