Gmail搞免费GPT账户|K12空间白嫖ChatGPT Plus全流程 喂饭级教程

【K12 】通过Gmail 搞免费GPT账户 - 喂饭级教程,不适合小白…

视频教程

视频介绍

本视频由 短裤AI分享 制作,时长约 6 分钟。

【K12 】通过Gmail 搞免费GPT账户 - 喂饭级教程,不适合小白

写在前面

因为很多人拿到GPT空间id不知道怎么用

辛苦做的视频,防止又被人说刷流量

说三编!!!不适合完全没概念的小白,不适合完全没概念的小白,不适合完全没概念的小白

一个gmail支持创建5个别名邮箱

多了登录gpt会报错,脚本中的空间ID现在人数人多,可以自己找最新的gmail的K12空间id,进行替换,linuxdo等很多站很多分享的

注意每个账号

开无痕登录账号,登录后不要退出账号,直接关闭页面,再开无痕再登录新的账号

注意outlook的不适用

得是gmail的空间id才行,大家有新的gmail空间id也欢迎评论区留言进行分享,分享给更多小伙伴

操作步骤
1.打开GPT官网 使用 gmail 账号进行登录

如图 使用邮箱别名注册,会转发到你的gmail邮箱
2.到邮箱输入验证码

完成账号创建
3.F12开启控制台

输入如下脚本内容,回车,等待脚本运行成功,空间ID有的话可以替换脚本中的,目前现在脚本中的实测可用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
// ==UserScript==
// @name ChatGPT Workspace Join Request
// @namespace https://chatgpt.com/
// @version 4.0.0
// @description 子号自动从 /api/auth/session 获取当前登录账号 AT,向母号 workspace 发送加入申请(request)或接受邀请(accept)。只需 workspace ID,UI 可编辑保存。
// @author you
// @match https://chatgpt.com/*
// @run-at document-idle
// @grant none
// ==/UserScript==
(function () {
"use strict";
// ===================== 默认配置 =====================
const DEFAULTS = {
workspaceIds: "a0a16bc9-e1b1-45f0-b269-812b53f60121",
intervalMs: 1500,
maxRetries: 3,
retryBackoffMs: 5000,
sessionPollMs: 20000,
panelWidth: 400,
};
const STORE_KEY = "jr_config_v4";
function loadConfig() {
let saved = {};
try { saved = JSON.parse(localStorage.getItem(STORE_KEY) || "{}"); } catch (_) {}
return Object.assign({}, DEFAULTS, saved);
}
function saveConfig(cfg) {
try { localStorage.setItem(STORE_KEY, JSON.stringify(cfg)); } catch (_) {}
}
let CONFIG = loadConfig();
// ---------- 状态 ----------
const STATE = {
at: "",
session: null,
deviceId: crypto.randomUUID(),
autoRan: false,
running: false,
};
// ---------- /api/auth/session ----------
async function fetchSession() {
const res = await fetch("/api/auth/session", {
headers: { accept: "*/*" },
credentials: "include",
});
if (!res.ok) throw new Error(`session HTTP ${res.status}`);
return res.json();
}
function decodeJwt(at) {
try {
const p = at.split(".")[1];
const j = JSON.parse(atob(p.replace(/-/g, "+").replace(/_/g, "/")));
const auth = j["https://api.openai.com/auth"] || {};
const prof = j["https://api.openai.com/profile"] || {};
return {
account_id: auth.chatgpt_account_id || "",
email: prof.email || "",
plan_type: auth.chatgpt_plan_type || "",
exp: j.exp || 0,
};
} catch (_) { return {}; }
}
function fmtExp(exp) {
if (!exp) return "?";
const min = Math.round((exp * 1000 - Date.now()) / 60000);
if (min > 60) return `剩余 ${Math.round(min/60)} 小时`;
return `剩余 ${min} 分钟`;
}
async function refreshSession() {
try {
const s = await fetchSession();
const at = s.accessToken || "";
if (at && at !== STATE.at) {
STATE.at = at;
STATE.session = s;
const info = decodeJwt(at);
log(`子号 AT 已更新: ${info.email || "?"}`, "ok");
updateUserBar(info, "ok");
onATReady();
} else if (!at) {
updateUserBar(null, "warn");
}
} catch (e) {
log(`session 获取失败: ${e.message}`, "warn");
updateUserBar(null, "err");
}
}
// ---------- 发请求 ----------
async function sendOne(wsId, route, attempt) {
attempt = attempt || 0;
const url = `/backend-api/accounts/${wsId}/invites/${route}`;
const headers = {
accept: "*/*",
authorization: "Bearer " + STATE.at,
"content-type": "application/json",
"oai-device-id": STATE.deviceId,
"oai-language": navigator.language || "en-US",
};
log(`→ POST /accounts/${wsId.slice(0,8)}/invites/${route} (第 ${attempt+1} 次)`);
try {
const res = await fetch(url, {
method: "POST", headers, body: "", mode: "cors", credentials: "include",
});
const text = await res.text();
if (res.ok) {
log(`✓ ${wsId.slice(0,8)} HTTP ${res.status}: ${text}`, "ok");
return true;
}
log(`✗ ${wsId.slice(0,8)} HTTP ${res.status}: ${text.slice(0,180)}`, "warn");
if (res.status === 401 || res.status === 403) {
log("子号 AT 失效,刷新 session...", "warn");
STATE.at = "";
await refreshSession();
if (attempt < CONFIG.maxRetries) {
await sleep(2000);
return sendOne(wsId, route, attempt + 1);
}
return false;
}
if (attempt < CONFIG.maxRetries) {
await sleep(CONFIG.retryBackoffMs * (attempt + 1));
return sendOne(wsId, route, attempt + 1);
}
return false;
} catch (e) {
log(`网络错误: ${e.message}`, "err");
if (attempt < CONFIG.maxRetries) {
await sleep(CONFIG.retryBackoffMs);
return sendOne(wsId, route, attempt + 1);
}
return false;
}
}
function parseWorkspaceIds() {
return CONFIG.workspaceIds.split(/[
,]+/).map(s => s.trim()).filter(Boolean);
}
async function runAll(route) {
if (STATE.running) { log("正在运行中,请稍候", "warn"); return; }
if (!STATE.at) {
log("无可用 AT,刷新 session...", "warn");
await refreshSession();
if (!STATE.at) { log("仍未取到 AT,请先登录 chatgpt.com", "err"); return; }
}
const ids = parseWorkspaceIds();
if (!ids.length) { log("未配置 workspace ID", "err"); return; }
STATE.running = true;
setBtns(false);
log(`开始处理 ${ids.length} 个 workspace(${route})`, "info");
let ok = 0;
for (const ws of ids) {
const r = await sendOne(ws, route);
if (r) ok++;
if (ids.length > 1) await sleep(CONFIG.intervalMs);
}
log(`完成:成功 ${ok}/${ids.length}`, ok === ids.length ? "ok" : "warn");
STATE.running = false;
setBtns(true);
}
function onATReady() {
if (!STATE.autoRan) {
STATE.autoRan = true;
runAll("request");
}
}
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
// ---------- UI ----------
let panelBody, userBarEl, reqBtnEl, accBtnEl, wsInputEl, saveBtnEl, dirty = false;
function setBtns(enabled) {
[reqBtnEl, accBtnEl].forEach(b => {
if (b) { b.disabled = !enabled; b.style.opacity = enabled ? "1" :
- "0.5"
- }
});
}
function updateUserBar(info, status) {
if (!userBarEl) return;
const c = { ok: "#2f855a", warn: "#b7791f", err: "#c53030" };
if (info && info.email) {
userBarEl.innerHTML =
`<span style="color:${c.ok}">●</span> <b>${info.email}</b> · ${info.plan_type||"?"} · ` +
`<code style="background:
- #edf2f7
- padding:1px 4px
- border-radius:3px">${(info.account_id||"").slice(0,8)}</code> · ` +
`<span style="color:#718096">${fmtExp(info.exp)}</span>`;
} else {
const msg = status === "err" ? "session 获取失败,请确认已登录" : "未检测到 AT,等待登录...";
userBarEl.innerHTML = `<span style="color:${c[status]||c.warn}">●</span> ${msg}`;
}
}
function markDirty() {
dirty = true;
if (saveBtnEl) {
saveBtnEl.textContent = "保存 *";
saveBtnEl.style.background = "#d69e2e";
saveBtnEl.style.color = "#fff";
}
}
function markClean() {
dirty = false;
if (saveBtnEl) {
saveBtnEl.textContent = "已保存";
saveBtnEl.style.background = "#38a169";
saveBtnEl.style.color = "#fff";
}
setTimeout(() => {
if (!dirty && saveBtnEl) {
saveBtnEl.textContent = "保存";
saveBtnEl.style.background = "#edf2f7";
saveBtnEl.style.color = "#4a5568";
}
}, 1500);
}
function buildPanel() {
const css = `
.jr-panel{position:
- fixed
- top:14px
- right:14px
- width:${CONFIG.panelWidth}px
background:
- #fff
- border:1px solid #e2e8f0
- border-radius:14px
box-shadow:
- 0 12px 32px rgba(0,0,0,.16)
- z-index:99999
font:
- 13px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif
- color:#1a202c
- overflow:hidden}
.jr-head{padding:
- 11px 16px
- background:linear-gradient(135deg,#3182ce,#2b6cb0)
- color:#fff
display:
- flex
- justify-content:space-between
- align-items:center}
.jr-title{font-weight:
- 600
- font-size:13px
- letter-spacing:.3px
- display:flex
- align-items:center
- gap:6px}
.jr-title svg{width:
- 16px
- height:16px
- fill:#fff}
.jr-ver{font-size:
- 11px
- opacity:.85
- background:rgba(255,255,255,.2)
- padding:1px 6px
- border-radius:8px}
.jr-sub{padding:
- 9px 16px
- background:#f7fafc
- border-bottom:1px solid #edf2f7
- font-size:12px
- color:#4a5568
- min-height:22px}
.jr-sec{padding:
- 12px 16px
- border-bottom:1px solid #edf2f7}
.jr-label{display:
- flex
- justify-content:space-between
- align-items:center
- font-size:11px
- color:#718096
margin-bottom:
- 6px
- font-weight:600
- letter-spacing:.4px
- text-transform:uppercase}
.jr-label .jr-count{font-size:
- 10px
- color:#a0aec0
- font-weight:400
- text-transform:none
- letter-spacing:0}
.jr-ta{width:
- 100%
- box-sizing:border-box
- border:1px solid #e2e8f0
- border-radius:8px
padding:
- 8px 10px
- font:12px/1.5 monospace
- color:#2d3748
- background:#fff
- transition:.15s
- min-height:64px
- resize:vertical}
.jr-ta:
- focus{outline:0
- border-color:#3182ce
- box-shadow:0 0 0 3px rgba(49,130,206,.12)}
.jr-save-row{display:
- flex
- justify-content:flex-end
- margin-top:8px}
.jr-body{padding:
- 10px 16px
- max-height:36vh
- overflow:auto}
.jr-foot{padding:
- 10px 16px
- border-top:1px solid #edf2f7
- display:flex
- gap:8px
- justify-content:flex-end
- flex-wrap:wrap}
.jr-line{padding:
- 3px 0
- word-break:break-all
- border-bottom:1px dashed #f1f5f9}
.jr-line:last-child{border-bottom:0}
.jr-info{color:#2b6cb0}.jr-ok{color:#2f855a}.jr-warn{color:#b7791f}.jr-err{color:#c53030}
.jr-btn{cursor:
- pointer
- border:0
- border-radius:7px
- padding:7px 14px
- font-size:12px
- font-weight:500
- transition:.15s}
.jr-btn-primary{background:
- #3182ce
- color:#fff}.jr-btn-primary:hover{background:#2b6cb0}
.jr-btn-green{background:
- #38a169
- color:#fff}.jr-btn-green:hover{background:#2f855a}
.jr-btn-ghost{background:
- #edf2f7
- color:#4a5568}.jr-btn-ghost:hover{background:#e2e8f0}
.jr-btn:
- disabled{cursor:not-allowed
- opacity:.5}
.jr-hint{font-size:
- 11px
- color:#a0aec0
- padding:6px 0 0 0
- line-height:1.5}
`;
const style = document.createElement("style");
style.textContent = css;
document.head.appendChild(style);
const p = document.createElement("div");
p.className = "jr-panel";
p.innerHTML = `
<div class="jr-head">
<span class="jr-title">
<svg viewBox="0 0 24 24"><path d="M15 4l6 6-10 10H5v-6L15 4zm-1 1L7 12l5 5 7-7-5-5z"/></svg>
Workspace Join Request
</span>
<span class="jr-ver">v4.0</span>
</div>
<div class="jr-sub" id="jr-user">未检测到 AT,等待登录...</div>
<div class="jr-sec">
<label class="jr-label">
<span>母号 Workspace ID</span>
<span class="jr-count" id="jr-count">0 个</span>
</label>
<textarea class="jr-ta" id="jr-ws" placeholder="一行一个 UUID
acfb4e38-524c-4dc8-b4cf-fb3d0ce28b25"></textarea>
<div class="jr-save-row">
<button class="jr-btn jr-btn-ghost" id="jr-save" style="padding:5px 14px">保存</button>
</div>
<div class="jr-hint">只需子号 AT + workspace ID。request = 主动申请加入;accept = 接受已有邀请。</div>
</div>
<div class="jr-body" id="jr-body"></div>
<div class="jr-foot">
<button class="jr-btn jr-btn-ghost" id="jr-refresh">刷新 AT</button>
<button class="jr-btn jr-btn-green" id="jr-accept">Accept</button>
<button class="jr-btn jr-btn-primary" id="jr-run">Request</button>
</div>
`;
document.body.appendChild(p);
panelBody = p.querySelector("#jr-body");
userBarEl = p.querySelector("#jr-user");
reqBtnEl = p.querySelector("#jr-run");
accBtnEl = p.querySelector("#jr-accept");
wsInputEl = p.querySelector("#jr-ws");
saveBtnEl = p.querySelector("#jr-save");
const countEl = p.querySelector("#jr-count");
// 填入已保存值
wsInputEl.value = CONFIG.workspaceIds;
const updateCount = () => {
const n = wsInputEl.value.split(/[
,]+/).map(s=>s.trim()).filter(Boolean).length;
countEl.textContent = `${n} 个`;
};
updateCount();
// 编辑标记 dirty
wsInputEl.addEventListener("input", () => {
markDirty();
updateCount();
});
// 保存
saveBtnEl.addEventListener("click", () => {
CONFIG.workspaceIds = wsInputEl.value;
saveConfig(CONFIG);
markClean();
log("workspace 已保存", "ok");
});
// 按钮
reqBtnEl.addEventListener("click", () => runAll("request"));
accBtnEl.addEventListener("click", () => runAll("accept"));
p.querySelector("#jr-refresh").addEventListener("click", async () => {
log("手动刷新 session...", "info");
await refreshSession();
});
}
function log(msg, level) {
const styles = { info: "jr-info", ok: "jr-ok", warn: "jr-warn", err: "jr-err" };
const time = new Date().toLocaleTimeString();
console.log("%c[JoinReq]", "color:
- #3182ce
- font-weight:bold", msg)
if (panelBody) {
const line = document.createElement("div");
line.className = `jr-line ${styles[level] || "jr-info"}`;
line.textContent = `[${time}] ${msg}`;
panelBody.appendChild(line);
panelBody.scrollTop = panelBody.scrollHeight;
}
}
// ---------- 启动 ----------
function boot() {
buildPanel();
log("脚本已加载 v4.0", "info");
log("只需子号 AT + workspace ID", "info");
log("request = 主动申请 · accept = 接受邀请", "info");
refreshSession();
setInterval(refreshSession, CONFIG.sessionPollMs);
window.addEventListener("focus", () => { if (!STATE.running) refreshSession(); });
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", boot);
} else {
boot();
}
})();

4.运行成功后点击脚本的 accept 加入空间
5.刷新页面或新开页面

切换到空间,选中空间进行切换,不切换到空间的话,后续导出json会是Free,这里要注意
6.打开session链接

评论区获取 https://chatgpt.com/api/auth/session,获取session信息全选复制
7.打开session转换工具链接

评论区获取 https://gpt.learnlicen.dpdns.org/ 进行 session 转换,转换完成后导入账号使用

8.导入 cockpit tools 进行使用

导入token(可选,看自己习惯用哪个工具就用哪个)

9.导入完成进行使用

注意项

一定要用别名邮箱,别用自己的邮箱,不然后续封号就麻烦了,大家快蹬起来吧

通过Gmail邮箱别名+K12空间,免费白嫖ChatGPT Plus团队版。从注册GPT到一键加入workspace空间,再到导出session转换token,全流程保姆级实操演示。

⏱️ 时间轴

📎 本视频涉及资源

• ChatGPT官网: https://chatgpt.com/

• Session接口: https://chatgpt.com/api/auth/session

• Session转换工具: https://gpt.learnlicen.dpdns.org/

⚠️ 不适合完全没概念的小白,需要一定技术基础。每个Gmail支持创建5个别名邮箱,务必使用别名而非主邮箱。

注意,相关视频中的内容,命令,脚本,代码,都在博客文章中会有 🔗https://869hr.uk

短信及语音接码平台

纯净住宅IP白嫖流量

  1. 微信讨论群:https://qr.869hr.uk/aitech
  2. 超过100T资料总站网站:https://doc.869hr.uk
  3. Telegram群聊:https://t.me/tgmShareAI
  4. 微信公众号:搜“AI前沿的短裤哥”
  5. 视频的文字博客(银行卡、手机号、VPS主机、IP测试等):https://869hr.uk
  6. 推特:https://x.com/gxjdian
  7. Youtube:https://youtube.com/@gxjdian

VPS 主机推荐

VPS DMIT

VPS VIRCS

账号、礼品卡与 AI 产品充值

eSIM 与支付卡推荐

  1. 三家eSIM 让国产手机秒变eSIM手机,全方面优缺点对比及开户链接🔗 https://s.869hr.uk/mcc

  2. eSIM 9eSIM打 9 折(优惠码:maq)注册及购买链接 https://www.9esim.com/?coupon=maq

  3. eSIM ESTK打 9 折(优惠码:GXJDIAN)注册及购买链接 https://store.estk.me/zh?aid=16007

  4. eSIM XeSIM打 9 折(推荐码:gxjdian)注册及购买链接 https://xesim.cc/?DIST=RE5FHg==

  5. wise的申请链接及教程链接(有身份证就可,推荐码:lizhiw12) (教程链接https://x.com/wlzh/status/19967997897…) (申请链接https://wise.com/invite/ihpc/lizhiw12)

  6. N26 的申请链接及教程链接 (需要护照, 推荐码:lizhiw02766c ) https://youtu.be/HY9OD8rX89s?si=78REb8MyKSJB6cwQ

  7. Bybit支付卡申请链接 (推荐码:LGNQRG)https://youtu.be/3sN7P2t_CeA

  8. YiKa虚拟卡实操开卡教程,不需KYC,一个邮箱开50张卡,订阅ChatGPT/Claude/推特蓝V出海必备 https://youtu.be/XaLeXKu4PTM

YouTube 播放列表

参考链接