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