🚀 Automated QwenCloud account registration & API key harvester with multi-threading, TUI dashboard, proxy rotation, and Gmail OAuth
Features • Prerequisites • Setup • Usage • How It Works
- ⚡ Multi-threaded — Run N browsers concurrently (
-t N) - 🖥️ TUI Dashboard — Real-time worker status, progress bar, ETA, CPU/Mem
- 👻 Invisible mode — Headed browser on Xvfb virtual display (CF-safe)
- 🔄 Proxy rotation — Each account gets a unique proxy, no reuse
- 📧 Gmail OAuth — Multi-account Gmail token management for email verification
- 🎭 Censor mode — Mask emails and API keys in output (
-c) - 🔄 Auto-resume — Login existing accounts to harvest missed API keys
- 📊 Scenario detection — Auto-detects all page states (signup, login, OTP, dashboard, etc.)
| Requirement | Install |
|---|---|
| Python 3.11+ | python.org |
| Google Chrome | google.com/chrome |
| Xvfb | sudo apt install xvfb |
| Playwright | pip install -r requirements.txt && playwright install chromium |
git clone https://github.com/Vanszs/qwencloud-generator.git
cd qwencloud-generator
pip install -r requirements.txt
playwright install chromiumEdit proxy.txt — one proxy per line:
username:password@host:port
python3 generate_email_list.py yourgmailuser -o email_list.txt- Create a project at Google Cloud Console
- Enable Gmail API
- Create OAuth 2.0 credentials (Desktop app type)
- Download
client_secret.jsonto this folder - Authorize each base Gmail account:
python3 gmail_auth.py# Single thread, browser visible
python3 run.py 10
# 5 threads, invisible (Xvfb)
python3 run.py 100 --headless -t 5
# 10 threads with censored output
python3 run.py 400 --headless -t 10 -cpython3 run.py 50 --headless -t 5 --resume| Flag | Description | Default |
|---|---|---|
N |
Target number of successful API keys | 5 |
--headless |
Run via Xvfb (invisible browser) | off |
--resume |
Resume already-registered accounts via login | off |
-t N |
Number of concurrent threads | 1 |
-c |
Censor emails/API keys in output | off |
--log |
Show full subprocess logs | off |
--self |
Run without proxy (use own IP) | off |
--nyx PROXY |
Use rotating proxy | — |
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Email List │───▶│ run.py │───▶│ qwencloud_full.py│
│ (Gmail) │ │ (Orchestrator)│ │ (Browser Auto) │
└─────────────┘ │ -t N threads │ │ - Signup/Login │
│ TUI Dashboard │ │ - OTP verify │
┌─────────────┐ │ Proxy claim │ │ - API key extract│
│ proxy.txt │───▶│ Email claim │ └─────────────────┘
└─────────────┘ └──────────────┘ │
│ ▼
┌──────────────┐ ┌─────────────┐
│ api_keys.txt│◀─────│ accounts.json│
└──────────────┘ └─────────────┘
- Each thread claims a unique email + proxy (thread-safe)
- Spawns
qwencloud_full.pyas subprocess (Playwright is not thread-safe) - Monitors subprocess output for progress updates → TUI
- Parses
__RESULT__JSON from stdout - Saves API keys to
api_keys.txtand account data toaccounts.json
| File | Purpose |
|---|---|
run.py |
Main orchestrator — threading, TUI, proxy/email claiming |
qwencloud_full.py |
Browser automation — signup, login, API key extraction |
gmail_auth.py |
Gmail OAuth multi-account token management |
generate_email_list.py |
Generate Gmail dot-variants |
logger.py |
Colored logging utilities |
tui.py |
Terminal UI dashboard (ANSI escape codes, no dependencies) |
run_hidden.sh |
Xvfb wrapper script |
- Each browser instance gets 1 unique proxy — no reuse
- Gmail dot-variants work as separate QwenCloud accounts
- Stuck processes are killed after 30s of no output
- Total timeout per account: 300s
- Cloudflare requires headed browser (use
--headlesswhich runs Xvfb, not true headless)
MIT — feel free to use, modify, and distribute.
