
多开一个标签页,访问一个需要过验证但又不会有交互请求的链接,例如:
装个自动刷新的插件,我用的是 GitHub 随便找的:
https://github.com/Claxtastic/just-refresh ( jquery.min.js 已经和官网的对比过是一致的)
我设置的间隔是 3 秒,对我来说很管用,希望能帮到你们。
原理很简单,用别的更优雅的方式自然也可以实现。
油猴版本,不想装油猴就直接在对话页面的 DevTools - Console 里执行。
优雅一点,不需要多开个标签页了。
应该没人太在意 DevTools - Network 里有很多 404 请求吧?
// ==UserScript== // @name ChatGPT heartbeat // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author https://v2ex.com/t/926890 // @match https://chat.openai.com/* // @icon https://chat.openai.com/favicon.ico // @grant none // ==/UserScript== (function() { 'use strict'; setInterval(function(){ fetch('https://chat.openai.com/404'); }, 3000); })(); 上面这个油猴脚本仅仅 fetch 404 似乎没有自动刷新那么有效,我实测还是要刷新了,干脆用 iframe 了,写法可能不好,欢迎指点:
// ==UserScript== // @name ChatGPT heartbeat // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author https://v2ex.com/t/926890 // @match https://chat.openai.com/* // @icon https://chat.openai.com/favicon.ico // @grant none // ==/UserScript== (function () { var iframe = document.createElement("iframe"); iframe.id = "heartbeat"; iframe.style = "display:none"; iframe.name = "heartbeat"; iframe.src = "https://chat.openai.com/404/"; var fn = function () { setTimeout(function(){ iframe.src = "https://chat.openai.com/404/" + Math.random(); }, 3000); }; if (iframe.attachEvent) { iframe.attachEvent("onload", fn); } else { iframe.Onload= fn; } document.body.insertBefore(iframe, document.body.firstChild); })(); //
//
//
//
上面的油猴脚本占用太高了,风扇呼呼的。
实测 robots.txt 也有效(fetch 可能失效大概是 Cloudflare 对 Headers 的检测?)。
下面是 ChatGPT heartbeat 再也不改版,未来如果 robots.txt 无效了可以自己修改链接为 404,如果觉得每5秒请求一次太频繁了可以自己调大时间间隔。
// ==UserScript== // @name ChatGPT heartbeat // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author https://v2ex.com/t/926890 // @match https://chat.openai.com/chat/* // @icon https://chat.openai.com/favicon.ico // @grant none // ==/UserScript== (function () { var iframe = document.createElement("iframe"); iframe.id = "heartbeat"; iframe.style = "display:none"; iframe.name = "heartbeat"; iframe.src = "https://chat.openai.com/robots.txt"; var fn = function () { setTimeout(function(){ document.getElementById('heartbeat').contentWindow.location.reload(true); }, 5000); }; if (iframe.attachEvent) { iframe.attachEvent("onload", fn); } else { iframe.Onload= fn; } document.body.insertBefore(iframe, document.body.firstChild); })(); 绝对不会再改版
// ==UserScript== // @name ChatGPT heartbeat // @namespace http://tampermonkey.net/ // @version 0.2 // @description try to take over the world! // @author https://v2ex.com/t/926890 // @match https://chat.openai.com/chat* // @icon https://chat.openai.com/favicon.ico // @grant none // ==/UserScript== /* 需要保持非常久的,可以额外尝试在 chrome://discards 里禁用 `Auto Discardable`, 或者用 https://github.com/WorldLanguages/DoNotDiscard 否则就算保持了 Cookies 有效,Chrome 也有可能自动休眠标签页。 */ (function () { var count = 0; var iframe = document.createElement("iframe"); iframe.id = "heartbeat"; iframe.style = "display:none"; iframe.name = "heartbeat"; iframe.src = "https://chat.openai.com/robots.txt"; var fn = function () { setTimeout(function () { if (count++ % 60 === 59) { iframe.src = "https://chat.openai.com/404"; } else if (iframe.src === "https://chat.openai.com/robots.txt") { iframe.contentWindow.location.reload(true); } else { iframe.src = "https://chat.openai.com/robots.txt"; } }, Math.floor(Math.random() * 5) * 1000 + 5000); }; if (iframe.attachEvent) { iframe.attachEvent("onload", fn); } else { iframe.Onload= fn; } document.head.insertBefore(iframe, document.head.firstChild); })(); 绝对绝对不会再改版
// ==UserScript== // @name ChatGPT heartbeat // @namespace http://tampermonkey.net/ // @version 0.2.1 // @description try to take over the world! // @author https://v2ex.com/t/926890 // @match https://chat.openai.com/chat* // @icon https://chat.openai.com/favicon.ico // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // ==/UserScript== /* 需要保持非常久的,可以额外尝试在 chrome://discards 里禁用 `Auto Discardable`, 或者用 https://github.com/WorldLanguages/DoNotDiscard 否则就算保持了 Cookies 有效,Chrome 也有可能自动休眠标签页。 */ (function () { var refreshURL = 'https://chat.openai.com/_next/static/k9OKjvwgjWES7JT3k-6g9/_ssgManifest.js'; var refreshInterval = 30 * 1000; var iframe = document.createElement('iframe'); iframe.id = 'heartbeat'; iframe.style = 'display:none'; iframe.name = 'heartbeat'; iframe.src = refreshURL; document.head.insertBefore(iframe, document.head.firstChild); setInterval(function () { if (iframe.contentWindow.location.href === refreshURL) { iframe.contentWindow.location.reload(true); } }, refreshInterval) })(); 1 yiios 2023 年 3 月 24 日 好思路 |
2 0x535 2023 年 3 月 24 日 问了 ChatGPT ,它说不想装插件,用油猴脚本也可以。试了一下,确实可以,目前情绪稳定 不知道后面会不会出问题 ```js (function() { 'use strict'; setInterval(function(){ location.reload(); }, 3000); })(); ``` |
3 bigtear 2023 年 3 月 24 日 尝试一下 |
4 arzyu 2023 年 3 月 24 日 这个方法不错! |
5 autoxbc 2023 年 3 月 24 日 @0x535 #2 这个 ChatGPT 代码能力不行,reload() 执行后上下文都会销毁,回调不会执行第二次,此处用 setInterval 是思路不清 |
6 X-Force 2023 年 3 月 24 日 我让 ChatGPT 帮忙写了一个油猴脚本,每隔 2 分钟发送一句“ping”,Ai 会回答 pong 。然后,就没有然后了,就这样。 |
7 X-Force 2023 年 3 月 24 日 不必多开,不必刷新。只是有污染聊天记录,虽然没有根治验证的问题,但基本上算是解决烦人的问题 |
8 0o0O0o0O0o OP @autoxbc #5 他说的是油猴,所以还是可以的吧 |
10 0o0O0o0O0o OP @X-Force 那我建议你用油猴请求不存在的页面,而不是对话,毕竟 openai 资源紧张,被找理由 ban 了就不好了。其实就是带上 cookie 让 cloudflare 知道你请求了就行。 |
12 Vitta 2023 年 3 月 24 日 你把 userAgent 改成 safari 的 试试。我改了之后不管他好久还能继续用 |
13 autoxbc 2023 年 3 月 24 日 @0o0O0o0O0o #8 @0x535 #9 @Lentin #11 看来我没说清楚,我知道这是油猴,知道这不是控制台的注入。我的意思是,这里只用 setTimeout 就足够了,页面重载会重新注入这段代码,不需要 setInterval 来维持调度。反过来说,他试图用 setInterval 来维持调度说明对浏览器,对油猴理解不够 |
14 0o0O0o0O0o OP @autoxbc #13 哈哈,要是对它的期望是“能跑就行”那倒不错 |
15 GG668v26Fd55CP5W 2023 年 3 月 24 日 简单粗暴,但真的有用,帮上大忙了! |
16 unifier 2023 年 3 月 24 日 简单粗暴但有效,就喜欢这种方法 |
17 yinyu 2023 年 3 月 24 日 我想说,每三秒自动刷新,是不是每三秒他需要回你一次,爽了自己苦了别人啊 (啥脚本啊,我马上去下载,我有油猴。狗头.ipg ) |
18 0o0O0o0O0o OP @yinyu #17 不需要的,考虑到这一点了,所以请求的是不存在的页面,对 OpenAI 服务器造成的负担会很小 |
19 unifier 2023 年 3 月 24 日 |
20 yinyu 2023 年 3 月 24 日 原来是请求一个不会交互的页面,妙啊,但是感觉官网有时候也抽风,可能是我机场的问题,有时候也是吐字很慢。不如白嫖的 API |
21 nijux 2023 年 3 月 24 日 可以让 ChatGPT 改成随机 3~15 秒访问一次 |
22 0o0O0o0O0o OP @nijux #21 嗯,要是访问 404 页面没有效果我应该就会加上随机了,仅仅访问 404 页面感觉不太容易被风控关照到 |
23 XnEnokq9vkvVq4 2023 年 3 月 24 日 妙啊,有效降低 plus 套餐的吸引力( |
24 Lentin 2023 年 3 月 24 日 |
25 0o0O0o0O0o OP @Lentin #24 嗯,有两种进入对话的方式 - 访问 https://chat.openai.com/chat 或者 https://chat.openai.com/chat/ 然后跳转到 https://chat.openai.com/chat - 访问某个确定的对话,也就是 https://chat.openai.com/chat/<uuid> 所以可能还是 // @match https://chat.openai.com/chat* 更好些? |
26 zkncu9zjczw 2023 年 3 月 25 日 请问这是什么原理 感觉很强 |
27 autoxbc 2023 年 3 月 25 日 iframe 的思路很好,我个人的技巧是把 iframe 插入 head ,这样不需要指定 style 就会自动隐藏 |
28 0o0O0o0O0o OP @zkncu9zjczw #26 Cloudflare 的策略问题吧,大概是保持交互 Cloudflare 就认为你活跃?没具体分析过,大概原理没错。 |
29 ysq 2023 年 3 月 25 日 s 升了 plus 就不用每次刷新了 |
30 X-Force 2023 年 3 月 25 日 if (count++ % 60 === 59) { iframe.src = "https://chat.openai.com/404"; .... 这句的目的是什么?只访问 robot.txt 不行?一定还要偶尔访问下 404 页面吗? |
31 0o0O0o0O0o OP @X-Force #30 我没去求证,凭感觉写的,因为如果要验证效果有点耗时间。。。robots.txt 仅仅是带着 Cookie 请求一下,但在需要刷新甚至需要重新验证时它是不跳转的,404 在需要刷新的时候则会跳转 |
32 0o0O0o0O0o OP @X-Force #30 所以干脆隔一段时间就加载一下 404 |
33 arzyu 2023 年 3 月 25 日 我设置 2 分钟一刷完全没问题。 |
34 cs3230524 2023 年 3 月 26 日 付费吧,就稳定了。 |
35 cs3230524 2023 年 3 月 26 日 大伙都是程序员行业了,这 100 多的投资很值啊。把精力放在搞钱上吧。。。 |
36 yinyu 2023 年 3 月 27 日 为啥我运行了最后一版的油猴,长期不刷新还是会报错。是因为我梯子太辣鸡了吗? |
37 Lentin 2023 年 3 月 27 日 |
38 0o0O0o0O0o OP @yinyu #36 你试试用 #37 的替换 404 |
39 brainor 2023 年 3 月 27 日 greasy fork 里看到一个[这个]( https://greasyfork.org/en/scripts/462422-chatgpt-auto-refresh ) 作者貌似还弄了好几个[script]( https://github.com/adamlui/userscripts/tree/master/chatgpt ) ~ |
40 0o0O0o0O0o OP @brainor 这个牛,油猴原来还可以有菜单的 |
41 brainor 2023 年 3 月 27 日 @0o0O0o0O0o 但是我发现这个脚本貌似没有用 hh |
42 EeveeRibbon 2023 年 3 月 28 日 有一个小问题,就是每一次发起请求,油猴的图标右下角,显示当前启用脚本数量的那个红色数字就加一,静置一会那个数字都跑到好几百了,不知道这个在哪里设置 |
43 hun2008hun 2023 年 3 月 28 日 @qiaofanxing 我也发现了,不知道怎么搞 |
44 0o0O0o0O0o OP |
45 160 2023 年 3 月 28 日 @qiaofanxing 打开 Tampermonkey 的设置,配置模式设置为“高级”,然后找到“操作菜单”,找到“标记点信息”,选择”已禁用“或者”运行的脚本数量“,最后保存就不会一直增加了。 |
46 Losir 2023 年 3 月 30 日 用了 0.2.1 版,被 ban 了一小时,发消息都是回复“Too many requests in 1 hour. Try again later.”,是不是这个方法不行了? |
47 0o0O0o0O0o OP @autoxbc 这个页面监听了事件,有事件就会在本地检测 session 是否超时( 348e4 ),就会强制刷新。对于这种情况一般怎么用油猴修改呢? hook addEventListener 效果很差,js 文件也不好拦截修改 |
48 0o0O0o0O0o OP @Losir #46 我倒是没遇到过这个报错,搜了下也不算 ban ,就是一小时内对话太多?这个脚本是避免增加和 OpenAI 的交互的,所以大概不是它引起的 |
49 autoxbc 2023 年 3 月 30 日 @0o0O0o0O0o #47 这个应该是官方的自动刷新机制,我觉得应该够用,然后就把油猴实现停掉了 如果对官方这个效果不满意想自己实现,可以拦截 addEventListener ,当 type 参数为 focus 和 focusin 时,把监听请求丢弃掉 有一点要注意,拦截 addEventListener 不应该这样写 globalThis.addEventListener = function(){} 因为油猴的沙盒机制要求对顶级对象的写操作要显式使用 unsafeWindow ;同时也不能这样写 unsafeWindow.addEventListener = function(){} 因为 addEventListener 有多个入口,比如 document.addEventListener ;正确的做法是 EventTarget.prototype.addEventListener = function(){} EventTarget 是可监听对象的统一抽象原型 |
50 0o0O0o0O0o OP @autoxbc #49 谢谢,很有帮助!发布到 greasyfork 了,https://greasyfork.org/scripts/462967 |
51 vxzhong 2023 年 3 月 31 日 有用,感谢。 |
52 Lentin 2023 年 4 月 3 日 我也搞了一版,自动寻找页面上的 js 链接,顺便让 gpt 优化了下代码 (function() { const manifestScript = document.querySelector('script[src*="_ssgManifest.js"]'); if (!manifestScript) return; const heartbeat = Object.assign(document.createElement('iframe'), { style: 'display:none' }); document.head.prepend(heartbeat); setInterval(() => heartbeat.src = `${manifestScript.src}?${Date.now()}`, 30000); })(); |
53 tlerbao 2023 年 4 月 11 日 @0o0O0o0O0o 我这边点安装脚本后 一闪什么也没有,脚本主页安装按钮变成了重新安装,但是油猴按钮显示没有在运行的脚本是怎么回事? |
54 0o0O0o0O0o OP @tlerbao #53 1. 重启浏览器 2. 确认油猴是 Enabled 状态 3. 进油猴的 Dashboard 看看是不是正常安装了 4. 匹配的 URL 是 `https://chat.openai.com/chat*` 要是还不行我也不了解了 |
55 tlerbao 2023 年 4 月 11 日 @0o0O0o0O0o 我群友说他亲测,买了一台国外服务器,然后直接远程到服务器上面开浏览器用,不用刷新。。。。他说是独占 IP 的就不会频繁刷新 |
56 0o0O0o0O0o OP @tlerbao #55 我是用的便宜 VPS+ warp ,成本比较低 |
57 haibbo 2023 年 4 月 11 日 @0o0O0o0O0o 我这边测试 _ssgManifest.js 超时后, 它就不会再次重试了 https://user-images.githubusercontent.com/1295315/231119886-9ae259e9-9e93-42ab-b5e5-228604c70b57.png |
58 0o0O0o0O0o OP @haibbo #57 试试最新版 0.2.4 |
59 tlerbao 2023 年 4 月 11 日 @0o0O0o0O0o 刚测了一下,没有用,还是需要刷新 |
60 Biluesgakki 2023 年 4 月 12 日 和我想到一块了哈哈 刚写了个脚本 60 秒刷新以下页面 |
61 yazoox 2023 年 4 月 13 日 @0o0O0o0O0o OP 你这个脚本到底 是 30 秒还是 2 分钟刷新一下? |
62 0o0O0o0O0o OP @yazoox #61 30 秒,代码里的 2 分钟是应对一些特殊情况,比如 iframe 中的请求触发了 cloudflare challenge ,但 2 分钟还没跳转完就让 iframe 重新加载 |
63 jiang24gdufs 2023 年 4 月 13 日 @0o0O0o0O0o 我是把这段 js 脚本放在控制台运行,但是现在已经不好用了, 执行两轮就报 403 了 |
64 0o0O0o0O0o OP @jiang24gdufs #63 我在用 0.2.4 ,chrome://discard 禁用了 Auto Discardable ,放置一个小时之后还是能直接对话。 发布在 greasyfork 上的引入了 MonkeyConfig ,控制台直接运行是不行的 |
65 jiang24gdufs 2023 年 4 月 13 日 @0o0O0o0O0o 用 greasyfork 体验果然好多了, 不过想问问, 配置的 url 是固定的吗, 有没有必要参考#52 做成自动获取? |
66 0o0O0o0O0o OP |
67 NouveauNom 2023 年 4 月 13 日 @0o0O0o0O0o 请问 edge 没有 edge://discard 是吗 |
68 NouveauNom 2023 年 4 月 13 日 @0o0O0o0O0o 找到了,是 edge://discards/ |
69 vxzhong 2023 年 4 月 14 日 |
70 0o0O0o0O0o OP @vxzhong #69 谢谢,已更新 |
71 jiang24gdufs 2023 年 4 月 14 日 @0o0O0o0O0o 加了油猴插件, 但是脚本不自动执行是什么原因? 我已经启用了该脚本. |
72 0o0O0o0O0o OP @jiang24gdufs #71 参考 #69 ,0.2.5 版本 |
73 glouhao 2023 年 4 月 15 日 你还是更新了,0.25 版本好用,谢谢大佬 |
74 tgz2018 2023 年 4 月 15 日 太感谢您了 |
75 tgz2018 2023 年 4 月 15 日 手机安装不了油猴,那怎么实现这个呢,有时候手机也用来访问下 chatgpt |
76 randychoi 2023 年 4 月 17 日 via Android |
77 xamo 2023 年 4 月 18 日 感谢,非常有用! |
78 zhiyu1998 2023 年 4 月 19 日 谢谢大佬 |
79 yyzq007 2023 年 4 月 20 日 有用,感谢大佬 |
| 80 geekyouth 2023 年 4 月 23 日 我发现开了香港全局代理,也可以顺利使用 chatgpt web 页面 |
81 ffkjjj 2023 年 4 月 23 日 @0o0O0o0O0o chat gpt 有时候首页会变成 https://chat.openai.com/?model=text-davinci-002-render-sha, 需要增加 ``` // @match https://chat.openai.com/* ``` |
82 isbase PRO |
84 0o0O0o0O0o OP |
85 michael27 2023 年 4 月 24 日 感觉更新了之后反而不好用了,更新之后几乎每次都要报错 an error occurred |
86 goodgoodstudy 2023 年 11 月 15 日 在 edge 浏览器上用不了,报错 Failed to read a named property 'href' from 'Location': Blocked a frame with origin "https://chat.openai.com" from accessing a cross-origin frame. |