经过 React Dev Tool 的 Hook,能够拿到 React 组件的内部状况,然后拿到 ChatGPT 网页中的原始 Markdown 格局
See all postsPublished on October 29, 2023
如何用代码从 ChatGPT 网页中获取原始 Markdown 格局?
ChatGPT 在输出音讯时,会将 Markdown 格局解析成 HTML,尽管能够点击仿制按钮去仿制原始的 Markdown,可是用代码操作时,却无法经过模仿点击去仿制 Markdown。
那么有没有办法经过代码获取到音讯的原始 Markdown 呢?
两种办法,使用场景各有不同:
- 凭借 Turndown 这样的库将 HTML 转成 Markdown,缺陷便是转化后或许和原始 Markdown 有收支,尤其是 Turndown 默认不支撑表格的转化
办法 1 还有一个衍生版别,便是要求 ChatGPT 在输出内容时,即将输出的一切内容都放在 对中,这样它就不会解析里面的 Markdown,当成代码块来输出原始格局。这种办法大部分场景是适用的,便是有一个小问题,如果要输出的内容中正好有
,就会有多个代码块,格局会乱掉,一部分在代码块,一部分在外面,结果仍是要解析 完好的 HTML。
- 凭借 React Dev Tool 的 Hook
这种办法或许绝大多数人都没听说过。React 为了支撑 React Dev Tool,暴露了一个 Hook,是个全局变量,名称是 “
__REACT_DEVTOOLS_GLOBAL_HOOK__
”,经过它能够注入到 React 组件内部,拿到组件内部的状况。这便是为什么经过 React Dev Tool 能看到每一个组件的属性和状况。
ChatGPT 的网页是 Nextjs 和 React 开发的,默认是支撑 React Dev Tools 的,所以只要写代码去遍历 “
__REACT_DEVTOOLS_GLOBAL_HOOK__
”,那么就能拿到一切组件的内部状况,然后找到有音讯原始 Markdown 内容的组件,就能够得到原始的 Markdown 信息。
但这种办法有两个缺陷,一个便是 ChatGPT 的前端换属性名称或许 state 名称了,或许就拿不到了;另外便是这种办法默认只支撑 console,或许直接页面执行,在外部浏览器插件的话,拿不到
__REACT_DEVTOOLS_GLOBAL_HOOK__
变量,必须经过 RegisteredContentScript 的办法去执行一段脚本,再去做一些内部通信,才能间接获取到,当然理论上仍是能够拿到的。
参阅代码如下:
[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object],
,[object Object]