דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. קטגוריות בהרצה
  3. תכנות
  4. בינה מלאכותית - AI
  5. עזרה הדדית - בינה מלאכותית
  6. מדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק

מדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק

מתוזמן נעוץ נעול הועבר עזרה הדדית - בינה מלאכותית
16 פוסטים 4 כותבים 207 צפיות 6 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • I מנותק
    I מנותק
    I believe
    כתב נערך לאחרונה על ידי I believe
    #1

    שלום לכל חברי הפורום היקרים!


    ייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק

    מי מאיתנו לא מצא את עצמו מנהל שיחה ארוכה ומחכימה עם ה-AI (ג'מיני או צ'אט GPT) ורוצה לשמור את כל התוכן אצלו במחשב בצורה מסודרת? הכנתי סקריפט קטן וחכם שעושה את העבודה בשבילכם.

    הסקריפט יוסיף לכם אייקון פינתי קטן לשמירת השרשור, בלחיצה על האייקון, הסקריפט יסרוק עבורכם את כל ההודעות בשיחה, ויוריד לכם אוטומטית את כל השרשור בקובץ טקסט בסיסי מסודר למחשב.

    את הסקריפט הכנתי (בסיוע AI כמובן) לא מזמן עבורי ועבור חבר קרוב, ואני שמח לשתף אותו איתכם, תהנו גם אתם.


    הוראות התקנה

    1. יש להתקין את Tampermonkey – תוסף פופולארי לדפדפני כרום (ודומיהם), שמאפשר להריץ סקריפטים מותאמים אישית באתרים שונים. (@עדלאידע כתב כאן מדריך ברור ומפורט לתוסף).

    2. לאחר התקנת התוסף:

      • היכנסו לרשימת התוספים של הדפדפן.
      • לחצו קליק ימני על סמל תוסף Tampermonkey ובחרו: "Create a new script..." - ייפתח עורך הסקריפטים.
      • מחקו את כל התוכן הקיים.
      • הדביקו שם את הקוד המצורף.
      • שמרו את הסקריפט (Ctrl+S או דרך התפריט: קובץ > Save).

    כעת ברגע שתיכנסו לצ'אט, יופיע לכם כפתור 💾 קטן בפינה השמאלית למטה.


    הבהרות

    • הסקריפט פועל על בסיס מבנה האתרים (HTML), אם גוגל או OpenAI ישנו משמעותית את עיצוב האתר, ייתכן שיידרש עדכון לקוד.
    • ניסיתי את הסקריפט על שרשורים בני מאות הודעות וזה עבד מעולה. עם זאת, בשרשורים של אלפי הודעות היו קצת באגים, והיה צריך להפעיל אותו כמה פעמים עד שהוא הצליח לסרוק את כל השרשור מהתחלה. לא היה לי פנאי ואפשרות לסדר את זה כרגע...

    הקוד המלא

    // ==UserScript==
    // @name         AI Universal Capturer - Export ChatGPT & Gemini
    // @namespace    http://tampermonkey.net/
    // @version      1.0
    // @description  ייצוא שרשורי שיחות מ-ChatGPT ו-Gemini לקובץ טקסט מסודר וקריא
    // @author       I believe (https://mitmachim.top/user/i-believe)
    // @match        *://chatgpt.com/*
    // @match        *://gemini.google.com/*
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=openai.com
    // @grant        GM_addStyle
    // @run-at       document-idle
    // @license      MIT
    // ==/UserScript==
    
    (function() {
        'use strict';
    
        const CONFIG = {
            btnId: 'ai-universal-export-btn',
            statusId: 'ai-export-status-window',
            overlayId: 'ai-export-overlay',
            forbiddenPhrases: [
                "Gemini אמר", "אמרת", "העתקה", "share", "Share", "Like", "Dislike",
                "הצגת תשובות נוספות", "דווח על בעיה משפטית", "Report", "Copy code",
                "Regenerate", "volume_up", "thumb_up", "thumb_down", "more_vert",
                "עריכה", "הקשבה", "טוב לדעת שזה עזר!", "שמירה ב-Drive", "You", "ChatGPT"
            ]
        };
    
        function injectCSS() {
            const styleId = 'ai-capturer-style-v15-0';
            if (document.getElementById(styleId)) return;
            const css = `
                #${CONFIG.btnId} {
                    position: fixed !important; bottom: 25px !important; left: 25px !important;
                    z-index: 999999 !important;
                    width: 50px !important; height: 50px !important;
                    display: flex !important; align-items: center !important; justify-content: center !important;
                    background-color: #7dd3fc !important;
                    color: #1d4ed8 !important;
                    border: 1px solid #bae6fd !important;
                    border-radius: 12px !important;
                    cursor: pointer !important;
                    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
                    font-size: 28px !important;
                    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
                }
                #${CONFIG.btnId}:hover {
                    transform: scale(1.1);
                    box-shadow: 0 6px 20px rgba(37, 99, 235, 0.5) !important;
                }
                #${CONFIG.overlayId} {
                    position: fixed !important; top: 0; left: 0; width: 100%; height: 100%;
                    background: rgba(0,0,0,0.7) !important; z-index: 1000000 !important;
                    display: none; align-items: center; justify-content: center; backdrop-filter: blur(2px);
                }
                #${CONFIG.statusId} {
                    background: #ffffff !important; color: #1f2937 !important;
                    padding: 30px !important; border-radius: 15px !important;
                    width: 350px !important; text-align: center !important;
                    direction: rtl !important; font-family: system-ui, -apple-system, sans-serif !important;
                    box-shadow: 0 25px 50px -12px rgba(0,0,0,0.5) !important;
                }
                .ai-spinner {
                    border: 4px solid #f3f3f3; border-top: 4px solid #3b82f6;
                    border-radius: 50%; width: 40px; height: 40px;
                    animation: ai-spin 1s linear infinite; margin: 0 auto 20px;
                }
                @keyframes ai-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
            `;
            const style = document.createElement('style');
            style.id = styleId;
            style.textContent = css;
            document.head.appendChild(style);
        }
    
        function updateStatus(msg, isFinal = false) {
            let overlay = document.getElementById(CONFIG.overlayId);
            if (!overlay) {
                overlay = document.createElement('div');
                overlay.id = CONFIG.overlayId;
                const win = document.createElement('div');
                win.id = CONFIG.statusId;
                overlay.appendChild(win);
                document.body.appendChild(overlay);
            }
            overlay.style.display = 'flex';
            const win = document.getElementById(CONFIG.statusId);
            while (win.firstChild) win.removeChild(win.firstChild);
    
            if (!isFinal) {
                const spinner = document.createElement('div');
                spinner.className = 'ai-spinner';
                win.appendChild(spinner);
            } else {
                const check = document.createElement('div');
                check.textContent = '✅'; check.style.fontSize = '40px'; check.style.marginBottom = '15px';
                win.appendChild(check);
            }
    
            const title = document.createElement('div');
            title.style.fontWeight = 'bold'; title.style.fontSize = '18px'; title.style.marginBottom = '10px';
            title.textContent = isFinal ? 'ייצוא קובץ' : 'ריענון היסטוריה';
            win.appendChild(title);
    
            const content = document.createElement('div');
            content.style.fontSize = '15px'; content.style.color = '#4b5553';
            content.textContent = msg;
            win.appendChild(content);
        }
    
        function cleanAndFormatContent(el) {
            let text = el.innerText;
            if (!text) return "";
            const listItems = el.querySelectorAll('li');
            listItems.forEach(li => {
                const liText = li.innerText.trim();
                if (liText && !liText.startsWith('*')) {
                    text = text.replace(liText, `* ${liText}`);
                }
            });
            return text.split('\n')
                .map(line => line.trim())
                .filter(line => {
                    if (!line) return false;
                    return !CONFIG.forbiddenPhrases.some(phrase => line === phrase || line.includes(phrase));
                })
                .join('\n');
        }
    
        function getSmartTitle() {
            let title = "";
            const isGemini = location.hostname.includes('gemini');
            if (isGemini) {
                const topBarTitle = document.querySelector('h1, [data-test-id="conversation-title"], .conversation-title');
                if (topBarTitle) title = topBarTitle.innerText;
            } else {
                const activeChat = document.querySelector('ol li div.bg-token-sidebar-surface-active');
                if (activeChat) title = activeChat.innerText;
            }
            if (!title || title.length < 2) title = document.title;
            title = title.replace(/Gemini|ChatGPT|Google|New chat|אמרת/gi, '').trim();
            return (title || "שיחת AI").replace(/[\\/:*?"<>|]/g, '').trim();
        }
    
        const sleep = ms => new Promise(res => setTimeout(res, ms));
    
        async function runExport() {
            const chatTitle = getSmartTitle();
            const threadUrl = window.location.href;
            updateStatus("סורק את כל ההודעות בשרשור...");
    
            const isGemini = location.hostname.includes('gemini');
            const scrollContainer = isGemini ? document.querySelector('main-content-scrollable-container') || window : document.querySelector('main') || window;
            let lastCount = 0, retries = 0;
    
            while (retries < 5) {
                const selector = isGemini ? 'user-query, model-response' : 'article, [data-testid*="conversation-turn"]';
                const elements = document.querySelectorAll(selector);
                updateStatus(`סורק הודעות... זוהו: ${elements.length}`);
                if (elements.length > 0) elements[0].scrollIntoView({ behavior: 'auto', block: 'start' });
                if (scrollContainer.scrollTo) scrollContainer.scrollTo(0, 0); else window.scrollTo(0, 0);
                await sleep(1200);
                const newElements = document.querySelectorAll(selector);
                if (newElements.length > lastCount) { lastCount = newElements.length; retries = 0; }
                else { retries++; }
                if (retries > 2 && ((scrollContainer === window ? window.scrollY : scrollContainer.scrollTop) === 0)) break;
            }
    
            updateStatus("מכין את קובץ התיעוד הסופי...");
            const msgSelector = isGemini ? 'user-query, model-response' : 'article, [data-testid*="conversation-turn"]';
            const finalElements = document.querySelectorAll(msgSelector);
    
            const d = new Date();
            const dateDots = `${String(d.getDate()).padStart(2, '0')}.${String(d.getMonth() + 1).padStart(2, '0')}.${d.getFullYear()}`;
            const timeStr = `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`;
    
            let contentBuffer = `נושא: ${chatTitle}\n`;
            contentBuffer += `תאריך ייצוא: ${dateDots} | שעה: ${timeStr}\n`;
            contentBuffer += `קישור: ${threadUrl}\n`;
            contentBuffer += `${'='.repeat(60)}\n\n`;
    
            finalElements.forEach(el => {
                let role = (isGemini && (el.tagName.toLowerCase().includes('user') || el.closest('user-query'))) ||
                            (!isGemini && (el.querySelector('[data-message-author-role="user"]') || el.innerText.includes("אמרת")))
                            ? "אני" : (isGemini ? "Gemini" : "ChatGPT");
    
                const cleanText = cleanAndFormatContent(el);
    
                let fileInfo = "";
                let fileCount = 0;
                if (isGemini) {
                    fileCount = el.querySelectorAll('inline-chip, img, .image-container').length;
                } else {
                    fileCount = el.querySelectorAll('.file-attachment, [data-testid="attachment-wrapper"], img').length;
                }
    
                if (fileCount > 0) {
                    fileInfo = `\n[להודעה זו מצורפים ${fileCount} קבצים]`;
                }
    
                if (cleanText || fileCount > 0) {
                    contentBuffer += `[${role}]:\n${cleanText}${fileInfo}\n${'-'.repeat(40)}\n\n`;
                }
            });
    
            const fileName = `${dateDots} - ${chatTitle}.txt`;
            const blob = new Blob([contentBuffer.trim()], { type: 'text/plain;charset=utf-8' });
            const url = URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = fileName;
            a.click();
    
            updateStatus("הקובץ נשמר בהצלחה!", true);
            await sleep(2200);
            document.getElementById(CONFIG.overlayId).style.display = 'none';
            if (finalElements.length > 0) finalElements[finalElements.length - 1].scrollIntoView({ behavior: 'smooth' });
        }
    
        function ensureButtonExists() {
            injectCSS();
            if (document.getElementById(CONFIG.btnId)) return;
            const btn = document.createElement('button');
            btn.id = CONFIG.btnId;
            btn.textContent = '💾';
            btn.title = "ריענון וייצוא היסטוריה";
            btn.onclick = (e) => { e.preventDefault(); e.stopPropagation(); runExport(); };
            document.body.appendChild(btn);
        }
    
        setInterval(ensureButtonExists, 1000);
    })();
    

    בהצלחה!

    מייבין במקצתמ תגובה 1 תגובה אחרונה
    9
    • I I believe

      שלום לכל חברי הפורום היקרים!


      ייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק

      מי מאיתנו לא מצא את עצמו מנהל שיחה ארוכה ומחכימה עם ה-AI (ג'מיני או צ'אט GPT) ורוצה לשמור את כל התוכן אצלו במחשב בצורה מסודרת? הכנתי סקריפט קטן וחכם שעושה את העבודה בשבילכם.

      הסקריפט יוסיף לכם אייקון פינתי קטן לשמירת השרשור, בלחיצה על האייקון, הסקריפט יסרוק עבורכם את כל ההודעות בשיחה, ויוריד לכם אוטומטית את כל השרשור בקובץ טקסט בסיסי מסודר למחשב.

      את הסקריפט הכנתי (בסיוע AI כמובן) לא מזמן עבורי ועבור חבר קרוב, ואני שמח לשתף אותו איתכם, תהנו גם אתם.


      הוראות התקנה

      1. יש להתקין את Tampermonkey – תוסף פופולארי לדפדפני כרום (ודומיהם), שמאפשר להריץ סקריפטים מותאמים אישית באתרים שונים. (@עדלאידע כתב כאן מדריך ברור ומפורט לתוסף).

      2. לאחר התקנת התוסף:

        • היכנסו לרשימת התוספים של הדפדפן.
        • לחצו קליק ימני על סמל תוסף Tampermonkey ובחרו: "Create a new script..." - ייפתח עורך הסקריפטים.
        • מחקו את כל התוכן הקיים.
        • הדביקו שם את הקוד המצורף.
        • שמרו את הסקריפט (Ctrl+S או דרך התפריט: קובץ > Save).

      כעת ברגע שתיכנסו לצ'אט, יופיע לכם כפתור 💾 קטן בפינה השמאלית למטה.


      הבהרות

      • הסקריפט פועל על בסיס מבנה האתרים (HTML), אם גוגל או OpenAI ישנו משמעותית את עיצוב האתר, ייתכן שיידרש עדכון לקוד.
      • ניסיתי את הסקריפט על שרשורים בני מאות הודעות וזה עבד מעולה. עם זאת, בשרשורים של אלפי הודעות היו קצת באגים, והיה צריך להפעיל אותו כמה פעמים עד שהוא הצליח לסרוק את כל השרשור מהתחלה. לא היה לי פנאי ואפשרות לסדר את זה כרגע...

      הקוד המלא

      // ==UserScript==
      // @name         AI Universal Capturer - Export ChatGPT & Gemini
      // @namespace    http://tampermonkey.net/
      // @version      1.0
      // @description  ייצוא שרשורי שיחות מ-ChatGPT ו-Gemini לקובץ טקסט מסודר וקריא
      // @author       I believe (https://mitmachim.top/user/i-believe)
      // @match        *://chatgpt.com/*
      // @match        *://gemini.google.com/*
      // @icon         https://www.google.com/s2/favicons?sz=64&domain=openai.com
      // @grant        GM_addStyle
      // @run-at       document-idle
      // @license      MIT
      // ==/UserScript==
      
      (function() {
          'use strict';
      
          const CONFIG = {
              btnId: 'ai-universal-export-btn',
              statusId: 'ai-export-status-window',
              overlayId: 'ai-export-overlay',
              forbiddenPhrases: [
                  "Gemini אמר", "אמרת", "העתקה", "share", "Share", "Like", "Dislike",
                  "הצגת תשובות נוספות", "דווח על בעיה משפטית", "Report", "Copy code",
                  "Regenerate", "volume_up", "thumb_up", "thumb_down", "more_vert",
                  "עריכה", "הקשבה", "טוב לדעת שזה עזר!", "שמירה ב-Drive", "You", "ChatGPT"
              ]
          };
      
          function injectCSS() {
              const styleId = 'ai-capturer-style-v15-0';
              if (document.getElementById(styleId)) return;
              const css = `
                  #${CONFIG.btnId} {
                      position: fixed !important; bottom: 25px !important; left: 25px !important;
                      z-index: 999999 !important;
                      width: 50px !important; height: 50px !important;
                      display: flex !important; align-items: center !important; justify-content: center !important;
                      background-color: #7dd3fc !important;
                      color: #1d4ed8 !important;
                      border: 1px solid #bae6fd !important;
                      border-radius: 12px !important;
                      cursor: pointer !important;
                      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
                      font-size: 28px !important;
                      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
                  }
                  #${CONFIG.btnId}:hover {
                      transform: scale(1.1);
                      box-shadow: 0 6px 20px rgba(37, 99, 235, 0.5) !important;
                  }
                  #${CONFIG.overlayId} {
                      position: fixed !important; top: 0; left: 0; width: 100%; height: 100%;
                      background: rgba(0,0,0,0.7) !important; z-index: 1000000 !important;
                      display: none; align-items: center; justify-content: center; backdrop-filter: blur(2px);
                  }
                  #${CONFIG.statusId} {
                      background: #ffffff !important; color: #1f2937 !important;
                      padding: 30px !important; border-radius: 15px !important;
                      width: 350px !important; text-align: center !important;
                      direction: rtl !important; font-family: system-ui, -apple-system, sans-serif !important;
                      box-shadow: 0 25px 50px -12px rgba(0,0,0,0.5) !important;
                  }
                  .ai-spinner {
                      border: 4px solid #f3f3f3; border-top: 4px solid #3b82f6;
                      border-radius: 50%; width: 40px; height: 40px;
                      animation: ai-spin 1s linear infinite; margin: 0 auto 20px;
                  }
                  @keyframes ai-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
              `;
              const style = document.createElement('style');
              style.id = styleId;
              style.textContent = css;
              document.head.appendChild(style);
          }
      
          function updateStatus(msg, isFinal = false) {
              let overlay = document.getElementById(CONFIG.overlayId);
              if (!overlay) {
                  overlay = document.createElement('div');
                  overlay.id = CONFIG.overlayId;
                  const win = document.createElement('div');
                  win.id = CONFIG.statusId;
                  overlay.appendChild(win);
                  document.body.appendChild(overlay);
              }
              overlay.style.display = 'flex';
              const win = document.getElementById(CONFIG.statusId);
              while (win.firstChild) win.removeChild(win.firstChild);
      
              if (!isFinal) {
                  const spinner = document.createElement('div');
                  spinner.className = 'ai-spinner';
                  win.appendChild(spinner);
              } else {
                  const check = document.createElement('div');
                  check.textContent = '✅'; check.style.fontSize = '40px'; check.style.marginBottom = '15px';
                  win.appendChild(check);
              }
      
              const title = document.createElement('div');
              title.style.fontWeight = 'bold'; title.style.fontSize = '18px'; title.style.marginBottom = '10px';
              title.textContent = isFinal ? 'ייצוא קובץ' : 'ריענון היסטוריה';
              win.appendChild(title);
      
              const content = document.createElement('div');
              content.style.fontSize = '15px'; content.style.color = '#4b5553';
              content.textContent = msg;
              win.appendChild(content);
          }
      
          function cleanAndFormatContent(el) {
              let text = el.innerText;
              if (!text) return "";
              const listItems = el.querySelectorAll('li');
              listItems.forEach(li => {
                  const liText = li.innerText.trim();
                  if (liText && !liText.startsWith('*')) {
                      text = text.replace(liText, `* ${liText}`);
                  }
              });
              return text.split('\n')
                  .map(line => line.trim())
                  .filter(line => {
                      if (!line) return false;
                      return !CONFIG.forbiddenPhrases.some(phrase => line === phrase || line.includes(phrase));
                  })
                  .join('\n');
          }
      
          function getSmartTitle() {
              let title = "";
              const isGemini = location.hostname.includes('gemini');
              if (isGemini) {
                  const topBarTitle = document.querySelector('h1, [data-test-id="conversation-title"], .conversation-title');
                  if (topBarTitle) title = topBarTitle.innerText;
              } else {
                  const activeChat = document.querySelector('ol li div.bg-token-sidebar-surface-active');
                  if (activeChat) title = activeChat.innerText;
              }
              if (!title || title.length < 2) title = document.title;
              title = title.replace(/Gemini|ChatGPT|Google|New chat|אמרת/gi, '').trim();
              return (title || "שיחת AI").replace(/[\\/:*?"<>|]/g, '').trim();
          }
      
          const sleep = ms => new Promise(res => setTimeout(res, ms));
      
          async function runExport() {
              const chatTitle = getSmartTitle();
              const threadUrl = window.location.href;
              updateStatus("סורק את כל ההודעות בשרשור...");
      
              const isGemini = location.hostname.includes('gemini');
              const scrollContainer = isGemini ? document.querySelector('main-content-scrollable-container') || window : document.querySelector('main') || window;
              let lastCount = 0, retries = 0;
      
              while (retries < 5) {
                  const selector = isGemini ? 'user-query, model-response' : 'article, [data-testid*="conversation-turn"]';
                  const elements = document.querySelectorAll(selector);
                  updateStatus(`סורק הודעות... זוהו: ${elements.length}`);
                  if (elements.length > 0) elements[0].scrollIntoView({ behavior: 'auto', block: 'start' });
                  if (scrollContainer.scrollTo) scrollContainer.scrollTo(0, 0); else window.scrollTo(0, 0);
                  await sleep(1200);
                  const newElements = document.querySelectorAll(selector);
                  if (newElements.length > lastCount) { lastCount = newElements.length; retries = 0; }
                  else { retries++; }
                  if (retries > 2 && ((scrollContainer === window ? window.scrollY : scrollContainer.scrollTop) === 0)) break;
              }
      
              updateStatus("מכין את קובץ התיעוד הסופי...");
              const msgSelector = isGemini ? 'user-query, model-response' : 'article, [data-testid*="conversation-turn"]';
              const finalElements = document.querySelectorAll(msgSelector);
      
              const d = new Date();
              const dateDots = `${String(d.getDate()).padStart(2, '0')}.${String(d.getMonth() + 1).padStart(2, '0')}.${d.getFullYear()}`;
              const timeStr = `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`;
      
              let contentBuffer = `נושא: ${chatTitle}\n`;
              contentBuffer += `תאריך ייצוא: ${dateDots} | שעה: ${timeStr}\n`;
              contentBuffer += `קישור: ${threadUrl}\n`;
              contentBuffer += `${'='.repeat(60)}\n\n`;
      
              finalElements.forEach(el => {
                  let role = (isGemini && (el.tagName.toLowerCase().includes('user') || el.closest('user-query'))) ||
                              (!isGemini && (el.querySelector('[data-message-author-role="user"]') || el.innerText.includes("אמרת")))
                              ? "אני" : (isGemini ? "Gemini" : "ChatGPT");
      
                  const cleanText = cleanAndFormatContent(el);
      
                  let fileInfo = "";
                  let fileCount = 0;
                  if (isGemini) {
                      fileCount = el.querySelectorAll('inline-chip, img, .image-container').length;
                  } else {
                      fileCount = el.querySelectorAll('.file-attachment, [data-testid="attachment-wrapper"], img').length;
                  }
      
                  if (fileCount > 0) {
                      fileInfo = `\n[להודעה זו מצורפים ${fileCount} קבצים]`;
                  }
      
                  if (cleanText || fileCount > 0) {
                      contentBuffer += `[${role}]:\n${cleanText}${fileInfo}\n${'-'.repeat(40)}\n\n`;
                  }
              });
      
              const fileName = `${dateDots} - ${chatTitle}.txt`;
              const blob = new Blob([contentBuffer.trim()], { type: 'text/plain;charset=utf-8' });
              const url = URL.createObjectURL(blob);
              const a = document.createElement('a');
              a.href = url;
              a.download = fileName;
              a.click();
      
              updateStatus("הקובץ נשמר בהצלחה!", true);
              await sleep(2200);
              document.getElementById(CONFIG.overlayId).style.display = 'none';
              if (finalElements.length > 0) finalElements[finalElements.length - 1].scrollIntoView({ behavior: 'smooth' });
          }
      
          function ensureButtonExists() {
              injectCSS();
              if (document.getElementById(CONFIG.btnId)) return;
              const btn = document.createElement('button');
              btn.id = CONFIG.btnId;
              btn.textContent = '💾';
              btn.title = "ריענון וייצוא היסטוריה";
              btn.onclick = (e) => { e.preventDefault(); e.stopPropagation(); runExport(); };
              document.body.appendChild(btn);
          }
      
          setInterval(ensureButtonExists, 1000);
      })();
      

      בהצלחה!

      מייבין במקצתמ מנותק
      מייבין במקצתמ מנותק
      מייבין במקצת
      כתב נערך לאחרונה על ידי
      #2

      @I-believe מאוד שימושי! כמה הצעות לשיפור:
      1: כשמפעילים מצב קנבס - זה לא שומר את הקוד שבקנבס
      2: אולי תוסיף תמיכה ב-PDF (לתמונות וכדומה)
      תודה רבה

      I תגובה 1 תגובה אחרונה
      1
      • מייבין במקצתמ מייבין במקצת

        @I-believe מאוד שימושי! כמה הצעות לשיפור:
        1: כשמפעילים מצב קנבס - זה לא שומר את הקוד שבקנבס
        2: אולי תוסיף תמיכה ב-PDF (לתמונות וכדומה)
        תודה רבה

        I מנותק
        I מנותק
        I believe
        כתב נערך לאחרונה על ידי I believe
        #3

        @מייבין-במקצת תודה רבה על ההצעות!

        לגבי התמיכה בקנבס – באמת לא שמתי לב לזה, תודה על ההערה.

        בנוגע לתמונות וקבצים ב-PDF – כשבניתי את הכלי חיפשתי משהו קומפקטי וקליל שלא יתפוס מקום על המחשב, לכן הגדרתי שהסקריפט רק יציין אם קיים קובץ מצורף מבלי להוריד אותו פיזית.

        בכל אופן, מכיוון שהכנתי את זה בעיקר לצורך אישי, אני יותר מאשמח אם מישהו ירים את הכפפה וישפר את זה עוד כמה צעדים קדימה. ואולי @י.-פל. ישלב את זה בתוסף המוצלח שלו...

        מייבין במקצתמ י. פל.י 2 תגובות תגובה אחרונה
        3
        • I I believe

          @מייבין-במקצת תודה רבה על ההצעות!

          לגבי התמיכה בקנבס – באמת לא שמתי לב לזה, תודה על ההערה.

          בנוגע לתמונות וקבצים ב-PDF – כשבניתי את הכלי חיפשתי משהו קומפקטי וקליל שלא יתפוס מקום על המחשב, לכן הגדרתי שהסקריפט רק יציין אם קיים קובץ מצורף מבלי להוריד אותו פיזית.

          בכל אופן, מכיוון שהכנתי את זה בעיקר לצורך אישי, אני יותר מאשמח אם מישהו ירים את הכפפה וישפר את זה עוד כמה צעדים קדימה. ואולי @י.-פל. ישלב את זה בתוסף המוצלח שלו...

          מייבין במקצתמ מנותק
          מייבין במקצתמ מנותק
          מייבין במקצת
          כתב נערך לאחרונה על ידי מייבין במקצת
          #4

          @I-believe כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

          אני יותר מאשמח אם מישהו ירים את הכפפה וישפר את זה עוד כמה צעדים קדימה.

          אני מנסה...

          מייבין במקצתמ תגובה 1 תגובה אחרונה
          0
          • מייבין במקצתמ מייבין במקצת

            @I-believe כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

            אני יותר מאשמח אם מישהו ירים את הכפפה וישפר את זה עוד כמה צעדים קדימה.

            אני מנסה...

            מייבין במקצתמ מנותק
            מייבין במקצתמ מנותק
            מייבין במקצת
            כתב נערך לאחרונה על ידי
            #5

            כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

            אני מנסה...

            וברוך השם מצליח...
            הנה זה כתוסף לכרום
            מייצא שיחות.zip

            כרגע הוספתי תמיכה בקובץ וורד PDF ו-HTML לגבי קנבס - עוד לא

            I תגובה 1 תגובה אחרונה
            2
            • I I believe

              @מייבין-במקצת תודה רבה על ההצעות!

              לגבי התמיכה בקנבס – באמת לא שמתי לב לזה, תודה על ההערה.

              בנוגע לתמונות וקבצים ב-PDF – כשבניתי את הכלי חיפשתי משהו קומפקטי וקליל שלא יתפוס מקום על המחשב, לכן הגדרתי שהסקריפט רק יציין אם קיים קובץ מצורף מבלי להוריד אותו פיזית.

              בכל אופן, מכיוון שהכנתי את זה בעיקר לצורך אישי, אני יותר מאשמח אם מישהו ירים את הכפפה וישפר את זה עוד כמה צעדים קדימה. ואולי @י.-פל. ישלב את זה בתוסף המוצלח שלו...

              י. פל.י מנותק
              י. פל.י מנותק
              י. פל.
              כתב נערך לאחרונה על ידי
              #6

              @I-believe כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

              ואולי @י.-פל. ישלב את זה

              יש לי כבר, ממזמן...

              גאה להיות חלק:
              otzaria.org

              י. פל.י תגובה 1 תגובה אחרונה
              0
              • י. פל.י י. פל.

                @I-believe כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                ואולי @י.-פל. ישלב את זה

                יש לי כבר, ממזמן...

                י. פל.י מנותק
                י. פל.י מנותק
                י. פל.
                כתב נערך לאחרונה על ידי
                #7

                הנה הכפתור אצלי:
                2e90fcad-2b66-4e0a-9315-3f0aacb241d1-image.png

                גאה להיות חלק:
                otzaria.org

                תגובה 1 תגובה אחרונה
                0
                • מייבין במקצתמ מייבין במקצת

                  כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                  אני מנסה...

                  וברוך השם מצליח...
                  הנה זה כתוסף לכרום
                  מייצא שיחות.zip

                  כרגע הוספתי תמיכה בקובץ וורד PDF ו-HTML לגבי קנבס - עוד לא

                  I מנותק
                  I מנותק
                  I believe
                  כתב נערך לאחרונה על ידי
                  #8

                  @מייבין-במקצת איזה אלוף!
                  יש קצת מה לשפר, הסרת שורות ריקות, ייצוא ל PDF לא משלים את ההדפסה, עדכון תאריך ייצוא - אבל זו מלאכה נהדרת.

                  @י.-פל. זה העתקה, לא שמירה כקובץ.

                  תגובה 1 תגובה אחרונה
                  1
                  • י. פל.י מנותק
                    י. פל.י מנותק
                    י. פל.
                    כתב נערך לאחרונה על ידי
                    #9

                    ראיתי שאני לא מגיע לזה, אז הכרחתי את עצמי להגיע לזה...
                    שולב, בע"ה עוד מעט עדכון.

                    גאה להיות חלק:
                    otzaria.org

                    Y תגובה 1 תגובה אחרונה
                    1
                    • י. פל.י י. פל.

                      ראיתי שאני לא מגיע לזה, אז הכרחתי את עצמי להגיע לזה...
                      שולב, בע"ה עוד מעט עדכון.

                      Y מנותק
                      Y מנותק
                      YOLEVI
                      כתב נערך לאחרונה על ידי
                      #10

                      @י.-פל. מחכים בקוצר רוח
                      נשמח אם תוכל לפרט מה בדיוק הפונקציות בעדכון
                      ממש תודה

                      י. פל.י תגובה 1 תגובה אחרונה
                      0
                      • Y YOLEVI

                        @י.-פל. מחכים בקוצר רוח
                        נשמח אם תוכל לפרט מה בדיוק הפונקציות בעדכון
                        ממש תודה

                        י. פל.י מנותק
                        י. פל.י מנותק
                        י. פל.
                        כתב נערך לאחרונה על ידי
                        #11

                        @YOLEVI כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                        נשמח אם תוכל לפרט מה בדיוק הפונקציות בעדכון

                        https://mitmachim.top/post/1114644
                        אפשר לבקש עוד, לא מבטיח שאתפנה...

                        גאה להיות חלק:
                        otzaria.org

                        I תגובה 1 תגובה אחרונה
                        0
                        • י. פל.י י. פל.

                          @YOLEVI כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                          נשמח אם תוכל לפרט מה בדיוק הפונקציות בעדכון

                          https://mitmachim.top/post/1114644
                          אפשר לבקש עוד, לא מבטיח שאתפנה...

                          I מנותק
                          I מנותק
                          I believe
                          כתב נערך לאחרונה על ידי
                          #12

                          @י.-פל. זה עובד פשוט מדהים, ובמהירות יוצאת דופן, תודה רבה לך על המאמץ וההשקעה.

                          נראה לי הגיע הזמן להתאים את התוסף הנפלא שלך גם לג'מיני...

                          י. פל.י 2 תגובות תגובה אחרונה
                          1
                          • I I believe

                            @י.-פל. זה עובד פשוט מדהים, ובמהירות יוצאת דופן, תודה רבה לך על המאמץ וההשקעה.

                            נראה לי הגיע הזמן להתאים את התוסף הנפלא שלך גם לג'מיני...

                            י. פל.י מנותק
                            י. פל.י מנותק
                            י. פל.
                            כתב נערך לאחרונה על ידי
                            #13

                            @I-believe כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                            לג'מיני

                            אני לא משתמש בטיפש הזה, ולכן אין לו תוסף...
                            יום אחד זה גם יקרה... בל"נ.
                            צריך זמן...

                            גאה להיות חלק:
                            otzaria.org

                            Y תגובה 1 תגובה אחרונה
                            0
                            • י. פל.י י. פל.

                              @I-believe כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                              לג'מיני

                              אני לא משתמש בטיפש הזה, ולכן אין לו תוסף...
                              יום אחד זה גם יקרה... בל"נ.
                              צריך זמן...

                              Y מנותק
                              Y מנותק
                              YOLEVI
                              כתב נערך לאחרונה על ידי
                              #14

                              @י.-פל. כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                              אני לא משתמש בטיפש הזה, ולכן אין לו תוסף...

                              עד כדי כך??
                              מה עם גרוק?

                              י. פל.י תגובה 1 תגובה אחרונה
                              0
                              • Y YOLEVI

                                @י.-פל. כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                                אני לא משתמש בטיפש הזה, ולכן אין לו תוסף...

                                עד כדי כך??
                                מה עם גרוק?

                                י. פל.י מנותק
                                י. פל.י מנותק
                                י. פל.
                                כתב נערך לאחרונה על ידי
                                #15

                                @YOLEVI כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                                עד כדי כך??

                                כן. מסייג: לא יודע לגבי 3.1

                                @YOLEVI כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                                מה עם גרוק?

                                לא יודע.

                                גאה להיות חלק:
                                otzaria.org

                                תגובה 1 תגובה אחרונה
                                0
                                • I I believe

                                  @י.-פל. זה עובד פשוט מדהים, ובמהירות יוצאת דופן, תודה רבה לך על המאמץ וההשקעה.

                                  נראה לי הגיע הזמן להתאים את התוסף הנפלא שלך גם לג'מיני...

                                  י. פל.י מנותק
                                  י. פל.י מנותק
                                  י. פל.
                                  כתב נערך לאחרונה על ידי
                                  #16

                                  @I-believe כתב במדריך | תוסף לייצוא שיחות מג'מיני וצ'אט GPT לקובץ טקסט בקליק:

                                  התאים את התוסף הנפלא שלך גם לג'מיני...

                                  קיבלת...

                                  גאה להיות חלק:
                                  otzaria.org

                                  תגובה 1 תגובה אחרונה
                                  0

                                  • התחברות

                                  • אין לך חשבון עדיין? הרשמה

                                  • התחברו או הירשמו כדי לחפש.
                                  • פוסט ראשון
                                    פוסט אחרון
                                  0
                                  • חוקי הפורום
                                  • פופולרי
                                  • לא נפתר
                                  • משתמשים
                                  • חיפוש גוגל בפורום
                                  • צור קשר