# ttt **Repository Path**: lysimportant/ttt ## Basic Information - **Project Name**: ttt - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-04 - **Last Updated**: 2026-08-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GPT Register Pipeline > 🌐 语言 / Language: **[中文](README.md)** · [English](README_EN.md) ChatGPT / OpenAI 账号自动注册与 Codex OAuth 授权工具。当前项目支持三套注册驱动: - **protocol**:原纯协议注册,基于 `curl_cffi` + Sentinel/PoW。 - **roxy**:RoxyBrowser 指纹浏览器 + Selenium 自动化注册,兼容新版页面流,例如 `create-account/password`、`about-you` 年龄/生日表单、地区本地化页面等。 - **cloak**:CloakBrowser + Playwright 适配层自动化注册,支持免费 binary、无头模式、humanize、固定 fingerprint seed、代理 geoip。 - **browser_use**:Browser Use Cloud stealth Chromium + Playwright(可选住宅代理,无需本机安装 Roxy)。 - **skyvern**:Skyvern Browser Sessions 云端浏览器 + Playwright CDP。 项目提供 **CLI** 和 **本地 WebUI** 两种使用方式。日常推荐使用 WebUI。 --- ## 功能概览 ### 注册 - 批量注册 ChatGPT 账号。 - 支持注册驱动切换: - `REGISTRATION_DRIVER = "protocol"` - `REGISTRATION_DRIVER = "roxy"` - `REGISTRATION_DRIVER = "cloak"` - `REGISTRATION_DRIVER = "browser_use"` - `REGISTRATION_DRIVER = "skyvern"` - 支持 RoxyBrowser 一号一环境:自动创建、打开、关闭、删除 Roxy Profile。 - 支持 Roxy 无头启动:`ROXY_OPEN_HEADLESS=True`。 - 支持 CloakBrowser:免费 binary、无头模式、humanize、固定 fingerprint seed、按出口 IP 自动匹配语言/时区/WebRTC。 - Roxy / Cloak 浏览器注册已兼容: - 填邮箱后直接进入邮箱验证码页; - 填邮箱后先进入 `create-account/password`,自动设置密码再继续; - `about-you/profile` 页面直接输入年龄数字; - `about-you/profile` 页面输入年月日生日; - React Aria birthday select / spinbutton 年月日控件; - 不同出口 IP / 不同页面语言下按钮顺序变化导致的三方登录误点问题。 ### 邮箱来源 支持多种邮箱来源: - Outlook 邮箱池:`email----password----clientId----refreshToken` - Cloudflare 域名邮箱 + QQ 邮箱 IMAP 收信(`cloudflare_domain`) - Cloudflare Worker 临时邮箱:自动创建 + JWT 取码(`cloudflare`,兼容 cloudflare_temp_email) - 通用 API 邮箱:`email----取码地址` - GPTMail 临时邮箱 API:运行时随机生成邮箱并自动收取验证码 - `EMAIL_SOURCE` 支持多个来源组合,例如: ```python EMAIL_SOURCE = "outlook,generic_api" ``` - MailNest-迈巢:Outlook 临时邮箱 ### Codex OAuth - 注册成功后可自动跑 Codex OAuth。 - Codex 授权驱动可选: - `CODEX_OAUTH_DRIVER = "protocol"` - `CODEX_OAUTH_DRIVER = "roxy"` - `CODEX_OAUTH_DRIVER = "cloak"` - `CODEX_OAUTH_DRIVER = "browser_use"` - `CODEX_OAUTH_DRIVER = "same_as_registration"` - 支持 CPA 管理接口生成授权 URL,并提交 OAuth callback。 - 支持接码平台: - GrizzlySMS - 本地 L 取号服务,见 `L_API.md` - 手机验证支持自动取号、填号、收码、提交、失败换号重试。 - Codex 凭证落盘到 `codex_accounts/`。 ### WebUI - 批量启动注册任务。 - 实时查看任务日志。 - 动态调整注册线程数,提交后新任务立即使用最新值。 - 批量补跑 Codex,补跑线程数每次提交即时生效。 - 管理账号、邮箱池、Codex 凭证;账号页支持复制全部/选中整行,邮箱池列表展示导入时间、已用时间和状态。 - 配置页支持热加载,保存后无需重启。 - Roxy 团队/项目可在配置页获取并保存。 --- ## 环境要求 - Python 3.10+ - Node.js 18+ - 可用代理、系统代理/VPN,或 RoxyBrowser 代理环境 - 如使用 Roxy 注册:需要本机 RoxyBrowser API 可访问 - 如使用 Cloak 注册:首次运行会自动下载 Cloak Chromium binary;`CLOAK_GEOIP=True` 需要 `cloakbrowser[geoip]` 依赖 - 如启用 Codex 自动授权:需要接码平台配置 安装依赖: ```bash pip install -r requirements.txt node --version ``` ### 密钥配置(.env) 重要 API Key 请放在项目根目录 `.env`,不要写进 `config/*.py`。 ```bash cp .env.example .env # 编辑 .env,例如: # BROWSER_USE_API_KEY=... # ROXY_API_TOKEN=... ``` 当前支持从 `.env` 读取的密钥: - `WEBUI_AUTH_CODE`(WebUI 登录授权码) - `WEBUI_SESSION_SECRET`(可选,Session Cookie 签名密钥) - `BROWSER_USE_API_KEY` - `SKYVERN_API_KEY` - `ROXY_API_TOKEN` - `QQ_IMAP_PASSWORD` - `CLOUDFLARE_API_KEY` / `CLOUDFLARE_CUSTOM_AUTH`(`EMAIL_SOURCE=cloudflare` 时) - `CPA_MANAGEMENT_KEY` - `SMS_API_KEY` - `L_ADMIN_AUTH_CODE` - `H_ADMIN_AUTH_CODE` WebUI 配置页保存这些字段时会写入 `.env`(不是 config 源码)。 --- ## 快速开始 ### 流水线全景 ```mermaid flowchart LR A[iCloud 隐藏邮件别名
Hide My Email] -->|icloud_hme_generator.py| B[icloud_accounts.json
aliases 池] B -->|pick_account 取未用别名| C[注册 GPT 免费账号
main.py / pipeline.py] C -->|REGISTRATION_DRIVER| D{注册驱动
protocol / roxy
cloak / browser_use / skyvern} C -->|注册成功| E[注册成功账号] E -->|Codex OAuth 自动授权| F[接码平台取号
GrizzlySMS / 本地 H / hero-sms] F --> G[codex_accounts/*.json
凭证文件] G -->|SFTP 导入| H[VPS CPA
/root/codex/] H --> I[cli-proxy-api
实时加载] ``` ### 最短路径(5 分钟跑通) 推荐用 WebUI,最短链路如下: 1. **准备配置**:`cp .env.example .env`,填入必要密钥(见下方「密钥配置」)。 2. **准备 iCloud 别名**:把浏览器里 Hide My Email 请求的 cookie 存进 `icloud_hme_cookie.txt`,再跑 `python icloud_hme_generator.py --count 5` 生成 5 个别名写入 `icloud_accounts.json`。 3. **启动 WebUI**:`python web.py`(或 `python main.py`),浏览器打开,在配置页设置 邮箱源 / 注册驱动 / 代理 / Codex OAuth。 4. **批量注册**:在 WebUI 启动注册任务,脚本自动完成 注册 → Codex 接码 → 导入 VPS;终端用户直接拿 VPS 里的 codex 凭证。 > 纯 CLI 用户可参考后续「CLI 使用方式」与「🚀 完整流水线」章节。 ### WebUI 授权码 WebUI 启动后,除 `/login` 外所有页面和 `/api/*` 接口都会校验授权码。推荐在 `.env` 中配置: ```dotenv WEBUI_AUTH_CODE=你的授权码 ``` 也可以启动时直接传入: ```bash python web.py --auth-code 你的授权码 ``` 优先级:`--auth-code` > `.env`/环境变量。若都未设置,启动时会在日志中生成并打印本次临时授权码。接口调用可使用登录后的 Cookie,或传 `X-Auth-Code: <授权码>` / `Authorization: Bearer <授权码>`。 `WEBUI_SESSION_SECRET` 可选;未设置时会从固定授权码派生稳定的 Session 签名密钥,修改授权码后已有登录会自动失效。 ### 1. 配置邮箱源 #### Outlook 邮箱池 复制示例文件: ```bash cp 用于注册的邮箱.txt.example 用于注册的邮箱.txt ``` 每行格式: ```text email----password----clientId----refreshToken ``` 也可以在 WebUI 的「邮箱池」页面导入。 #### 通用 API 邮箱 每行格式: ```text email----code_url ``` 在 `config/email.py` 设置: ```python EMAIL_SOURCE = "generic_api" ``` 或使用组合来源: ```python EMAIL_SOURCE = "outlook,generic_api,mailnest" ``` #### GPTMail 临时邮箱 在 WebUI 的「配置 → 邮箱 / OTP」填写 `GPTMail API Key`,然后将邮箱来源设置为: ```python EMAIL_SOURCE = "gptmail" ``` 也可以在项目根目录 `.env` 中填写: ```dotenv GPTMAIL_API_KEY=你的_GPTMail_API_Key ``` 服务地址固定为 `https://mail.chatgpt.org.uk`。未填写 Key 时,任务会提示填写 `GPTMail API Key`,不会使用公共测试 Key。 #### Cloudflare Worker 临时邮箱(`cloudflare`) 兼容 `cloudflare_temp_email` 类 Worker:注册时自动创建域名邮箱,并用 JWT 轮询收件箱提取 OpenAI 六位验证码。 (与下方 `cloudflare_domain` / QQ IMAP 方案不同,请勿混用标识。) ```dotenv EMAIL_SOURCE=cloudflare CLOUDFLARE_API_BASE=https://你的-worker-api-域名 CLOUDFLARE_API_KEY=你的_ADMIN_PASSWORD CLOUDFLARE_AUTH_MODE=x-admin-auth # admin 创建时常用: # CLOUDFLARE_PATH_ACCOUNTS=/admin/new_address CLOUDFLARE_DEFAULT_DOMAINS=你的收信域名.com ``` 匿名模式可将 `CLOUDFLARE_AUTH_MODE=none` 且 Key 留空,创建路径默认 `/api/new_address`;若被 Turnstile 拦截请改用 admin 模式。更多字段见 WebUI「配置 → 邮箱 / OTP」或 `.env.example`。 #### Cloudflare 域名邮箱(`cloudflare_domain`) 在 `config/email.py` 设置: ```python EMAIL_SOURCE = "cloudflare_domain" EMAIL_DOMAIN = "你的域名" QQ_EMAIL = "你的QQ邮箱" QQ_IMAP_PASSWORD = "QQ邮箱IMAP授权码" ``` Cloudflare Email Routing 需要把域名邮件转发到 QQ 邮箱。此模式不调用 Worker 创建接口,仅本地生成地址并通过 QQ IMAP 取件。 #### MailNest-迈巢 Outlook 临时邮箱 可直接在 Web-UI 中配置 API Key 与项目代码`MAIL_NEST_PROJECT_CODE`,也可以在配置文件中配置。 - `api-key`获取页面:https://mailnest.top/account - 项目代码获取页面:https://mailnest.top/buy-email。默认为`chatgpt001`,可以直接使用 --- ### 2. 配置注册驱动 编辑 `config/roxybrowser.py`,或直接在 WebUI「配置」页修改。 #### 使用 RoxyBrowser 注册 ```python REGISTRATION_DRIVER = "roxy" # 可选 protocol / roxy / cloak ROXY_API_BASE = "http://127.0.0.1:50100" ROXY_API_TOKEN = "你的Roxy API Key" ROXY_WORKSPACE_ID = "你的workspaceId" ROXY_PROJECT_ID = "你的projectId" ROXY_ONE_PROFILE_PER_ACCOUNT = True ROXY_DELETE_PROFILE_AFTER_RUN = True ROXY_CREATE_USE_PROXY_POOL = True ``` 如要无头: ```python ROXY_OPEN_HEADLESS = True ``` #### 使用 CloakBrowser 注册 如需改用 CloakBrowser,先安装依赖: ```bash pip install -r requirements.txt ``` 然后在 `config/roxybrowser.py` 或 WebUI 配置页把注册驱动改为: ```python REGISTRATION_DRIVER = "cloak" ``` 再在 `config/codex.py` 或 WebUI「CPA / Codex」分组设置 Codex 授权驱动: ```python CODEX_OAUTH_DRIVER = "same_as_registration" # 跟随注册驱动 # 或单独指定:"protocol" / "roxy" / "cloak" / "browser_use" ``` CloakBrowser 专用配置在 `config/cloakbrowser.py`: ```python CLOAK_HEADLESS = False # True=无头;False=显示窗口 CLOAK_HUMANIZE = True # 人工鼠标/键盘/滚动行为 CLOAK_GEOIP = True # 按当前出口 IP 自动匹配语言/时区/WebRTC CLOAK_LOCALE = "" # 留空自动;也可强制如 ja-JP / en-US CLOAK_TIMEZONE = "" # 留空自动;也可强制如 Asia/Tokyo CLOAK_LICENSE_KEY = "" # 留空使用免费 binary;填 Pro key 使用最新版 CLOAK_FINGERPRINT_SEED = "" # 留空每次随机;固定值=固定指纹 CLOAK_USER_DATA_DIR = "" # 留空临时环境;填路径可持久化 profile ``` 说明: - `CLOAK_GEOIP=True` 会按当前出口 IP 自动生成 `locale / timezone / Accept-Language`,并传给 CloakBrowser 与 Playwright context。 - 如果你通过项目代理池使用代理,请在 `config/proxy.py` 的 `PROXY_POOL` 填写代理;如果你使用系统代理/VPN,也会按当前实际出口 IP 自动定位。 - 免费版没有在项目侧限制窗口数;本项目每个注册任务会启动一个 CloakBrowser 实例,即一个实例一套指纹。 - WebUI 中,`Codex授权驱动` 位于「CPA / Codex」分组,对应 `config/codex.py` 的 `CODEX_OAUTH_DRIVER`。 #### 使用协议注册 ```python REGISTRATION_DRIVER = "protocol" ``` 协议注册会使用 `curl_cffi`、Sentinel/PoW、代理池等配置。 #### 使用 Browser Use Cloud 注册 ```python REGISTRATION_DRIVER = "browser_use" ``` 并在 `config/browser_use.py` 或 WebUI「配置 → Browser Use」填写: ```python BROWSER_USE_API_KEY = "你的 Browser Use API Key" BROWSER_USE_PROXY_COUNTRY_CODE = "jp" # 可选:us/sg/de... BROWSER_USE_USE_PROXY = True BROWSER_USE_FAST_MODE = True # 推荐开启:减少 Browser Use 额外等待 BROWSER_USE_LOG_TIMING = True # 输出阶段耗时日志,方便定位慢点 BROWSER_USE_SESSION_TIMEOUT = 240 # Browser Use keepAlive/timeout,单位分钟;创建远端浏览器时保持活跃更久 ``` 如希望注册成功后也用 Browser Use 自动跑 Codex OAuth: ```python ENABLE_CODEX_AUTO = True CODEX_OAUTH_DRIVER = "browser_use" # 或 CODEX_OAUTH_DRIVER = "same_as_registration",当 REGISTRATION_DRIVER="browser_use" 时自动跟随 ``` 依赖: ```bash uv pip install playwright --python .venv/bin/python # 或 pip install playwright ``` 说明: - Browser Use 走远端 stealth Chromium,通过 Playwright `connect_over_cdp` 控制。 - `BROWSER_USE_SESSION_TIMEOUT=240` 会在 Browser Use 创建/连接远端浏览器时设置较长 keepAlive(connect URL 的 `timeout` 参数,单位分钟),避免等待邮箱 OTP、短信或 callback 时云端会话提前回收;代码会限制到 `1~240`。 - 如果第一次进入邮箱验证码页且邮箱里实际已有验证码,但程序没取到,通常是 Outlook 取件链路抖动:Graph TLS/REST/IMAP 某一轮失败、短轮询切片过短、或 `after_ts` 过滤边界过紧。Browser Use 驱动已放宽 Outlook 单轮取件切片、提前记录验证码过滤时间,并会在等待邮箱 OTP 超时后尝试点击重发继续等待;重发入口使用 DOM 结构/位置/属性启发式定位,不依赖页面文案或 OCR/文字识别。可在「邮箱 / OTP」把 `OTP_MAX_WAIT` 调大到 `180~240`,`OUTLOOK_FETCH_MODE` 优先用 `auto`。 - Outlook 取件日志会显示验证码来源:`source=graph`、`source=outlook_rest`、`source=imap_new`、`source=imap_entra_outlook`、`source=remote_graph` 或 `source=remote_imap`,便于判断是哪条链路成功取码。 - `BROWSER_USE_FAST_MODE=True` 会跳过大部分人工节奏等待;`BROWSER_USE_LOG_TIMING=True` 会打印连接、打开页面、邮箱、OTP、手机、callback 等阶段耗时。 - 支持作为 Codex OAuth 授权驱动:`CODEX_OAUTH_DRIVER="browser_use"`,可完成授权页面、邮箱 OTP、手机短信验证与 callback 捕获。 - 适合不想安装本机 Roxy、又想要 session 隔离 + 云端代理的场景。 - 免费额度/并发以 Browser Use 官方定价页为准。 --- ### 3. 配置代理 编辑 `config/proxy.py`: ```python PROXY_POOL = [ "http://user:pass@host:port", ] ``` Roxy 一号一环境开启 `ROXY_CREATE_USE_PROXY_POOL=True` 时,会从这里随机取代理写入 Roxy Profile。 --- ### 4. 配置 Codex OAuth 如不需要 Codex,关闭: ```python ENABLE_CODEX_AUTO = False ``` 如需要自动授权: ```python ENABLE_CODEX_AUTO = True # config/codex.py CODEX_OAUTH_DRIVER = "browser_use" # 可选 protocol / roxy / cloak / browser_use / skyvern / same_as_registration ``` 接码配置在 `config/codex.py`: ```python SMS_PROVIDER = "l" # 可选 grizzly / l / h SMS_API_KEY = "你的 GrizzlySMS key" # 仅 GrizzlySMS 需要 SMS_SERVICE = "openai" SMS_COUNTRY = "国家代码" SMS_MAX_RETRIES = 10 SMS_CODE_WAIT = 120 SMS_POLL_INTERVAL = 5 # 若 SMS_PROVIDER="h",H 固定复用: # SMS_SERVICE -> H projectId # SMS_COUNTRY -> H country H_API_BASE = "http://localhost:8788" H_ADMIN_AUTH_CODE = "你的H后台授权码" ``` CPA 授权地址来源: ```python CODEX_AUTH_URL_SOURCE = "cpa" CPA_MANAGEMENT_URL = "你的CPA管理地址" CPA_MANAGEMENT_KEY = "你的CPA管理密钥" ``` --- ## 🚀 完整流水线(邮件 → GPT 账号 → 短信接码 → 部署) 项目自带一个端到端编排脚本 `pipeline.py`,把四段能力串成一条全自动流水线: | 阶段 | 做什么 | 脚本 | |---|---|---| | 1. email | 生成 iCloud Hide My Email 别名(你自己的 iCloud+ 账号) | `icloud_hme_generator.py` | | 2. register | 用别名注册 GPT 账号(邮箱 OTP,`EMAIL_SOURCE=icloud`) | `main.py` | | 3. codex | 对注册成功账号做 Codex OAuth + 短信接码(**独立手机号一次性验证**) | `test_one_codex.py` | | 4. deploy | 把 Codex 凭证导入 VPS / CPA | `import_codex_to_cpa.py` | 一键跑全流程(5 个账号,哥伦比亚 $0.055 号): ```bash python pipeline.py --count 5 --sms-country 33 ``` 只跑前两段(先生成别名 + 注册 GPT,稍后再接码): ```bash python pipeline.py --count 5 --stages email,register ``` 跑前三段、不部署 VPS: ```bash python pipeline.py --count 5 --skip-deploy ``` 前置条件: - `icloud_hme_cookie.txt`:粘贴你登录 icloud.com 后的 Hide My Email 会话 cookie(见 `icloud_hme_generator.py` 头部说明)。 - `icloud_accounts.json`:含 `primary`(真实 iCloud 邮箱 + App 专用密码)与 `aliases` 列表(由阶段 1 自动追加)。 - `.env`:接码平台 Key(`SMS_API_KEY`)、代理、VPS 信息(阶段 4 需要 `VPS_HOST/USER/PASS`)。 合规边界: - 每个账号使用**独立 iCloud 别名 + 独立手机号**做一次性验证(一个手机号对应一个账号),不绕过平台验证。 - `pipeline.py` 默认 `SMS_PROVIDER=hero`(GrizzlySMS 一次性号),**不启用** `h_backend_server.py` 的一号多账号复用模式。 - 仅用于自动化你自己拥有资源的账号注册与授权。 --- ## 使用方式 ## WebUI 推荐方式 启动: ```bash python web.py --open-browser ``` 默认地址: ```text http://127.0.0.1:5000 ``` 可指定端口: ```bash python web.py --port 8000 --open-browser ``` 允许局域网访问: ```bash python web.py --host 0.0.0.0 --port 5000 ``` WebUI 页面说明: | 页面 | 功能 | |---|---| | 注册 | 设置注册数量、线程数,启动批量注册,查看任务和日志 | | 账号 | 查看账号、复制 token、补跑 Codex、批量删除账号 | | Codex 授权 | 查看/下载/删除 `codex_accounts/` 凭证 | | 邮箱池 | 导入邮箱、筛选来源、标记可用/失败、删除邮箱 | | 配置 | 修改运行配置并热加载,含 Roxy、Codex、邮箱、代理、人工节奏等 | ### 线程数说明 - 注册线程数在每次点击「开始注册」时读取。 - 如果线程数和上次不同,新提交任务会使用新线程池。 - 旧线程池里已经排队/运行的任务会继续跑完,不会被强制取消。 - Codex 批量补跑每次都会按本次提交的补跑线程数创建独立线程池。 --- ## CLI 使用方式 注册 1 个: ```bash python main.py ``` 批量注册 10 个,3 线程: ```bash python main.py -n 10 --workers 3 --continue-on-fail ``` 详细日志: ```bash python main.py -n 1 --verbose ``` 参数: | 参数 | 说明 | 默认 | |---|---|---| | `-n, --count` | 注册数量 | 1 | | `--workers` | 并发线程数 | 1 | | `--delay` | 每次注册结束后的间隔秒数 | 0 | | `--continue-on-fail` | 单个失败后继续 | False | | `--verbose` | DEBUG 日志 | False | --- ## Codex 补跑 WebUI 账号页可单个或批量补跑 Codex。 CLI 单独补跑: ```bash python tools/test_codex_oauth.py --email <已注册邮箱> --verbose ``` 补跑会消耗: - 1 次邮箱 OTP - 1 个接码号码 补跑日志在: ```text 注册日志/codex-retry-邮箱.log ``` --- ## 注册密码说明 Roxy 注册如果遇到新版流程: ```text /create-account/password ``` 会自动设置密码。 密码来源: 1. 优先使用 `config/register.py`: ```python REGISTER_PASSWORD = "你的固定密码" ``` 2. 如果为空,自动生成 14 位强密码,包含大写、小写、数字、符号。 保存位置: - 账号 `extra_json.registration_password` - 批次归档 `accounts/YYYYMMDD-.../注册成功账号.json` 的 `extra.registration_password` 注意:账号表里的 `password` 字段仍用于 Outlook 邮箱素材密码,不会被 OpenAI 注册密码覆盖。 --- ## 重要配置文件 | 文件 | 说明 | |---|---| | `config/roxybrowser.py` | 注册驱动、Roxy API、Roxy 环境生命周期 | | `config/cloakbrowser.py` | CloakBrowser 无头/humanize/geoip/语言时区/指纹 seed | | `config/codex.py` | Codex OAuth、授权驱动、CPA 管理接口、接码平台 | | `config/email.py` | 邮箱来源、OTP 轮询、QQ IMAP、域名邮箱、Cloudflare Worker 临时邮箱 | | `config/proxy.py` | 代理池 | | `config/register.py` | 默认邮箱、密码、显示名 | | `config/twofa.py` | 2FA 开关 | | `config/humanize.py` | 随机停顿/人工节奏 | | `config/flow_trigger.py` | 注册成功后触发 Flow | | `config/browser.py` | 协议模式浏览器指纹 | | `config/openai_protocol.py` | OpenAI OAuth/Sentinel 参数 | WebUI 配置页保存后会调用热加载;Roxy、Codex、邮箱、代理、人工节奏等常用项可立即生效。 --- ## 数据与产物 | 路径 | 内容 | |---|---| | `用于注册的邮箱.txt/json` | Outlook 邮箱池及状态 | | `用于注册的API邮箱.txt/json` | 通用 API 邮箱池及状态 | | `注册成功的邮箱.txt/json` | 注册成功账号 | | `注册成功的token.txt` | ChatGPT access token | | `accounts/` | 每次运行的批次归档 | | `codex_accounts/` | Codex OAuth 凭证 JSON | | `注册任务.json` | WebUI 注册任务表 | | `注册日志/` | 注册任务日志、Codex 补跑日志 | | `accounts_viewer.html` | 本地账号查看页 | 批次目录示例: ```text accounts/20260709-10个-3线程/ ├── 注册成功的邮箱.txt ├── 注册成功的token.txt ├── 注册成功整行.txt └── 注册成功账号.json ``` --- ## 当前主流程 ### Roxy 注册流程 ```text 创建/打开 Roxy Profile ↓ 打开 chatgpt.com/auth/login ↓ 按 DOM 技术属性定位邮箱输入框,避免误点 Google/Apple/Microsoft ↓ 提交邮箱表单 ↓ 如进入 create-account/password:设置密码并提交 ↓ 等待邮箱验证码页 ↓ 读取邮箱 OTP 并提交 ↓ 如进入 about-you/profile:填写姓名 + 年龄或生日 ↓ 进入 ChatGPT,读取 /api/auth/session accessToken ↓ 可选 2FA ↓ 可选 Codex OAuth ↓ 保存账号与批次归档 ↓ 关闭/删除 Roxy Profile ``` ### Codex Roxy 授权流程 ```text 获取 Codex 授权地址(CPA 或 local PKCE) ↓ Roxy 打开授权页 ↓ 邮箱登录 + 邮箱 OTP ↓ 手机号验证:取号 → 填号 → 发送 → 等短信 → 填 OTP ↓ 等待 consent/workspace/callback ↓ 提交 callback 给 CPA 或本地换 token ↓ 保存 codex_accounts/codex-邮箱*.json ``` --- ## 常见问题 ### 配置保存后没生效? WebUI 配置页保存后会热加载。Codex 补跑线程启动前也会重新热加载一次配置。 如果你直接手改 `config/*.py`,CLI 进程需要重启;WebUI 建议在配置页修改。 ### Roxy 无头保存后仍弹窗口? 检查: ```python ROXY_OPEN_HEADLESS = True ``` 并确认 Roxy 版本支持 `/browser/open` 的 `headless` 参数。日志会打印实际传入的 `headless`。 ### 出口 IP 不是日本时点到 Google 登录? 当前 Roxy 注册邮箱入口已改为只按 DOM 技术属性定位,并排除三方登录按钮。不会再靠按钮文字匹配“Continue”。 ### Codex 显示 `Check your phone` 被误判失败? 已兼容:`Check your phone / Enter the verification code...` 会识别为手机验证码页,进入等待短信验证码流程。 ### 手机 OTP 提交后日志曾显示失败,但后面成功? 已修复:提交手机 OTP 后会等待页面离开手机号流程或 callback,不再 3 秒后用旧页面文案误判失败。 ### Codex 失败但注册成功怎么办? 账号会保存,Codex 状态会标记失败。可以在 WebUI 账号页点击补跑,或使用: ```bash python tools/test_codex_oauth.py --email <邮箱> --verbose ``` ### Cloudflare Worker 邮箱怎么配? 将 `EMAIL_SOURCE` 设为 `cloudflare`,并配置 `CLOUDFLARE_API_BASE` 等(见上文「Cloudflare Worker 临时邮箱」)。 注意与 `cloudflare_domain`(QQ IMAP 转发)不是同一来源。 ### 没有接码平台能注册吗? 可以。关闭: ```python ENABLE_CODEX_AUTO = False ``` 注册主流程不依赖接码,Codex 自动授权才需要。 ### iCloud 别名生成卡住 / 报错 `-41015` 或 `-41003`? 这是 Apple Hide My Email 的隐藏预算频控,不是脚本问题: - `-41003` 软限流:短冷却(约 60s)后重试即可过。 - `-41015` reserve 硬频控:每 30~40 分钟窗口仅允许约 5 个别名,且长重试会延长冷却。**不要猛冲**——脚本默认按 `--pace`(40 分钟)/ `--lock-wait`(30 分钟)冷却,且长冷却会拆成带进度日志的小片段,避免被误判卡死。 - 若长时间 `0 新增`,就是预算被锁,等窗口放开再跑 `icloud_hme_generator.py` 即可。 ### 注册时提示 `unsupported_country_region_territory`? OpenAI 按出口 IP 的 GeoIP 校验地区。非支持地区(如香港、部分国家)会被拒。解决: - 注册所用浏览器 / 代理的出口 IP 需为支持地区(日本、美国、新加坡等)。 - 本项目 `cloak` 驱动支持按出口 IP 自动匹配语言/时区;`browser_use` / `skyvern` 可指定代理国家码(如 `jp`)。 ### 接码要花多少钱?成本怎么控? - 哥伦比亚渠道(hero / SMS-Activate 兼容)锁价 ≈ `$0.055`/号,上限 `≤$0.07`,是低成本选择。 - 只有真正拿到号码并收到短信才扣费;平台返回 `NO_NUMBERS`(无可用号)**不收费**。 - 账号已注册但接码超时(浏览器竞态)需重跑接码——会重新取号,属于少量「废单」成本,但能救回账号,账是划算的。 - 在 `.env` 用 `SMS_MAX_PRICE` / `SMS_SELECT_MAX_PRICE` 锁价,避免高价渠道。 --- ## 项目结构 ```text . ├── main.py # CLI 入口 ├── web.py # WebUI 入口 ├── config/ # 配置 │ ├── roxybrowser.py # RoxyBrowser 注册/Codex 驱动 │ ├── cloakbrowser.py # CloakBrowser 注册驱动配置 │ ├── browser_use.py # Browser Use Cloud 配置 │ ├── codex.py # Codex OAuth / 授权驱动 / CPA / 接码 │ ├── email.py # 邮箱来源/OTP │ ├── proxy.py # 代理池 │ ├── register.py # 默认注册信息 │ └── ... ├── core/ │ ├── roxy_registration.py # Roxy / 浏览器注册页面流程 │ ├── cloakbrowser_registration.py # Cloak 注册入口 │ ├── cloakbrowser_driver.py # Cloak Playwright→Selenium 风格适配层 │ ├── browser_use_registration.py # Browser Use + Playwright 注册流程 │ ├── browser_use_client.py # Browser Use CDP 客户端 │ ├── roxy_codex_oauth.py # Roxy / Cloak 浏览器 Codex OAuth 页面流程 │ ├── roxybrowser_client.py # Roxy API 客户端 │ ├── registration_service.py # WebUI 注册线程池 │ ├── codex_oauth.py # Codex 协议/Roxy/Cloak 调度 │ ├── email_provider.py # 邮箱来源调度 │ ├── cf_temp_mail_client.py # Cloudflare Worker 临时邮箱 │ ├── sms_provider.py # 接码平台 │ ├── account_export.py # 保存账号/批次归档 │ └── db.py # 文件数据库 ├── webui/ │ ├── app.py # Flask API │ ├── config_editor.py # 配置读写/热加载 │ └── templates/index.html # 单页控制台 ├── sentinel/ │ ├── sdk.js │ └── sentinel-runner.js ├── tools/ │ └── test_codex_oauth.py # Codex 单独补跑 └── L_API.md # 本地 L 接码接口说明 ``` --- ## 使用建议 - 日常批量使用 WebUI,不建议直接同时开多个 CLI 进程。 - 注册线程数建议不超过可用代理数。 - Roxy 一号一环境建议保持开启,降低环境污染。 - 调试页面问题时可临时设置: ```python ROXY_KEEP_BROWSER_OPEN = True ROXY_OPEN_HEADLESS = False ``` - 调试完再改回自动关闭/删除环境。 --- ## 🙏 致谢 - [RoxyBrowser](https://roxybrowser.cn/invite/NvH4Jx) — 免费提供 5 个窗口 - [CloakBrowser](https://github.com/CloakHQ/CloakBrowser) — Stealth Chromium / Playwright 自动化指纹浏览器支持 - [browser-use](https://github.com/browser-use/browser-use) — Browser Use Cloud / Playwright CDP 云端浏览器能力支持 - [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI) — Codex OAuth 凭证格式参考 - [curl_cffi](https://github.com/yifeikong/curl_cffi) — 底层 HTTP 库,提供 TLS 指纹 impersonate 能力 --- ## 🔒 私有数据说明(分享版必读) 本项目分享的是**代码与流程**,不含任何真实账号、凭证或私钥。运行前你需要自备以下私有数据(均已被 `.gitignore` 排除,**切勿提交**): | 文件 / 配置 | 内容 | 如何获取 | |---|---|---| | `.env` | hero-sms API Key、代理池、VPS 信息等 | 复制 `.env.example` 后填入你自己的 | | `icloud_accounts.json` | 主 iCloud 邮箱 + 应用专用密码 + 别名列表 | 复制 `icloud_accounts.json.example` 填入(可用 `icloud_hme_generator.py` 生成别名)| | `codex_accounts/` | 接码后生成的 Codex OAuth 凭证(含 refresh_token)| 运行 `test_one_codex.py` 自动生成 | | `agent_identities.json` 等 | Agent Identity 私钥(Ed25519)| 运行 `gen_agent_identity.py` 生成 | | `accounts/` | 注册过程归档的账号数据 | 注册时自动生成 | **合规边界**:本工具每个账号使用**独立手机号**做一次性验证(一个手机号对应一个账号),不绕过平台验证机制;`h_backend_server.py` 提供的「一号多账号」复用模式为可选实验组件,**默认不启用、不推荐使用**。 --- ## License MIT