[![Grok Register — GUI and CLI registration automation toolkit](assets/banner.png)](https://github.com/AaronL725/grok-register) Grok Register 是一个面向自动化流程研究、测试环境验证和个人学习的 Python 自动化注册工具 — 支持 GUI / CLI、临时邮箱、浏览器流程控制、账号输出和 grok2api token 池写入。

License: MIT Python 3.9+ GUI + CLI Chromium/Chrome PRs Welcome linux.do

Star History Rank

--- > 本项目仅用于自动化流程研究、测试环境验证和个人学习。请遵守目标网站服务条款、当地法律法规和第三方服务限制。 ## Contents - [功能](#功能) - [环境要求](#环境要求) - [安装](#安装) - [配置](#配置) - [运行](#运行) - [输出文件](#输出文件) - [稳定性机制](#稳定性机制) - [常见问题](#常见问题) - [目录结构](#目录结构) - [License](#license) - [Acknowledgments](#acknowledgments) - [Star History](#star-history) ## 功能 - 支持 GUI 图形界面运行。 - 支持 CLI 终端运行,不启动 Tk GUI。 - 注册流程使用 Chromium/Chrome 浏览器页面完成。 - 支持 DuckMail、YYDS、Cloudflare,以及 Cloud Mail 无人收件模式。 - 支持验证码邮件轮询和解析。 - 支持成功账号实时写入 `accounts_*.txt`。 - 支持将 SSO token 写入 grok2api 本地或远端池。 - 支持注册成功后可选导出 CLIProxyAPI 使用的 CPA xAI OAuth 凭证。 - 支持注册后尝试开启 NSFW。 - 支持页面卡住检测、当前账号重试、浏览器重启和内存清理。 ## 环境要求 - Python 3.9+ - Google Chrome 或 Chromium - 可访问注册页面和临时邮箱 API 的网络环境 ## 安装 下载项目到电脑: ```bash git clone https://github.com/AaronL725/grok-register.git cd grok-register ``` 安装依赖: ```bash pip install -r requirements.txt ``` 复制配置文件: ```bash cp config.example.json config.json ``` 然后按需编辑 `config.json`。 ## 配置 常用配置项: | 配置项 | 说明 | | --- | --- | | `email_provider` | 邮箱服务商:`duckmail`、`yyds`、`cloudflare`、`cloudmail` | | `register_count` | 本次目标注册数量 | | `proxy` | 代理地址,可留空 | | `enable_nsfw` | 注册后是否尝试开启 NSFW | | `cloudflare_api_base` | Cloudflare 临时邮箱 API 地址 | | `cloudflare_api_key` | Cloudflare 临时邮箱接口密钥;默认匿名模式留空,admin 模式填 `ADMIN_PASSWORD` | | `cloudflare_auth_mode` | Cloudflare API 鉴权模式;默认 `none`,可选 `bearer`、`x-api-key`、`x-admin-auth`、`query-key` | | `cloudflare_path_domains` | Cloudflare 域名列表路径;默认 `/api/domains` | | `cloudflare_path_accounts` | Cloudflare 创建邮箱路径;默认匿名模式用 `/api/new_address`,admin 模式用 `/admin/new_address` | | `cloudflare_path_token` | Cloudflare token 路径;默认 `/api/token` | | `cloudflare_path_messages` | Cloudflare 收件列表路径;默认 `/api/mails` | | `defaultDomains` | Cloudflare 临时邮箱默认域名 | | `cloudmail_api_base` | Cloud Mail 站点地址 | | `cloudmail_public_token` | Cloud Mail 公共 API Token,不会写入邮箱凭证文件 | | `cloudmail_domains` | Cloud Mail 无人收件域名,多个域名用英文逗号分隔 | | `cloudmail_path_messages` | Cloud Mail 公共收件接口路径,默认 `/api/public/emailList` | | `grok2api_auto_add_local` | 是否写入本地 grok2api token 池 | | `grok2api_local_token_file` | 本地 grok2api token 文件路径 | | `grok2api_auto_add_remote` | 是否写入远端 grok2api | | `grok2api_remote_base` | 远端 grok2api 地址,可填站点根地址或 `/admin/api` 管理 API 地址 | | `grok2api_remote_app_key` | 远端 grok2api app key | | `cpa_export_enabled` | 是否在 SSO 成功后额外导出 CPA xAI OIDC 凭证 | | `cpa_auth_dir` | 本地 CPA 导出目录,生成 `xai-*.json` | | `cpa_copy_to_hotload` | 是否额外复制到 CLIProxyAPI 的 auth-dir | | `cpa_hotload_dir` | CLIProxyAPI auth-dir 路径 | | `cpa_proxy` | CPA/OIDC 专用代理;留空则回退到 `proxy` | | `cpa_headless` | CPA/OIDC 浏览器是否无头,默认建议 `false` | ### Cloudflare 临时邮箱匿名模式(默认) 默认情况下,Cloudflare 邮箱使用 `dreamhunter2333/cloudflare_temp_email` 的匿名接口创建邮箱并读取邮件: - 创建邮箱:`POST /api/new_address` - 读取邮件:`GET /api/mails` - 鉴权模式:`none` - `cloudflare_api_key`:留空 这是项目的默认路线。没有特殊需求时,保持下面配置即可: ```json { "email_provider": "cloudflare", "cloudflare_api_base": "https://你的-worker-api-域名", "cloudflare_api_key": "", "cloudflare_auth_mode": "none", "cloudflare_path_domains": "/api/domains", "cloudflare_path_accounts": "/api/new_address", "cloudflare_path_token": "/api/token", "cloudflare_path_messages": "/api/mails", "defaultDomains": "你的收信域名.com" } ``` ### Cloudflare 临时邮箱 admin 模式(可选) 如果使用 `dreamhunter2333/cloudflare_temp_email` 且匿名 `/api/new_address` 开启了 Turnstile,可以改用 admin 创建邮箱接口: ```json { "email_provider": "cloudflare", "cloudflare_api_base": "https://你的-worker-api-域名", "cloudflare_api_key": "你的 ADMIN_PASSWORD", "cloudflare_auth_mode": "x-admin-auth", "cloudflare_path_accounts": "/admin/new_address", "cloudflare_path_messages": "/api/mails", "defaultDomains": "你的收信域名.com" } ``` 创建邮箱会使用 `x-admin-auth` 调用 `/admin/new_address`,后续收件仍使用接口返回的地址 JWT 调用 `/api/mails`。也就是说,admin 密码只用于创建邮箱,不用于读取邮箱邮件。 可先用调试脚本验证 admin 创建接口: ```bash python cf_mail_debug.py --api-base "https://你的-worker-api-域名" --auth-mode x-admin-auth --api-key "你的 ADMIN_PASSWORD" --create-path /admin/new_address --domain "你的收信域名.com" ``` ### Cloud Mail 无人收件模式(可选) 该模式对接 `maillab/cloud-mail`,使用其“无人收件”功能:程序直接生成随机邮箱地址,不需要先在 Cloud Mail 中创建邮箱账号。 使用前需要: 1. 在 Cloud Mail 系统设置中开启“无人收件”。 2. 使用管理员账号生成公共 API Token: ```bash curl -X POST "https://你的-Cloud-Mail-域名/api/public/genToken" \ -H "Content-Type: application/json" \ -d '{"email":"管理员邮箱","password":"管理员密码"}' ``` 3. 配置本项目: ```json { "email_provider": "cloudmail", "cloudmail_api_base": "https://你的-Cloud-Mail-域名", "cloudmail_public_token": "返回结果 data 中的 token", "cloudmail_domains": "你的收信域名.com", "cloudmail_path_messages": "/api/public/emailList" } ``` 程序会通过 `POST /api/public/emailList` 按目标地址查询邮件。公共 Token 只从 `config.json` 读取,不会作为邮箱 credential 输出到日志或 `mail_credentials.txt`。 ### grok2api 远端入池配置 如果开启 `grok2api_auto_add_remote`,`grok2api_remote_base` 可以填写站点根地址,也可以直接填写管理 API 地址: ```json { "grok2api_auto_add_remote": true, "grok2api_remote_base": "https://你的-grok2api-域名", "grok2api_remote_app_key": "你的 app_key" } ``` 或: ```json { "grok2api_auto_add_remote": true, "grok2api_remote_base": "https://你的-grok2api-域名/admin/api", "grok2api_remote_app_key": "你的 app_key" } ``` 程序会优先尝试 `/tokens/add`,并兼容 `/admin/api/tokens/add`;旧版全量保存接口也会兼容 `/tokens` 和 `/admin/api/tokens`。 `config.json` 包含个人配置和密钥,不要提交到 Git。 ### CPA / xAI OIDC 导出(可选) 当 `cpa_export_enabled=true` 时,程序会在**账号已经注册成功、SSO 已保存**之后,额外发起一次 xAI Device Authorization,自动批准授权并导出 `xai-*.json`。 这条线路是附加功能,不会替代原有的 SSO 保存流程。即使 OIDC 导出失败,原账号与 SSO 结果仍会保留。 推荐最小配置: ```json { "cpa_export_enabled": true, "cpa_auth_dir": "./cpa_auths", "cpa_base_url": "https://cli-chat-proxy.grok.com/v1", "cpa_proxy": "", "cpa_headless": false } ``` 如需让 CLIProxyAPI 自动热加载,可额外填写: ```json { "cpa_copy_to_hotload": true, "cpa_hotload_dir": "/path/to/cli-proxy-api/auth-dir" } ``` ## 运行 ### CLI 模式 CLI 模式不会启动 Tk GUI,但注册流程仍会打开 Chromium/Chrome 浏览器页面。 ```bash python grok_register_ttk.py cli ``` 看到提示后输入: ```text start ``` 停止任务: ```text Ctrl+C ``` CLI 模式适合长时间批量运行。程序每成功注册 5 个账号会关闭浏览器、清理运行时对象并重新启动浏览器,降低长任务内存占用。 ### GUI 模式 ```bash python grok_register_ttk.py ``` GUI 模式会打开 Tkinter 窗口,适合手动调整配置和观察日志。 ## 输出文件 运行过程中会生成: - `accounts_*.txt`:成功账号、密码和 SSO token。 - `mail_credentials.txt`:临时邮箱凭证。 - `cpa_auths/xai-*.json`:可选导出的 CPA xAI OAuth 凭证。 - `cpa_auths/cpa_auth_failed.txt`:OIDC 导出失败记录。 - `*.log`:可选日志文件。 这些文件包含敏感信息,已被 `.gitignore` 忽略。 ## 稳定性机制 - 每个账号结束后重启浏览器。 - 每成功 5 个账号执行一次内存清理。 - CLI 模式支持 `Ctrl+C` 中断并清理浏览器。 - 最终页长时间无变化时自动重试当前账号。 - 验证码未收到时自动更换邮箱重试。 ## 常见问题 ### CLI 模式为什么还会打开浏览器? CLI 模式只是不启动 Tk GUI。注册页、Turnstile、验证码提交和 SSO cookie 获取仍依赖真实浏览器环境。 ### NSFW 开启失败怎么办? 如果日志显示 `Cloudflare 防护拦截,HTTP 403`,说明请求被目标站点防护拦截。程序会继续保存账号和写入 grok2api。 ### GUI 显示的数量和配置不同? GUI 数量控件可能有上限。CLI 模式直接读取 `config.json` 中的 `register_count`。 ## 目录结构 ```text . ├── grok_register_ttk.py # 主程序 ├── cf_mail_debug.py # Cloudflare 邮箱调试工具 ├── config.example.json # 配置示例 ├── requirements.txt # Python 依赖 └── README.md ``` ## License [MIT](LICENSE). ## Acknowledgments Thanks to [linux.do](https://linux.do) — a vibrant tech community where this project is shared and discussed. ## Star History Star History Chart