Grok Register — 面向 Windows 的 Grok 账号注册自动化工具(二次开发版)
支持 CLI、临时邮箱、多线程批量注册,以及可选写入 grok2api(Web 池;可选本地 OAuth / grok login --oauth 后导入 Build)。
免责声明:本项目仅用于自动化流程研究、测试环境验证和个人学习。请遵守目标网站服务条款、当地法律法规和第三方服务限制。滥用风险自负。
本仓库基于上游 AaronL725/grok-register 二次开发,聚焦批量注册与 grok2api Web 自动入池。
| 上游原版 | 本仓库 | |
|---|---|---|
| 定位 | 注册自动化(GUI / CLI) | 注册 + 可选 grok2api Web 上传(仅 CLI) |
| 推荐入口 | grok_register_ttk.py |
register_cli.py |
| Python | 文档曾写 3.9+ | 3.13(>=3.13,<3.14) |
| 上传 | 可选 | 本地/远端 grok2api(v3/legacy;默认关) |
| 并发模型 | 偏单机/配置线程 | 多注册线程,浏览器复用/回收 |
上游项目与社区讨论仍见 AaronL725/grok-register 与 linux.do。本 README 只描述 本仓库当前行为。
主路径:生成 Build OAuth authorize 链接(同 grok login --oauth)→ 在该链接内完成注册 → consent / loopback 直接拿 Build token → 写账号 / 导入 grok2api。
| 位置 | 内容 |
|---|---|
| 根目录 | 薄启动入口、config.json、依赖清单、turnstilePatch/、文档 |
grok_register/ |
核心 Python 包(CLI/邮箱/浏览器池/grok2api) |
output/ |
运行产物:账号、token(gitignore) |
scripts/ |
回填、校验、辅助启动 |
docs/ |
本机/打包说明(主文档仍是 README.md) |
tests/ |
unittest |
默认输出指向 output/。旧路径根目录 accounts_*.txt 仍被 gitignore。
# 推荐(根目录兼容入口,内部转到包)
uv run python -u register_cli.py --count 1 --threads 1
# 等价包入口
uv run python -m grok_register.cli --count 1 --threads 1- CLI 多线程批量注册
- Cloudflare / Exchange(@*.onmicrosoft.com)/ DuckMail / YYDS 临时邮箱
- Chrome / Chromium 真实浏览器注册流程(含 Turnstile 扩展
turnstilePatch/) - 成功账号实时写入
output/accounts_*.txt/output/accounts_cli.txt - 可选写入本地 / 远端 grok2api Web 池(默认关闭;Build 仅走本地 OAuth 后导入)
- 页面卡住检测、邮箱重试、浏览器复用与回收
- Python 3.13(
pyproject.toml要求>=3.13,<3.14) - Google Chrome 或 Chromium
- 可运行浏览器自动化的环境(CLI 会启动真实浏览器)
- 可访问:
accounts.x.ai/ Grok 注册页- 你的临时邮箱 API
- (可选)远端 grok2api
推荐工具链:
git clone https://github.com/van7517/grok-register-mint.git
cd grok-register-mint
# 推荐:按锁文件安装
uv sync
# 兼容方式(非首选)
# pip install -r requirements.txt
# 复制配置
copy config.example.json config.json然后编辑 config.json,填写下方「必须配置」。
config.json含密钥,不要提交到 Git。
所有命令从项目根目录执行。其他机器上的绝对路径(如RUN_LOCAL.md)请勿照抄。
下面这些是跑通注册通常必须正确的项。完整字段见 config.example.json。
默认通道:Cloudflare Temp Mail(dreamhunter2333/cloudflare_temp_email)。
{
"email_provider": "cloudflare",
"cloudflare_api_base": "https://你的-邮箱-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",
"enable_random_subdomain": true
}{
"email_provider": "cloudflare",
"cloudflare_api_base": "https://你的-邮箱-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",
"enable_random_subdomain": true
}说明:
cloudflare_api_base:邮箱 Worker / API 根地址defaultDomains:基础收信域名(逗号分隔),必须与 WorkerDOMAINS/RANDOM_SUBDOMAIN_DOMAINS一致enable_random_subdomain:true时每个账号创建name@随机串.基础域(cloudflare_temp_email 的enableRandomSubdomain)- Admin 密码只用于创建邮箱;读信仍用接口返回的 JWT
随机三级域名前置条件(在 temp-mail / Cloudflare 侧完成,非本仓库配置):
- Worker 变量
RANDOM_SUBDOMAIN_DOMAINS包含defaultDomains中的基础域 - 基础域 DNS 已配置通配 MX(
*复制 apex 的 Email Routing MX) - Catch-all 已绑定到该 Worker
先测邮箱是否通:
uv run python cf_mail_debug.py `
--api-base "https://你的-邮箱-API域名" `
--auth-mode x-admin-auth `
--api-key "你的 ADMIN_PASSWORD" `
--create-path /admin/new_address `
--domain "你的收信域名.com" `
--random-subdomain不创建用户。流程:随机生成 tmp…@域名 → 邮件进固定 catch-all 邮箱 → Graph 按收件人过滤取验证码。与 Cloudflare 通道互斥,改 email_provider 即可切换:
{
"email_provider": "exchange",
"exchange_tenant_id": "你的-Directory-(tenant)-ID",
"exchange_client_id": "应用(客户端)ID",
"exchange_client_secret": "客户端密码",
"exchange_mailbox": "catchall@你的租户.onmicrosoft.com",
"exchange_domains": "你的租户.onmicrosoft.com"
}切回 Cloudflare Temp Mail:
{
"email_provider": "cloudflare"
}租户侧前置:
- 在 Exchange / M365 为域名开启 catch-all(或传输规则:未知收件人转发到
exchange_mailbox) - Entra ID → 应用注册 → 记下 应用程序(客户端) ID 与 目录(租户) ID
- 证书和密码 → 新建客户端密码 →
exchange_client_secret - API 权限 → Microsoft Graph 应用程序权限
Mail.Read→ 管理员同意(需能读 catch-all 邮箱) exchange_domains填 catch-all 域(如xxx.onmicrosoft.com);留空时回退defaultDomains
| 字段 | 说明 |
|---|---|
exchange_tenant_id / client_id / client_secret |
应用身份(client credentials) |
exchange_mailbox |
catch-all 实际收信邮箱 的 UPN 或对象 ID(Graph 轮询目标) |
exchange_domains |
对外使用的域名,逗号分隔,如 contoso.onmicrosoft.com |
exchange_username_prefix / length |
随机本地部分,默认 tmp + 12 位 |
exchange_list_top |
每轮拉取最近邮件条数,默认 50 |
并发时多个随机地址共用同一 catch-all 邮箱;程序按
toRecipients/ 原始收件人头匹配目标地址,互不干扰。
{
"register_count": 100,
"register_threads": 2,
"thread_start_interval": 0.8,
"max_mail_retry": 3,
"code_poll_timeout": 90,
"code_poll_interval": 3
}| 字段 | 必须性 | 说明 |
|---|---|---|
register_count |
建议 | 默认目标数量;CLI 可用 --count 覆盖 |
register_threads |
建议 | 默认并发参考;CLI 真正并发以 --threads 为准 |
register_browser_background |
可选 | 默认 true:注册浏览器后台运行、不抢前台 |
register_browser_background_mode |
可选 | 默认 headless(Camoufox 无窗口,推荐);offscreen 为有界面+屏外(可能闪一下) |
register_browser_window_position |
可选 | offscreen 模式用,默认 -2400,100 |
register_browser_window_size |
可选 | 默认 1000,800 |
code_poll_timeout |
建议 | 等验证码超时秒数,批量建议 60–90 |
code_poll_interval |
可选 | 轮询间隔秒数 |
本地 Web 池与远端上传默认均为 关闭(grok2api_auto_add_local / grok2api_auto_add_remote / grok2api_auto_add_build = false)。需要时再打开。
支持两种远端:
| mode | 目标 | 认证 | 接口 |
|---|---|---|---|
v3 |
chenyme/grok2api Go v3 | 管理员用户名/密码登录拿 Bearer | Web: POST /api/admin/v1/accounts/web/import;Build: 本地 OAuth 后 accounts 导入 |
legacy |
旧版 Python / jiujiu 池 | app_key 查询参数 |
/tokens/add、/admin/api/tokens/add 等 |
auto(默认) |
先 v3,失败再 legacy | 两种都配齐时可用 | 自动降级 |
{
"grok2api_auto_add_local": false,
"grok2api_local_token_file": "./output/grok2api_tokens.json",
"grok2api_pool_name": "ssoBasic",
"grok2api_auto_add_remote": true,
"grok2api_auto_add_build": true,
"grok2api_remote_base": "http://你的服务器:5003",
"grok2api_remote_mode": "auto",
"grok2api_remote_username": "admin",
"grok2api_remote_password": "v3管理密码",
"grok2api_remote_app_key": "legacy app_key(仅旧版)",
"grok2api_v3_web_tier": "auto"
}说明:
- v3 Web:注册成功后的 SSO JWT 作为 Grok Web 账号导入(
grok2api_auto_add_remote)。 - 远端 Build:
local_build_device_flow=true时以 OAuth authorize URL 为注册入口,注册完成后直接拿到 Build 凭据并导入(grok2api_auto_add_build);不再调用远端web/convert-to-build。 - Web tier:
ssoBasic→basic,ssoSuper→super,可用grok2api_v3_web_tier覆盖。 - legacy:
grok2api_remote_base可填站点根或/admin/api;优先/tokens/add。 - 打开远端:设
grok2api_auto_add_remote: true,并填remote_base+(v3 密码 或 legacyapp_key)。 - bot 标记:OAuth 后若 Build
access_token含bot_flag_source=1,默认视为失败且不上传;设allow_bot_flagged: true可仍保存/导入(部分场景账号仍可用)。 - 注册参数采集(分析 bot_flag / 失败原因):默认开启,每次尝试写入
output/reg_stats.jsonl(含 Turnstile 鼠标路径随机数、pace 时延参数、点击次数、代理 host、邮箱域名、JWT 安全 claims 子集等,不含密码/完整 token)。 - 成功口径(primary):
build_clean:拿到无bot_flag的 Build token(真正成功)build_bot:Build token 含bot_flag_source=1web_only:有 SSO / 可能写账号文件,但无干净 Build token
- 放慢节奏(
register_pace_*):阶段 dwell + 账号间隔;参数写入pace/pace_summary。 - 禁用邮箱域:
email_blocked_domains(后缀匹配),默认暂时禁用ohmyaitrash.cloud。
{
"reg_stats_enabled": true,
"reg_stats_file": "output/reg_stats.jsonl",
"register_pace_enabled": true,
"register_pace_scale": 1.6,
"register_pace_between_accounts_s": [12, 28],
"email_blocked_domains": "ohmyaitrash.cloud"
}分析汇总:
python -m grok_register.reg_stats
python -m grok_register.reg_stats --file output/reg_stats.jsonl --json{
"proxy": ""
}proxy:注册浏览器 / 邮箱请求代理
{
"proxy_pool_enabled": true,
"proxy_pool_file": "all_proxies.txt",
"proxy_pool_mode": "round_robin",
"proxy_pool_rotate_each_account": true
}all_proxies.txt:每行一个代理,支持http://user:pass@host:port- 启用后每个账号从池中取代理(注册浏览器绑定)
- 带账号密码的代理通过临时 Chrome 扩展注入认证(Chromium 本身不支持 URL 内嵌 user:pass)
访问不了 accounts.x.ai 时必须配置可用代理。
| 字段 | 默认建议 | 说明 |
|---|---|---|
enable_random_subdomain |
true(示例) |
每个账号 name@随机串.基础域;需 Worker RANDOM_SUBDOMAIN_DOMAINS + 通配 MX |
enable_nsfw |
false |
注册后尝试开 NSFW;常被 Cloudflare 403,不影响出号 |
user_agent |
保持示例 | 浏览器 UA |
yyds_* / duckmail_api_key |
按需 | 换邮箱供应商时使用 |
email_provider |
cloudflare |
cloudflare / exchange / duckmail / yyds |
exchange_* |
按需 | Graph 临时邮箱;见上文「方案 C」 |
{
"email_provider": "cloudflare",
"cloudflare_api_base": "https://mail.example.com",
"cloudflare_api_key": "ADMIN_PASSWORD",
"cloudflare_auth_mode": "x-admin-auth",
"cloudflare_path_accounts": "/admin/new_address",
"defaultDomains": "example.com",
"enable_random_subdomain": true,
"register_count": 10,
"code_poll_timeout": 90,
"grok2api_auto_add_local": false,
"grok2api_auto_add_remote": true,
"grok2api_auto_add_build": true,
"grok2api_remote_base": "https://your-grok2api.example.com",
"grok2api_remote_username": "admin",
"grok2api_remote_password": "YOUR_PASSWORD"
}所有命令在项目根目录执行。
uv run python -u register_cli.py --count 1 --threads 1uv run python -m grok_register.app进入后输入 start 开始。批量请用 register_cli.py。
mise run deps
mise run register
mise run register -- --count 10
mise run batch10
mise run checkuv run python -u register_cli.py --count 100 --threads 2 --fast--threads 2:2 个注册浏览器并发- 注册成功后按配置写入 grok2api(若已开启)
uv run python -u register_cli.py --count 100 --threads 4 --fast注意:
- 线程越高,Chrome 内存占用越高
- 建议从
2开始,稳定后再加
uv run python -u register_cli.py `
--count 100 `
--threads 2 `
--accounts-file ".\output\accounts_batch100.txt" `
--fastuv run python -u register_cli.py `
--extra 50 `
--threads 2 `
--accounts-file ".\output\accounts_batch100.txt" `
--fast--count 表示「文件最终总行数目标」;已有 100 行时 --count 100 会直接结束。续跑用 --extra。
| 参数 | 默认 | 说明 |
|---|---|---|
--count N |
1 |
账号总数目标(含已有文件行数;0=不限) |
--extra N |
0 |
在已有账号基础上再新注册 N 个 |
--threads N |
1 |
注册并发线程(1–10) |
--accounts-file PATH |
output/accounts_cli.txt |
账号输出文件 |
--fast |
默认开 | 压缩等待、减少调试 IO |
--no-fast |
关 | 关闭快速模式 |
--no-browser-reuse |
关 | 每号强制关闭浏览器 |
--browser-recycle-every N |
25 |
浏览器复用 N 次后完整回收 |
--cookie-snapshot |
关 | 注册成功额外写 cookie 快照 |
峰值浏览器数约等于注册线程数 R。
register_cli.py 流水线:
注册线程 (R)
→ 打开 xAI 注册页
→ 创建临时邮箱 / 收验证码
→ 完成注册,拿到 SSO
→ 写入 accounts 文件
→ (可选)写 grok2api 本地/远端 Web 池
→ (local_build_device_flow)OAuth authorize 入口注册 → Build token → 导入
因此:
- 只要账号文件:注册成功即可
- 要进 grok2api:打开
grok2api_auto_add_remote(Web)与可选grok2api_auto_add_build(本地 Build 导入)
日志末尾示例:
=== 完成: 注册成功 100, 注册失败 0 ===
| 文件/目录 | 内容 |
|---|---|
output/accounts_*.txt / output/accounts_cli.txt |
邮箱----密码----ssoToken |
output/grok2api_tokens.json |
本地 grok2api token 池(若开启) |
output/mail_credentials.txt |
临时邮箱凭证 |
batch*_run_*.log |
批量运行日志 |
这些文件含敏感信息,默认已被 .gitignore 忽略。
本机配置示例:--count 100 --threads 2 --fast
| 批次 | 耗时 | 注册 |
|---|---|---|
| 参考 A | ~21.7 分钟 | 100(失败 3) |
| 参考 B | ~18.4 分钟 | 100(失败 0) |
实际速度取决于邮箱验证码延迟、Turnstile、机器与代理。
注册页、Turnstile、SSO cookie 依赖真实浏览器(Camoufox)。CLI 只是不启动 Tk 窗口。
默认 register_browser_background=true 且 register_browser_background_mode=headless:注册用 Camoufox stealth headless,操作系统层不出现窗口(无闪屏)。若要看见窗口,设 register_browser_background: false。若只要屏外有界面窗口(可能闪一下),设 register_browser_background_mode: "offscreen"。
检查:
grok2api_auto_add_remote/grok2api_auto_add_local是否为truegrok2api_remote_base与 v3 密码(或 legacyapp_key)是否正确- 日志里是否有
[+] 已写入 grok2api或跳过/失败信息
通常 2–4 线程有收益;再高可能被邮箱、Turnstile、CPU/内存卡住。
- 确认改的是项目根目录
config.json - CLI 的
--count/--threads会覆盖配置中的数量/并发 - 不要改错目录下的备份配置
日志出现 Cloudflare 防护拦截,HTTP 403 时,程序仍会保存账号并继续后续流程。
.
├── register_cli.py # 薄入口 → grok_register.cli
├── cf_mail_debug.py # 薄入口 → grok_register.cf_mail_debug
├── grok_register/ # 核心包
│ ├── app.py # 注册主逻辑 + grok2api(CLI 共享)
│ ├── cli.py # 多线程注册 CLI
│ ├── tab_pool.py
│ ├── cf_mail_debug.py
│ ├── paths.py # 项目根 / output / config 路径
│ └── proxyutil.py # 代理解析 / 代理池
├── turnstilePatch/ # Chromium 扩展(勿删除)
├── output/ # 运行产物(gitignore)
├── scripts/
├── docs/
├── tests/
├── config.example.json
├── config.json # 本地私有(勿提交)
├── pyproject.toml
├── uv.lock
├── mise.toml
├── requirements.txt
└── README.md
- 不要提交或泄露:
config.json、API Key、JWT、Cookie、密码、SSO Token、代理凭据、账号文件、管理密钥 - grok2api 管理后台不要长期裸奔公网;建议本机端口或 Tunnel / 反代
- 遵守目标站点条款与当地法律
普通代码修改后优先:
uv run python -m unittest discover -s tests -v
uv run python -m py_compile register_cli.py cf_mail_debug.py grok_register/app.py grok_register/cli.py
# 或
mise run check- 未配置 Ruff / Black / mypy / pytest 为必需项
scripts/optimization_checks.py、scripts/verify_config_safe.py可能访问外部服务;后者默认只打印脱敏配置,--probe-mail/--probe-remote才会打真实网络,不宜当作离线 CI- 不要为验证普通改动而跑真实注册 / 远端上传
新增配置键时,请同步更新:代码默认值、config.example.json、本 README。
- License:MIT(保留上游 AaronL725 版权,并标注本仓 van7517 修改)
- 上游原版:AaronL725/grok-register — 本项目在其基础上二次开发
- 社区讨论:linux.do
