Grok Register 是一个面向自动化流程研究、测试环境验证和个人学习的 Python 自动化注册工具 — 支持 GUI / CLI、临时邮箱、浏览器流程控制、账号输出和 grok2api token 池写入。
本项目仅用于自动化流程研究、测试环境验证和个人学习。请遵守目标网站服务条款、当地法律法规和第三方服务限制。
Contents
功能
- 支持 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 的网络环境
安装
下载项目到电脑:
git clone https://github.com/AaronL725/grok-register.git
cd grok-register
安装依赖:
pip install -r requirements.txt
复制配置文件:
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:留空
这是项目的默认路线。没有特殊需求时,保持下面配置即可:
{
"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 创建邮箱接口:
{
"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 创建接口:
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 中创建邮箱账号。
使用前需要:
- 在 Cloud Mail 系统设置中开启“无人收件”。
- 使用管理员账号生成公共 API Token:
curl -X POST "https://你的-Cloud-Mail-域名/api/public/genToken" \
-H "Content-Type: application/json" \
-d '{"email":"管理员邮箱","password":"管理员密码"}'
- 配置本项目:
{
"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 地址:
{
"grok2api_auto_add_remote": true,
"grok2api_remote_base": "https://你的-grok2api-域名",
"grok2api_remote_app_key": "你的 app_key"
}
或:
{
"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 结果仍会保留。
推荐最小配置:
{
"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 自动热加载,可额外填写:
{
"cpa_copy_to_hotload": true,
"cpa_hotload_dir": "/path/to/cli-proxy-api/auth-dir"
}
运行
CLI 模式
CLI 模式不会启动 Tk GUI,但注册流程仍会打开 Chromium/Chrome 浏览器页面。
python grok_register_ttk.py cli
看到提示后输入:
start
停止任务:
Ctrl+C
CLI 模式适合长时间批量运行。程序每成功注册 5 个账号会关闭浏览器、清理运行时对象并重新启动浏览器,降低长任务内存占用。
GUI 模式
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。
目录结构
.
├── grok_register_ttk.py # 主程序
├── cf_mail_debug.py # Cloudflare 邮箱调试工具
├── config.example.json # 配置示例
├── requirements.txt # Python 依赖
└── README.md
License
MIT.
Acknowledgments
Thanks to linux.do — a vibrant tech community where this project is shared and discussed.
