自动批量注册 Outlook / Gmail 邮箱 → 平台注册 / 订阅授权 → 导出 cookie 或导入 SUB2API / CPA
reg-factory 是一套全自动注册流水线:先自注册 Outlook 邮箱,再用同一邮箱在 ChatGPT / Grok / Claude 上批量注册账号,并导出可直登的 cookie。底层用 比特浏览器(BitBrowser) 做指纹隔离、Clash Verge 做节点切换绕区域封锁与 Cloudflare 风控、 接码/打码平台过手机号与验证码。
🔜 即将上新:Gmail 注册机 → Google One 授权 → SUB2API / CPA 导入完整链路。
⚠️ 仅供学习与授权测试使用。所有密钥通过环境变量提供,仓库内不含任何明文凭据。
- 安装并启动比特浏览器客户端,确保本地 API 在线(默认
http://127.0.0.1:54345)。 - 客户端要保持运行——脚本通过该 API 创建/打开/关闭浏览器窗口。
- 安装 Clash Verge 并导入你的机场订阅,选一个节点并开启「系统代理 / Tun 模式」。
- 注册 Grok 需要能过 Cloudflare 的干净节点;脚本会在订阅节点里自动逐个试探可用节点。
- 设置 → External Controller:开启外部控制器 API,并设置一个 secret。
- 记下控制面端口(Clash Verge 默认
9097,mihomo 内核默认9090)。 - 记下混合代理端口(mixed-port,默认
7897)。
- 记下控制面端口(Clash Verge 默认
- 把 secret 填进
.env的CLASH_SECRET(见下)。
- Python 3.10+。
- BlueStacks:用于运行 Gmail Android App,建议使用固定版本;Release 包可选择附带安装器。
- Android Studio 或 Android SDK Platform Tools:至少需要
adb可用。只安装platform-tools也可以,不强制完整安装 Android Studio。 - Node.js 20+、Appium 2.x、Appium UiAutomator2 driver:用于驱动 Android UI 自动化。
- 模拟器内需要安装 Gmail App,并开启 BlueStacks ADB,默认连接地址为
127.0.0.1:5675。 - 相关脚本在
gmail_android/scripts/下;小体积 zip 只包含代码和安装脚本,不包含 BlueStacks / Android SDK / Node / Appium 等大二进制。
pip install -r requirements.txt
playwright install chromium复制模板并填写:
cp .env.example .env.env 已被 .gitignore 忽略。真实的进程环境变量优先于 .env。
| 环境变量 | 说明 | 必填 |
|---|---|---|
CLASH_SECRET |
Clash Verge External Controller 的 secret | 走节点时必填 |
CLASH_API |
Clash 控制面地址(默认 http://127.0.0.1:9097) |
否 |
CLASH_PROXY |
Clash 混合端口代理(默认 http://127.0.0.1:7897) |
否 |
CLASH_GROUP |
切换出口的代理组名(默认 GLOBAL) |
否 |
BITBROWSER_API |
比特浏览器本地 API(默认 http://127.0.0.1:54345) |
否 |
SMS_TOKEN |
接码平台 firefox.fun 的 token | 需手机号时必填 |
HERO_SMS_API_KEY |
备用接码 hero-sms.com 的 api_key | 否 |
CAPSOLVER_API_KEY |
CapSolver 打码 key | 按需 |
EZCAPTCHA_API_KEY |
EZ-Captcha 打码 key | 按需 |
OUTLOOK_CARD |
闪客云邮箱卡密(接口批量取号用) | 用接口取号时填 |
OUTLOOK_PROXIES |
Outlook 自注册住宅代理池,user:pass@host:port,换行/逗号分隔 |
否 |
MAIL_* |
备用域名邮箱(一般用不到) | 否 |
Codex 订阅授权 / 标准 token 上传(按需启用,留空自动跳过)
| 环境变量 | 说明 | 必填 |
|---|---|---|
BAXI_API |
Codex/Plus 订阅地址(默认 https://baxigpt.com/) |
开通 Plus 时 |
BAXI_CARDS |
激活码池(BX-XXXXXXXX,逗号/换行分隔,可多个) |
开通 Plus 时 |
CLAUDE_SUB_URL / GROK_SUB_URL |
Claude / SuperGrok 订阅入口(CDK 激活流程 🔜 敬请期待) | 否 |
CLAUDE_SUB_CDK / GROK_SUB_CDK |
Claude / SuperGrok 激活码 CDK 池(预留) | 否 |
CPA_URL / CPA_MGMT_KEY |
CPA 管理接口(codex 授权文件导入) | 用 CPA 时 |
SUB2API_URL / SUB2API_EMAIL / SUB2API_PASSWORD |
SUB2API 管理接口登录 | 用 SUB2API 时 |
SUB2API_GROUP |
SUB2API 目标分组名(默认 codex,需后台先建好) |
否 |
WEBCHAT2API_URL / WEBCHAT2API_KEY |
webchat2api(Grok sso 注入) | 用 Grok 时 |
CHATGPT2API_URL / CHATGPT2API_KEY |
chatgpt2api 普通网页号导入(POST /api/accounts,Bearer admin key) |
用 --import-c2a 时 |
SMS_PROJECT_ID_OPENAI / HERO_SMS_SERVICE_OPENAI |
ChatGPT add-phone 接码服务号 | 自动接码时 |
python run_full_flow.py # 注册 1 个 outlook 号后在 claude 上注册
python run_full_flow.py --platforms claude chatgpt grok
python run_full_flow.py --platforms chatgpt --import-c2a # chatgpt 注册成功后即时导入 chatgpt2api
python run_full_flow.py --skip-email --email a@outlook.com --password xxx
python run_full_flow.py --dry-run # 只打印将执行的命令自动注入
HTTP(S)_PROXY与CLASH_API/SECRET/GROUP给子进程。--import-c2a逐层透传到register_chatgpt.py,只对 chatgpt 平台生效,需先配CHATGPT2API_URL/KEY。
python register_three_platforms.py --from-pool
python register_three_platforms.py --email a@outlook.com --password xxx --token <refresh>
python register_three_platforms.py --loop # 常驻消费池并行流水线模式下建议先起共享取码服务(避免三窗口并发登录同一邮箱):
python mailbox_broker.py --port 8765python outlook_reg_loop.py # 循环
python outlook_reg_loop.py --count 20 # 注册 20 个后退出python register_github.py --auto # 从 _outlook_pool 取邮箱,跑完整流程
python register_github.py --auto --email a@x.com --password xxx # 指定邮箱
python register_github.py # 探索模式:填到验证就停、保留窗口GitHub 注册页是单页表单(邮箱/密码/用户名/国家),提交后是 Arkose FunCaptcha(octocaptcha 包裹)。
本项目用 agent-captcha 视觉投票求解器(common/agent_captcha.py)过验证,而非传统打码平台:
- 进拼图后按题目文本自动判变体:
sequence(4图标逐环序列)/rotate(3D朝向匹配)/character(小人踩格,最难,默认跳过换窗口)。 - 每轮把候选拼成一张大图、本地秒级增强(PIL,控体积避免传输超时),交 多个多模态模型并发投票(gemini-3.5-flash / gpt-5.5 / gemini-3.1-pro / claude-opus,多数表决),driver 据答案点箭头 + Submit。
- 复盘图落
screenshots_github/REVIEW_rN.png(红框=最终选择,彩框=各模型投票)。 - 网关/key 全走
.env(VISION_*/VOTE_*/IMAGE_EDIT_*,见.env.example)。
说明:验证关已实测可过;GitHub 对批量 Outlook 邮箱有风控(提示 "This email can't be used"),建议配可用邮源。
验证出现时的页面(Create account 后跳 "Verify your account" + octocaptcha):
三种拼图变体(脚本按题目文本自动分派对应解法):
| sequence(逐环序列) | rotate(3D 朝向) |
|---|---|
![]() |
![]() |
| character(小人踩格,最难) | wires(连线对图标) |
![]() |
![]() |
复盘图(每轮落 screenshots_github/REVIEW_rN.png):候选拼成带编号网格,粗红框 = 最终投票选择,彩色细框 = 各模型各自的投票,底部黄字列出「模型:答案」,方便人工核对是谁选对/选错:
把上面 GitHub Arkose 的投票内核复制+泛化成独立库:用 CaptchaSpec(frame / 选择器 / prompt / 交互模式)描述任意一类验证码,不写死平台,多模型视觉投票求解,通用 driver 据答案驱动浏览器。
新增解新版 hCaptcha —— 实测发现现代 hCaptcha 把整个挑战渲染进单个 <canvas>(没有任何可点的 DOM tile),传统「枚举 tile 点击」无效。本库提供两种画布 driver:
canvas_grid(点击型):稳定截画布 → 按行列叠加编号网格(四边内缩对齐真实图块)→ 多模型投票 → 按像素坐标点 canvas → 提交。题干自动判单选(the item/thing)/ 卡片(card/different)/ 多选(select all)。canvas_drag(拖拽型):多模型投票FROM/TO归一化坐标(取中位数抗离群)→ 鼠标分步带抖动拖放(模拟人手)→ 提交。
from vision_solver import solve, CaptchaSpec
# 验证码已在页面触发后:
spec = CaptchaSpec.from_json("vision_solver/presets/hcaptcha.json") # 点击型
ok = await solve(page, spec) # True=通过# 对 hCaptcha 官方 demo 跑端到端 / 三 sitekey 鲁棒性跑分(复盘图落 screenshots_vision/)
python vision_solver/tests/test_hcaptcha_live.py
python vision_solver/tests/test_hcaptcha_robust.py 3实测:点击型对 hCaptcha demo 三个测试 sitekey 各 3 轮 8/9 通过(修复空选卡死后全过);拖拽机制经本地合成 canvas 谜题验证 3/3(该 demo 不下发拖拽题)。投票网关/key 复用现有
VISION_*/VOTE_*(.env)。详见vision_solver/README.md。
python export_accounts.py # 全部平台
python export_accounts.py claude chatgpt # 指定平台BitBrowser + Playwright,复用注册同款 PX 按压验证逻辑;按结果分类输出到
unlock_results/(unlocked_* 成功 / needs_phone_* 需短信 / failed_* 失败)。
打码 key 走环境变量 EZCAPTCHA_API_KEY。
python unlock_outlook.py # 自动找最新的 locked 文件
python unlock_outlook.py --input outlook_accounts/accounts.txt # 指定账号文件
python unlock_outlook.py --input emails_locked.txt --concurrency 2
python unlock_outlook.py --input accounts.txt --proxy-file proxies.txt输入每行
email----password(可带额外字段)。解锁后再跑下面的 token 提取。
纯 requests 模拟 OAuth2 授权码流程(免浏览器),用账号密码换取
Microsoft Graph 的 refresh_token,输出 email----password----refresh_token----client_id,
结果存到 outlook_accounts/graph_tokens_<时间戳>.txt。
python extract_graph_tokens.py # 自动扫 unlock_results/,跳过已提取
python extract_graph_tokens.py outlook_accounts/accounts.txt # 指定账号文件
python extract_graph_tokens.py --email a@outlook.com --password xxx
python extract_graph_tokens.py accounts.txt --concurrency 10 # 并发数(默认 5)走系统代理(Clash),避免
account.live.com限流;账号文件每行email----password----...。
python -m common.proxy_switch list # 列出 GLOBAL 组节点
python _clash_verge.py ping # 控制面连通性Gmail Android 模块位于 gmail_android/。它用于在本机 BlueStacks + Appium 环境里驱动 Gmail Android 注册流程,并把 Android 环境安装脚本一起打包,方便后续作为 GitHub Release 附件分发。
安全边界:
- 默认停在手机/SMS/CAPTCHA 或 Google 额外安全验证页,由人工完成。
--resume-after-phone用于人工验证完成后续跑。--accept-terms只在操作者明确同意 Google Privacy and Terms 后使用。sms_provider.py只提供环境变量驱动的 provider 骨架,后续合并内部合规接码流程时复用;当前不默认接入 Gmail 安全验证自动化。
Release 上传建议:
gmail-android-local-with-bluestacks.zip
包内结构:
gmail_android/
gmail_register_local.py
appium_api.py
config.py
sms_provider.py
.env.example
requirements.txt
scripts/
install_all_windows.ps1
install_bluestacks.ps1
install_windows.ps1
start_appium.ps1
check_env.ps1
run_gmail_register.ps1
offline/
bluestacks/
BlueStacksInstaller_*.exe # 可选;推荐固定版本安装器
当前脚本支持 BlueStacks 直接安装版:把固定版本 BlueStacks 安装器放入 gmail_android/offline/bluestacks/,用户解压后运行:
Set-ExecutionPolicy -Scope Process Bypass
cd gmail_android
.\scripts\install_all_windows.ps1
.\scripts\start_appium.ps1
.\scripts\check_env.ps1注意:如果包内 BlueStacks 安装器是 web/micro installer,目标电脑仍需要联网下载 BlueStacks 组件。完全离线发布时,请替换为官方 full/offline installer 后再打包。
构建 GitHub Release zip:
cd gmail_android
.\scripts\build_release.ps1
# 带固定版本 BlueStacks 安装器
.\scripts\build_release.ps1 -BlueStacksInstaller C:\path\to\BlueStacksInstaller.exe上传到 GitHub Release:
- 先运行上面的
build_release.ps1,生成gmail_android/dist/gmail-android-local.zip。 - 打开 GitHub 仓库页面,进入
Releases->Draft a new release。 - 新建 tag,例如
gmail-android-v2026.06.06。 - 把
gmail_android/dist/gmail-android-local.zip拖到 release 附件区域,然后发布。
也可以用 GitHub CLI 上传:
cd E:\reg-factory
gh auth login
gh release create gmail-android-v2026.06.06 `
.\gmail_android\dist\gmail-android-local.zip `
--title "Gmail Android Local Package" `
--notes "Gmail Android/Appium local installer package."
# 如果 release 已经存在,改用 upload
gh release upload gmail-android-v2026.06.06 `
.\gmail_android\dist\gmail-android-local.zip `
--clobber复制环境模板:
cd gmail_android
copy .env.example .env关键变量也可写入仓库根目录 .env:
APPIUM_SERVER=http://127.0.0.1:4723
ANDROID_DEVICE=127.0.0.1:5675
GMAIL_USERNAME_PREFIX=
ACCEPT_TERMS=0
SMS_PROJECT_ID_GMAIL=
HERO_SMS_SERVICE_GMAIL=运行:
# 默认跑到手机/安全验证处停住
python .\gmail_register_local.py
# 人工完成手机验证后续跑
python .\gmail_register_local.py --resume-after-phone
# 明确同意条款后,让脚本继续点击 I agree / ACCEPT 并进入 Gmail
python .\gmail_register_local.py --resume-after-phone --accept-terms
# 也可以让脚本等待人工手机验证完成后自动继续
python .\gmail_register_local.py --wait-phone-verification --accept-terms注册拿到的是网页 session(无 refresh_token,下游中转易 401)。这一组流程把账号升级成
带 refresh_token 的正式凭据,并灌到下游中转(SUB2API / CPA)。
前置条件
- 已用
register_chatgpt.py注册过该账号,cookies/chatgpt/full_*.json存在(②靠它重登)。 .env配好SUB2API_URL/EMAIL/PASSWORD(②必需),可选CPA_URL/CPA_MGMT_KEY(推 CPA)。- 账号最好已是 Plus(否则 OAuth 能成,但无 Codex 额度)——没 Plus 先走 ①。
典型一条龙
# 1) 没 Plus 先用激活码开通(已是 Plus 可跳过)
python activate_plus.py --email a@outlook.com --code BX-XXXXXXXX
# 2) Codex OAuth 授权 → 同时建到 SUB2API + 推 CPA(带真 refresh_token)
python oauth_codex.py --manual-phone --keep # 遇 add-phone 手动填号 + 输 WhatsApp 码
# 3) 可选:批量兜底上传(没走 OAuth 的旧 session,见 ③ 说明)
python upload_tokens.py chatgpt纯 HTTP,无需浏览器。订阅地址与激活码走环境变量 BAXI_API / BAXI_CARDS。
python activate_plus.py --email a@outlook.com # 用激活码池 + 已存 session
python activate_plus.py --email a@outlook.com --code BX-XXXXXXXX
python activate_plus.py --at eyJ... --code BX-XXXXXXXX # 直接给 access_token用已存 cookie 重登账号,走 Codex CLI OAuth 换取带 refresh_token 的正式凭据,同时建到
SUB2API(type=oauth)并推到 CPA。授权时若遇 OpenAI 的 add-phone 手机验证:
- 默认走接码平台自动过号;
--manual-phone:手动模式,脚本停在输号页,由你在浏览器里自己填号 + 输验证码 (建议用 WhatsApp 可接码的号段,OpenAI 对普通虚拟号风控严)。
python oauth_codex.py # 默认最新 cookie,自动接码
python oauth_codex.py --manual-phone --keep # 手动填号 + 输 WhatsApp 码(推荐先用这个试号)
python oauth_codex.py --cookie cookies/chatgpt/full_xxx.json --skip-cpa🔜 add-phone 全自动接码版本(WhatsApp 接码)后续提供。
注册脚本只把 token 落到 tokens/;上传单独触发,幂等(成功的 email 记账跳过)。
python upload_tokens.py # all(chatgpt + grok)
python upload_tokens.py chatgpt # 只传 ChatGPT(CPA + SUB2API)
python upload_tokens.py grok # 只传 Grok(webchat2api)
⚠️ ChatGPT 这条是 Path A(兜底):从网页 session 上传,无refresh_token(CPA 用合成 id_token),下游过期不能续期。Codex 进 SUB2API/CPA 的正路是上面 ② 的oauth_codex.py(带真refresh_token);本路径仅供没走 OAuth 的批量兜底。
普通网页号(非 codex/OAuth 三件套)单独走 chatgpt2api(basketikun/chatgpt2api)。注册成功时
顺手落 tokens/chatgpt/c2a-*.json;上传两种方式:
# 方式 A:注册时即时导入(推荐,需先配 CHATGPT2API_URL/KEY)
python register_chatgpt.py --count 5 --import-c2a
python run_full_flow.py --platforms chatgpt --import-c2a
# 方式 B:事后批量聚合上传 / 导出
python export_chatgpt2api.py --post https://<host> --key <admin> # 直接 POST /api/accounts
python export_chatgpt2api.py # 导出 access_token 列表(粘进批量框)
python export_chatgpt2api.py --json # 导出 {accounts:[...]} JSON只认
access_token(不带type:"codex",否则被对端当 codex 源)。网页号无真refresh_token, access_token 约 10 天过期后对端续不了命,属预期。重复 token 对端按 skipped 幂等处理。
订阅入口走环境变量 CLAUDE_SUB_URL(https://6661231.xyz/#/claude)、
GROK_SUB_URL(https://6661231.xyz/#/grok)。激活码 CDK 流程 + 授权到 SUB2API / CPA
敬请期待,CDK 池预留 CLAUDE_SUB_CDK / GROK_SUB_CDK。
后续将加入完整链路:Gmail 自动注册机 → Google One 授权 → SUB2API / CPA 导入, 覆盖账号注册、订阅授权与下游中转接入。
多人协作速查:入口脚本在根目录,可复用基建在
common/。所有密钥走环境变量(config.py统一读取)。
入口脚本(根目录)
| 脚本 | 职责 |
|---|---|
run_full_flow.py |
端到端编排:注册邮箱 → 三平台注册 |
register_three_platforms.py |
三平台(Claude/ChatGPT/Grok)注册编排 |
register.py / register_chatgpt.py / register_grok.py |
各平台注册主流程 |
register_github.py |
GitHub 注册主流程(单页表单 + Arkose 验证视觉求解 + 邮件 launch code) |
outlook_reg_loop.py / register_outlook_standalone.py |
Outlook 自注册养号 |
unlock_outlook.py / extract_graph_tokens.py |
Outlook 解锁 / 提取 Graph refresh_token |
activate_plus.py |
baxigpt 激活码开通 Plus / Codex 订阅 |
oauth_codex.py |
Codex OAuth → SUB2API + CPA(带 refresh_token,支持 --manual-phone) |
upload_tokens.py |
把 tokens/ 标准 token 上传到 CPA / SUB2API / webchat2api |
export_chatgpt2api.py |
聚合普通网页号 → chatgpt2api 导入(--post 直传 / 导出 txt/json) |
export_accounts.py |
导出已注册账号 cookie |
mailbox_broker.py |
共享取码服务(避免并发登录同一邮箱) |
可复用基建(common/)
| 模块 | 职责 |
|---|---|
browser.py |
BitBrowser 连接、stealth、React 受控输入 |
mailbox.py / emails.py |
邮箱取码(Graph/浏览器)、邮箱池管理 |
cookies.py |
平台 cookie 保存 |
sms.py |
参数化接码客户端(firefox.fun + hero-sms 兜底) |
oauth_codex.py |
Codex OAuth 授权驱动、add-phone 处理、SUB2API 调用 |
plus_baxi.py |
baxigpt 激活码验卡 / 提交 / 轮询 |
session_export.py |
登录态导出成 CPA / SUB2API 标准 token(对齐 FlowPilot) |
uploaders.py |
上传到 CPA / SUB2API / webchat2api |
proxy_switch.py |
Clash 节点切换 |
agent_captcha.py |
Arkose 验证视觉投票求解器:变体分派 + 多模型并发投票 + 图片增强/拼接 + 复盘标注 |
通用验证码求解库(vision_solver/)
| 模块 | 职责 |
|---|---|
schema.py |
CaptchaSpec:用 frame/选择器/prompt/交互模式描述一类验证码(4 mode),不写死平台 |
vision.py |
视觉 LLM 问询 + 多模型并发投票内核(vote_picklist 多选 / vote_answer 单选 / vote_points 拖拽两点) |
imaging.py |
截图 / 编号网格叠加 / 本地增强 / 复盘标注 |
drivers.py |
4 种 driver:grid_select(DOM多选) / single_pick(单选导航) / canvas_grid(新版 hCaptcha 画布点击) / canvas_drag(画布拖拽) |
presets/ |
预置 spec:recaptcha_v2 / arkose_match / hcaptcha(画布点击) / hcaptcha_drag(画布拖拽) |
tests/ |
hCaptcha 过码端到端 / 鲁棒性跑分脚本 |
由
common/agent_captcha.py的内核复制+泛化而来,独立成库、独立演进,不影响现有 GitHub Arkose 流程。详见vision_solver/README.md。
协作约定
- 密钥/凭据只走环境变量(见
.env.example),严禁明文进库。 - 运行期数据(
cookies/、tokens/、recordings/、*.log、截图等)均已.gitignore。 - 新增可复用逻辑放
common/,对应的命令行入口放根目录,复用config.py读配置。
| 路径 | 内容 |
|---|---|
emails.txt |
邮箱池(email----password----token----clientid),运行时生成 |
cookies/ |
注册成功导出的 cookie(full_*.json / sk_*.txt) |
_outlook_pool/ |
outlook_reg_loop 产出的待用号 |
tri_register_logs/ |
三平台注册日志 |
screenshots*/ |
调试截图 |
以上运行期数据均被 .gitignore 忽略,发布包内为空。
- claude 报 app-unavailable-in-region:claude.com 对本机 IP 区域封锁,需开 Clash 走干净
节点(
run_full_flow/register.py的--node auto)。 - grok 全页 Cloudflare 拦截:必须切 Clash 节点;
register_grok.py会用 curl_cffi 指纹 逐个试节点找能过的。 - 三窗口登录同一 outlook 报并发登录:用
mailbox_broker.py共享取码(每号只登一次)。 - 缺 secret 连不上 Clash 控制面:确认 External Controller 已开 API 且
CLASH_SECRET正确。
- 💬 QQ 交流群:
1048143135(使用问题、避坑、更新通知)
- 🐧 LinuxDO — A community for tech enthusiasts






