# openai-auto-register **Repository Path**: mjgenab/openai-auto-register ## Basic Information - **Project Name**: openai-auto-register - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-14 - **Last Updated**: 2026-04-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenAI Auto Register [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![Playwright](https://img.shields.io/badge/Playwright-Async-green)](https://playwright.dev/python/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) 基于 Playwright 的 OpenAI 账号自动注册工具。通过 IMAP 协议自动获取邮箱验证码,自动完成 Codex OAuth 授权流程并提取 `access_token` 与 `refresh_token`。无代理池功能,仅供单 IP 运行测试。已在 Windows、Alibaba Cloud Linux 3、Debian 12 上通过长时间循环测试。**仅供学习交流,请勿滥用。** --- ## 功能概览 - 通过 IMAP 自动读取验证码,支持常见 IMAP 邮箱以及 Catch-all 转发场景 - 启动时校验 `domain`、`run_count`、`run_interval`、`max_consecutive_failures` 等关键配置,配置非法时会直接退出 - 支持多轮运行,可配置固定间隔或随机区间间隔 - 支持连续失败保护:单轮成功会清零连续失败计数;连续失败达到阈值后自动停止,避免脚本在失败状态下无限重试 - 支持可选日志落盘;关闭日志时不生成磁盘日志文件 --- ## 环境要求 - Python >= 3.8 - **Google Chrome 浏览器**(脚本通过 CDP 连接真实 Chrome,不使用 Playwright 内置 Chromium) - Playwright Python 库 - 一个可用的网络环境 - 一个可用的域名(用于 Catch-all 模式生成随机前缀邮箱) - 一个支持 IMAP 的真实主邮箱(用于接收域名转发过来的 OpenAI 验证码) --- ## 安装 ```bash # 克隆仓库 git clone https://github.com/YourUsername/OpenAI-Auto-Register.git cd OpenAI-Auto-Register # 安装 Python 依赖 pip install -r requirements.txt ``` > **注意**:本工具使用你系统上已安装的 Google Chrome 浏览器,无需执行 `playwright install chromium`。 > > **Linux 用户**:还需要安装虚拟显示器(Xvfb)和系统底层渲染库,否则浏览器无法启动。 > 详细步骤可参考 [Alibaba Cloud Linux](./DEPLOY_LINUX.md) 或 [Debian 12](./DEPLOY_DEBIAN.md)。 --- ## 配置 本工具**没有命令行参数**,所有配置通过 `config.json` 文件管理。 项目提供了 `config.template.json` 作为配置模板,使用前需先复制并重命名: ```bash # Windows copy config.template.json config.json # Linux / macOS cp config.template.json config.json ``` 然后编辑 `config.json`,填入你自己的信息: ### 必填参数 | 参数 | 类型 | 说明 | 示例 | |------|------|------|------| | `domain` | string / string[] | 注册邮箱的域名后缀。支持单个域名字符串或多个域名组成的数组 | `"example.com"` / `["a.com", "b.com"]` | | `imap_host` | string | IMAP 服务器地址 | `"imap.qq.com"` | | `imap_port` | int | IMAP 端口(SSL 通常为 `993`) | `993` | | `imap_user` | string | 接收验证码的邮箱账号 | `"user@qq.com"` | | `imap_pass` | string | 邮箱的 **IMAP 授权码**(⚠️ 非登录密码) | `"abcdefghijklmnop"` | ### 可选参数 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `run_count` | int | `1` | 注册轮数。设为 `0` 表示持续运行,直到手动停止或触发连续失败保护 | | `run_interval` | int/string | `60` | 每轮注册之间的间隔秒数。支持固定数字如 `30`,也支持随机范围如 `"30-60"`。设为 `0` 表示不等待 | | `max_consecutive_failures` | int | `3` | 连续失败保护阈值。达到阈值后脚本会自动停止,避免在失败状态下无限重试 | | `headless` | bool | `false` | 是否隐藏浏览器窗口。设为 `true` 时窗口会被移到屏幕外(伪无头模式) | | `token_dir` | string | `"./tokens"` | Token 文件保存目录,支持相对路径 | | `log_enabled` | bool | `false` | 是否启用日志文件。`true` 时保存详细日志,`false` 时完全静默 | | `log_dir` | string | `"./logs"` | 日志文件保存目录,支持相对路径 | | `proxy` | string | `""` | 代理服务器地址,例如 `"socks5://127.0.0.1:1080"` 或 `"http://user:pass@ip:port"`。留空不使用代理 | | `email_prefix` | string | `"auto"` | 当前仍会从配置读取,但**尚未用于实际邮箱生成逻辑** | > **关于邮箱地址生成**:当前邮箱地址格式为 `{随机名字}{3位数字}@{domain}`(如 `bakfibf385@example.com`)。`email_prefix` 目前未生效。 ### 常用邮箱的 IMAP 配置 | 邮箱 | `imap_host` | `imap_port` | `imap_pass` 获取方式 | |------|-------------|-------------|---------------------| | QQ 邮箱 | `imap.qq.com` | `993` | 设置 → 账户 → 开启 IMAP → 生成授权码 | | Gmail | `imap.gmail.com` | `993` | Google 账号 → 安全性 → 两步验证 → 应用专用密码 | | 163 邮箱 | `imap.163.com` | `993` | 设置 → POP3/IMAP → 开启 IMAP → 设置授权码 | ### 配置示例 ```json { "domain": ["example.com", "example.org"], "imap_host": "imap.qq.com", "imap_port": 993, "imap_user": "123456@qq.com", "imap_pass": "your_imap_auth_code", "email_prefix": "auto", "run_count": 10, "run_interval": "30-60", "max_consecutive_failures": 3, "token_dir": "./tokens", "headless": false, "log_enabled": false, "log_dir": "./logs", "proxy": "" } ``` 上述配置含义:注册 **10 个账号**,每轮间隔在 **30~60 秒**之间,连续失败 **3 次**自动停止,显示 Chrome 窗口,不记录日志。 --- ## 使用方法 ### Windows / 带桌面环境的系统 ```bash python main.py ``` 脚本会自动查找并启动系统中的 Google Chrome 浏览器(调试模式),通过 CDP 协议连接。运行后终端会显示每轮进度、等待间隔、连续失败阈值以及最终成功/失败统计。按 `Ctrl+C` 可随时安全退出。 ### Debian 12 > **注意**:在 Linux 服务器上可通过 `xvfb-run` 创建虚拟显示器来运行(这是规避风控的核心机制)。如果使用 Debian 12 等强限制系统,请务必先进入您的 `venv` 虚拟环境。 #### 方法 1:前台运行(关闭 SSH 则脚本停止) ```bash xvfb-run --server-args="-screen 0 1920x1080x24" python main.py ``` #### 方法 2:使用 screen 后台挂机(强烈推荐) 使用 screen 可以在断开 SSH 连接后保持脚本运行,且不产生任何磁盘日志积压。 ```bash # 1. 创建一个名为 gpt 的新会话 screen -S gpt # 2. 在该会话内执行脚本 xvfb-run --server-args="-screen 0 1920x1080x24" python main.py # 3. 退出并挂起会话:依次按下 Ctrl + A,然后按 D # 4. 下次重连随时查看进度: screen -r gpt ``` #### 方法 3:使用 nohup 挂机(直接屏蔽输出) 如果不习惯 screen,可以使用此方法将其完全打散到后台,并且将输出丢弃以防磁盘爆炸: ```bash nohup xvfb-run --server-args="-screen 0 1920x1080x24" python main.py > /dev/null 2>&1 & ``` --- ## 输出 注册成功后,脚本会在 `tokens/` 目录下生成 JSON 文件。当前代码实际写出的字段包含: ```json { "type": "codex", "email": "auto12345@example.com", "id_token": "eyJhbGciOi...", "access_token": "eyJhbGciOi...", "refresh_token": "v1|abc123...", "expires_in": 86400, "token_type": "Bearer", "saved_at": "2026-02-21T12:00:00+0800" } ``` 如果启用了日志,日志文件会写入 `log_dir`;如果关闭日志,则不会生成日志文件。 --- ## 项目结构 ``` . ├── main.py # 主脚本(配置加载、浏览器流程、OAuth 回调、Token 保存) ├── config.template.json # 配置模板(复制并重命名为 config.json 后使用) ├── requirements.txt # Python 依赖 ├── DEPLOY_LINUX.md # Alibaba Cloud Linux 部署指南 ├── DEPLOY_DEBIAN.md # Debian 12 部署指南 ├── tokens/ # Token 输出目录(运行后自动生成,已排除上传) └── logs/ # 日志目录(log_enabled 为 true 时生成,已排除上传) ``` > `config.json` 含有真实邮箱和 IMAP 凭据,应仅保留在本地使用,不要提交到版本库。 --- ## 常见问题 **Q: 脚本提示"配置文件无效"?** A: 启动时会校验关键配置。请重点检查:`domain` 是否为空、`run_count` 是否为非负整数、`run_interval` 是否为非负整数或合法区间字符串(如 `"30-60"`)、`max_consecutive_failures` 是否大于等于 `1`。 **Q: 脚本提示"未找到 Chrome 浏览器"?** A: 请确保已安装 Google Chrome 浏览器。脚本会自动在常见路径查找 chrome.exe。 **Q: 启动时提示端口 1455 被占用?** A: 可能是上次运行残留的进程占用了端口。运行 `netstat -ano | findstr "1455"` 找到占用端口的 PID,然后 `taskkill /PID /F` 杀掉它。 **Q: 脚本运行后卡住不动?** A: 大概率是缺少系统渲染库。在 Linux 上请执行 `playwright install-deps`,详见部署指南。 **Q: 获取不到验证码?** A: 检查转发到 `imap_user` 的邮箱是否在当前网络环境下可正常收信,并确认 IMAP 已开启。 **Q: 为什么无限模式会自己停下来?** A: 当前代码加入了连续失败保护。即使 `run_count = 0`,只要连续失败次数达到 `max_consecutive_failures`,脚本也会自动停止。 **Q: `email_prefix` 为什么没有体现在邮箱里?** A: 当前代码仍会读取该配置,但实际邮箱生成逻辑使用的是 `{随机名字}{3位数字}@{domain}`,`email_prefix` 目前未生效。 **Q: 日志文件占满磁盘?** A: 将 `config.json` 中 `log_enabled` 设为 `false`。后台运行时建议使用 `screen` 或将输出重定向到 `/dev/null`。 --- ## 免责声明 - 本项目仅用于学习 Playwright 浏览器自动化技术,请勿用于违反 OpenAI 服务条款的行为。 - 使用本脚本所产生的一切后果(包括但不限于账号封禁、IP 限制等)由使用者自行承担。 - 请合理设置运行频率,避免对目标服务造成不必要的压力。 --- ## 贡献 欢迎通过 Issue 反馈问题或提交 Pull Request。