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