将chatgpt对话保存为html文件
#javascript #ai #openai #聊天机器人

我已经开始从OpenAIchatGPT,并想保存对话。我的第一个尝试是使用GoFullScreen浏览器扩展程序,但输出文件看起来不好。因此,我已经确定我创建了一些代码,该代码将以HTML格式下载文件。

tl; dr末端有您可以复制的bookmarklet

所以我们首先需要用线抓取div。很高兴与样式组件进行ReactJS,因此组件的开始是不错的类名称与组件名称相同。

这是HTML:

DOM Tree of the ReactJS OpenAI website

您可以看到类以"ThreadLayout__NodeWrapper"开头,因此要选择该元素,您需要此代码:

const html = document.querySelector('[class^="ThreadLayout__NodeWrapper"]').innerHTML;

是匹配文本的属性选择器。

接下来是抓住该元素的HTML并将其转换为斑点。由于我永远不会记得如何将字符串转换为斑点(如果您不经常这样做,则不必记住这些事情)。我进行了Google搜索,发现javascript.info article about blob看起来像这样:

const blob = new Blob([html], {type: 'text/html'});

如果您问为什么我们需要blob对象,那是因为我们要将其转换为URL,我们可以使用Data URI,但是内容可能太大了,对于URL而言。因此,我们需要创建所谓的对象URL。与Blob一样,我不记得什么是API,所以我搜索了“ blob to url javaScript”,第一个结果是mdn和createObjectURL。所以我们需要做:

const url = URL.createObjectURL(blob);

所以现在,如果我们检查URL,您会看到这样的东西:

blob:https://chat.openai.com/8d0a27ec-d8c6-4a76-9aad-4a0e52b0f9d0

它是从内存中创建的对象,如果您使用此浏览器,它将使用它作为我们创建的HTML内容的引用。

要下载文件,我一直在使用此技巧,如果您知道更好的方法让我知道。

function download(url, filename) {
   const a = document.createElement('a');
   a.href = url;
   a.download = filename;
   // we need add link to body since some browsers
   // will ignore the download otherwise
   document.body.appendChild(a);
   a.click();
   // you can also use a.remove(); but I prefer older API
   document.body.removeChild(a);
}

我们可以使用Blob URL和文件名来调用此功能:

download(url, 'chatGPT.html');

这将创建假链接并下载文件。

上一次认为您想做的是清理自己并删除Blob URL,因为下载后不再需要它。

URL.revokeObjectURL(url);

作为终点,我保证了整个代码为bookmarklet:

javascript:(function() { const a = document.createElement('a'); a.href = URL.createObjectURL(new Blob([document.querySelector('[class^="ThreadLayout__NodeWrapper"]').innerHTML], {type: 'text/html'})); a.download = 'chatGPT.html'; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(a.href); })()

您需要将其作为URL保存到书签中,您可以单击并调用该代码。如果要复制/粘贴到控制台中,而不是在开始时删除javascript:,它是特殊协议,告诉浏览器运行此代码。

作为一个有趣的练习,我试图让chatgpt为我创建此代码。 Here is the result解决方案几乎相同。他只在CSS选择器中犯了错误,但指出了这一点,并修复了代码。上面的文件使用最后一个片段的复制糊下载。

就是这样。如果您喜欢这篇文章,可以在@jcubic上的Twitter上关注我,并检查我的home page