<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>用户脚本 on 小景</title>
        <link>https://jingyuan-zheng.github.io/zh/tags/%E7%94%A8%E6%88%B7%E8%84%9A%E6%9C%AC/</link>
        <description>Recent content in 用户脚本 on 小景</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-Hans</language>
        <copyright>Jingyuan Zheng</copyright>
        <lastBuildDate>Thu, 22 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jingyuan-zheng.github.io/zh/tags/%E7%94%A8%E6%88%B7%E8%84%9A%E6%9C%AC/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>把 ChatGPT 对话导出为 Markdown：保留代码、公式，放进 Typora 整理</title>
            <link>https://jingyuan-zheng.github.io/zh/p/chatgpt-to-markdown-userscript/</link>
            <pubDate>Tue, 16 Sep 2025 00:00:00 +0000</pubDate>
            <guid>https://jingyuan-zheng.github.io/zh/p/chatgpt-to-markdown-userscript/</guid>
            <description>&lt;img src=&#34;https://jingyuan-zheng.github.io/img/chatgpt-to-markdown-userscript/featured.png&#34; alt=&#34;Featured image of post 把 ChatGPT 对话导出为 Markdown：保留代码、公式，放进 Typora 整理&#34; /&gt;&lt;p&gt;ChatGPT to Markdown Exporter 是一个浏览器用户脚本，用来把已加载的对话转换成 Markdown，方便放进 Typora 等编辑器继续整理和归档。&lt;/p&gt;&#xA;&lt;p&gt;一段回答直接复制进笔记，代码块、公式和链接有时会变形。&lt;a class=&#34;link&#34; href=&#34;https://github.com/Jingyuan-Zheng/ChatGPT-To-Markdown-UserScript&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;这个仓库&lt;/a&gt; 从早期的 &lt;a class=&#34;link&#34; href=&#34;https://github.com/Marverlises/ChatGPT-To-Markdown-google-plugin&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Chrome 插件项目&lt;/a&gt; 改写出用户脚本，通过页面中已经渲染的内容生成 Markdown。&lt;/p&gt;&#xA;&lt;p&gt;它不是账户级的完整历史导出工具，也不应假定能获取页面中尚未加载的对话。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装的是用户脚本版本&#34;&gt;安装的是用户脚本版本&#xA;&lt;/h2&gt;&lt;p&gt;README 提供 &lt;a class=&#34;link&#34; href=&#34;https://greasyfork.org/zh-CN/scripts/529601&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Greasy Fork 安装入口&lt;/a&gt;。也可以先阅读仓库中的 &lt;code&gt;ChatGPT-To-Markdown-UserScript.js&lt;/code&gt;，再通过自己的用户脚本管理器安装。&lt;/p&gt;&#xA;&lt;p&gt;仓库还保留了早期 Chrome 插件的文件和截图。“加载已解压的扩展程序”属于另一种安装方法，不是安装这份用户脚本必须执行的步骤。&lt;/p&gt;&#xA;&lt;p&gt;脚本元数据匹配 ChatGPT/OpenAI 对话域名和 Grok。但域名匹配只表示允许运行，并不能证明页面选择器仍适配当前所有界面。&lt;/p&gt;&#xA;&lt;h2 id=&#34;导出当前已经加载的对话&#34;&gt;导出当前已经加载的对话&#xA;&lt;/h2&gt;&lt;p&gt;打开需要保存的对话，等待相关消息加载，找到 &lt;strong&gt;Export Chat&lt;/strong&gt;。脚本会生成 Markdown 预览，提供 &lt;strong&gt;Copy&lt;/strong&gt;、&lt;strong&gt;Download&lt;/strong&gt; 和 &lt;strong&gt;Close&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;下载文件名为 &lt;code&gt;chat-export.md&lt;/code&gt;。用 Typora 或其他 Markdown 编辑器打开，再改成容易识别的名称，例如带主题和日期的文件名。先数一数问答轮次，再检查代码块是否闭合、公式是否显示正常；这些比预览看起来整齐更重要。&lt;/p&gt;&#xA;&lt;p&gt;代码按照选中的页面元素顺序配对消息。布局变化、缺失消息或 DOM 结构调整，可能影响实际导出范围，而不只是字体样式。&lt;/p&gt;&#xA;&lt;h2 id=&#34;公式和代码如何转换&#34;&gt;公式和代码如何转换&#xA;&lt;/h2&gt;&lt;p&gt;脚本会把页面中的标题、列表、链接、代码块和公式改写成 Markdown。对公式，它尝试保留原本的 LaTeX 表达，而不是把屏幕上看到的符号拍成一张图片。&lt;/p&gt;&#xA;&lt;p&gt;第一次可以用包含一个代码块、一个行内公式、一个独立公式和短列表的小对话检查。Markdown 源码和渲染结果都看一遍，更容易发现问题。&lt;/p&gt;&#xA;&lt;p&gt;独立公式应保留类似结构：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;E = mc^2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;复杂公式、嵌套列表和表格要对照原对话检查，尤其留意符号、缩进和单元格顺序。&lt;/p&gt;&#xA;&lt;h2 id=&#34;网页变化会影响兼容性&#34;&gt;网页变化会影响兼容性&#xA;&lt;/h2&gt;&lt;p&gt;脚本需要辨认网页中的消息区域。ChatGPT 或 Grok 改版后，按钮可能仍显示，导出的内容却不完整；这时先用一段短对话检查，不要把刚下载的文件直接当作完整备份。&lt;/p&gt;&#xA;&lt;p&gt;看到 &lt;strong&gt;No conversation content found&lt;/strong&gt; 时，先确认对话已加载、脚本运行在目标页面，再检查选择器或向项目反馈。如果是选择器失效，重新安装同一份未修改的脚本不会自动修复。&lt;/p&gt;&#xA;&lt;p&gt;如果按钮还在、导出的文件却是空的，先在脚本页面查看近期更新和反馈；网页结构变动后，脚本可能需要更新。&lt;/p&gt;&#xA;&lt;h2 id=&#34;脚本装好以后先检查它有没有在当前页面启用&#34;&gt;脚本装好以后，先检查它有没有在当前页面启用&#xA;&lt;/h2&gt;&lt;p&gt;用户脚本要由浏览器里的脚本管理器运行，不能像普通网页链接一样点开就自动生效。通过 Greasy Fork 安装时，应看到管理器给出的脚本名称、匹配地址和安装确认；如果只是显示一页 JavaScript 文字，先检查管理器是否已安装并启用，而不是把代码当作浏览器扩展文件夹导入。&lt;/p&gt;&#xA;&lt;p&gt;安装后重新加载对话页面，再打开管理器菜单，确认这份脚本在当前站点处于启用状态。同一功能如果已经装过另一份用户脚本或 Chrome 扩展，可以先只保留一个入口做检查，避免出现两个同名按钮，却不知道实际运行的是哪一版。&lt;/p&gt;&#xA;&lt;p&gt;一段长对话里，先滚动到需要的部分，让消息真正显示出来，再导出。尤其是回到很久以前的对话时，不要只看到最后一条回答就认为此前内容已经全部加载。导出完成后，用最早和最后两轮问答对照首尾，再抽查中间一段，比只看文件大小更容易发现遗漏。&lt;/p&gt;&#xA;&lt;h2 id=&#34;用一个小样本检查代码公式和链接&#34;&gt;用一个小样本检查代码、公式和链接&#xA;&lt;/h2&gt;&lt;p&gt;第一次可以选一段同时含有标题、列表、网页链接和代码的对话。代码块要检查开头、结尾的三反引号有没有成对出现，缩进是否保留，代码中的 &lt;code&gt;&amp;lt;&lt;/code&gt;、&lt;code&gt;&amp;gt;&lt;/code&gt; 等符号有没有变成别的内容。不要直接执行刚导出的代码，先确认它和网页里的原文一致。&lt;/p&gt;&#xA;&lt;p&gt;公式则既看源码，也看预览。&lt;code&gt;$...$&lt;/code&gt; 通常用于行内表达式，&lt;code&gt;$$...$$&lt;/code&gt; 用于独立公式，但能否显示还受编辑器设置影响。如果文件里保留了公式标记，而 Typora 没有按预期渲染，先检查编辑器的数学支持设置，再判断是不是脚本丢了内容。&lt;/p&gt;&#xA;&lt;p&gt;表格中一列少了分隔符，可能让后面整行都错位。链接也需要实际点开核对：显示文字对，不代表目标地址没有变化。对于复杂内容，先把格式和信息完整性确认，再继续整理措辞；否则越早改写，越难判断错误发生在导出还是自己编辑的阶段。&lt;/p&gt;&#xA;&lt;h2 id=&#34;给每次导出留一个不会混淆的位置&#34;&gt;给每次导出留一个不会混淆的位置&#xA;&lt;/h2&gt;&lt;p&gt;默认文件名总是 &lt;code&gt;chat-export.md&lt;/code&gt;，连续下载容易积累一串带编号的文件。可以为一个主题建一个文件夹，把文件名改成日期加主题；原始导出和修改后的笔记分开存，尤其适合需要保留完整问答、又想提炼结论的情况。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;研究笔记/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── 回归分析/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── 2025-09-16-对话原始导出.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── 回归分析整理笔记.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── images/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这里的 &lt;code&gt;images&lt;/code&gt; 只是你整理素材的位置，脚本不会自动替你下载所有远程图片。需要离线保存时，逐个确认图片可否下载、是否仍依赖登录，再在 Markdown 里改成对应本地路径。可以暂时断网打开笔记检查；图片缺失就说明归档还没有完整独立于网页。&lt;/p&gt;&#xA;&lt;p&gt;最后，给整理笔记加上原对话链接或简短来源说明，方便以后回查。准备分享时，从原始问答里删去无关私人信息，再确认改写没有改变代码和公式含义。导出完成只是拿到可编辑文件，主题分类和内容核对才让它变成真正能继续使用的笔记。&lt;/p&gt;&#xA;&lt;h2 id=&#34;让归档文件真正可用&#34;&gt;让归档文件真正可用&#xA;&lt;/h2&gt;&lt;p&gt;导出代码在浏览器中组织 Markdown 并创建本地下载；图片仍可能引用远程 URL，所以只有一个 Markdown 文件，不一定构成完整的离线存档。分享或长期保存前，检查图片是否仍可访问，以及是否依赖原账户权限。&lt;/p&gt;&#xA;&lt;p&gt;公开之前移除敏感内容，并核对代码、公式与原对话的含义是否一致。保存以后想改善文件命名，可以看 &lt;a class=&#34;link&#34; href=&#34;https://jingyuan-zheng.github.io/zh/p/auto-filename-helper/&#34; &gt;Auto Filename Helper&lt;/a&gt;。具体转换规则以 &lt;a class=&#34;link&#34; href=&#34;https://github.com/Jingyuan-Zheng/ChatGPT-To-Markdown-UserScript/blob/main/ChatGPT-To-Markdown-UserScript.js&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;脚本源码&lt;/a&gt; 为准。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
