您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to export ChatGPT conversations as a text file with deduplication, and clear dividers.
当前为
- // ==UserScript==
- // @name ChatGPT Conversation Exporter
- // @namespace http://tampermonkey.net/
- // @version 1.2
- // @description Adds a button to export ChatGPT conversations as a text file with deduplication, and clear dividers.
- // @match https://chat.openai.com/*
- // @match https://chatgpt.com/*
- // @icon https://chat.openai.com/favicon.ico
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- // Function to create the Export button
- function createExportButton() {
- // Check if the button already exists
- if (document.getElementById('export-conversation-button')) return;
- // Create the Export button
- const exportButton = document.createElement('button');
- exportButton.id = 'export-conversation-button';
- exportButton.innerText = 'Export Conversation';
- exportButton.style.position = 'fixed';
- exportButton.style.bottom = '100px';
- exportButton.style.right = '20px';
- exportButton.style.padding = '10px 20px';
- exportButton.style.backgroundColor = '#4CAF50';
- exportButton.style.color = 'white';
- exportButton.style.border = 'none';
- exportButton.style.borderRadius = '5px';
- exportButton.style.cursor = 'pointer';
- exportButton.style.zIndex = '1000';
- // Add hover effect
- exportButton.addEventListener('mouseover', function() {
- exportButton.style.backgroundColor = '#45a049';
- });
- exportButton.addEventListener('mouseout', function() {
- exportButton.style.backgroundColor = '#4CAF50';
- });
- // Add click event listener to the button
- exportButton.addEventListener('click', function() {
- // Array to hold conversation messages
- let conversation = [];
- // Divider between messages
- const divider = "\n____________________\n\n";
- // Select all message containers (update selector if ChatGPT changes its UI)
- const messageContainers = document.querySelectorAll('div[data-message-author-role]')
- for (let container of messageContainers) {
- let role = container.dataset.messageAuthorRole;
- // Extract/build the message text
- let messageLine = `${role}`;
- messageLine += `:\n${container.textContent}`;
- conversation.push(messageLine);
- }
- // Join messages using the divider
- const conversationText = conversation.join(divider);
- // Create a blob from the conversation text and trigger download
- const blob = new Blob([conversationText], { type: 'text/plain' });
- const link = document.createElement('a');
- link.href = window.URL.createObjectURL(blob);
- link.download = 'ChatGPT_Conversation.txt';
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- });
- // Append the button to the document body
- document.body.appendChild(exportButton);
- }
- // Function to ensure the export button remains in the DOM
- function ensureExportButton() {
- if (!document.getElementById('export-conversation-button')) {
- createExportButton();
- }
- }
- // Check every second to ensure the button is still present
- setInterval(ensureExportButton, 1000);
- // Initial creation
- createExportButton();
- })();