# gh-regkit-prime — GitHub mass autoreg (Camoufox + mail.cx) Вторая рабочая реализация GitHub-авторега: локально `C:\Users\User\Desktop\_PROJECTS\gh-regkit-prime`, репа `gbonnet65923/gh-regkit-prime` (пуш через Git Data API — локальный git-transport на машине сломан). Дашборд `http://127.0.0.1:8010` (uvicorn web.server:app). Batch: `PYTHONPATH="" python311 main.py --count N`. Конфиг `config.json`: `proxy_file=proxies.txt`, `proxy_hard_block_retries=3`, `proxy_rate_limit_retries=2`, `fresh_profile=true`, `create_pat`, `enable_2fa`. Выход: `accounts/github_accounts_.txt`, формат `email----password----username----totp_secret----has_recovery----pat`. Стек: multi-step signup wizard + warm-up dwell + mail.cx (домены uqu.me/ddker.com/9k3r.com, mailbox implicit — localpart генерится на лету) + Arkose FunCaptcha multi-LLM voting (локальный qwen3-vl через dashscope-прокси :16432, $0). ## Питфолы (все проверены в бою) 1. **mail.cx короткие local-parts → username-коллизии.** mail.cx выдаёт 4-символьные local-parts (`kt78@...`); username из них почти всегда занят. Паддируй local-part случайными alnum до ≥10 символов ПЕРЕД первой попыткой. 2. **Disabled 'Create account' может означать username taken.** Занятый username держит submit-кнопку disabled вечно; общая ошибка «validation pending» сжигает page-reload'ы с теми же данными. Перед raise проверяй username-error alert (`auto-check [role='alert']`, текст 'not available'); при taken — новый random-суффикс 4-5 цифр и continue БЕЗ reload страницы. 3. **2FA wizard держит невидимые otp-близнецы.** На странице 2FA setup несколько `input[name='otp']`; `.first`/`:not([disabled])` может зарезолвиться в невидимый → fill висит 'element is not visible' → stage fail. Итерируй кандидатов, выбирай visible+editable; фолбэк — JS `value=` + dispatch input/change events на элемент с `offsetParent !== null`. 4. **Salvage аккаунта при post-login краше.** Camoufox driver-краш ('Connection closed while reading from the driver') на стадии 2FA/PAT выбрасывал полностью верифицированный аккаунт. Ставь checkpoint-флаг в shared dict сразу после подтверждения logged_in cookie; во внешнем except при установленном флаге сохраняй email/password/username до return None. 5. **Никогда два batch одновременно.** Параллельные batch бьются за один exit-IP → DataDome-бан и потерянные акки; heartbeat'ы уже убитых процессов маскируют картину. Перед запуском перечисли python-процессы через PowerShell `Get-CimInstance Win32_Process` + фильтр CommandLine (tasklist/wmic с фильтрами ненадёжны под git-bash), убей ВСЕ main.py batch, оставь ровно один. 6. **Резики обязательны для массы.** После DataDome-бана домашнего IP signup стабильно ловит challenge-loop; free HTTP-пул даёт ~30-50% выхода, residential с активным трафик-пакетом — 80%+. Дополнительно: на free-прокси ~половина свежих акков сразу улетает в `/suspended` после signup — помечай такие строки маркером `----SUSPENDED` (проверка `"suspended" in page.url` в точке auto-login-fail), иначе банк считается живым неверно. 7. **TOTP secret живёт в otpauth-URI, не в innerText.** На странице 2FA-setup секрет часто отсутствует в видимом тексте; парси page.content() регекспом `otpauth(%3A%2F%2F|://)totp[^"']*secret(%3D|=)([A-Z2-7]{16,32})` ПЕРЕД generic base32-фолбэком — иначе «TOTP secret not found (got '')». 8. **PAT `ghp_...` тоже в HTML-атрибутах.** Токен рендерится в ``/clipboard-value и не попадает в innerText; сканируй page.content() и добавь ретрай через ~5s (страница токена догоняет рендер). Без этого PAT-стадия стабильно возвращает пусто. 9. **Скачивание recovery-кодов вешает Camoufox-визард.** Firefox download-handler периодически виснет на «Download recovery codes». Если коды уже scraped из DOM — пропускай `expect_download` целиком; скачивание только как фолбэк при пустом recovery. 10. **Прокси-пул протухает за часы.** Перед массовым прогоном перечитай весь proxies.txt параллельным live-тестом (ThreadPoolExecutor ~40 воркеров, GET https://github.com/login, timeout 8s) и перезапиши файл только живыми — мёртвые прокси сжигают по 5+ минут на акк (connect timeout + DataDome-лупы) ещё до signup. 11. **Патчи runner.py не применяются к живому batch.** Python держит старый код в памяти — после любой правки убей batch и запусти заново, иначе «фикс» не проявится и ты будешь дебажить уже исправленное. 12. **Kill-фильтр по пути проекта ненадёжен.** Batch, запущенный из своего cwd, имеет в CommandLine только `python.exe main.py --count N` без имени проекта — фильтр по 'gh-regkit' пропускает его. Фильтруй по `main.py` + `--count`; после kill ПЕРЕЧитай список процессов и запускай новый batch только при пустом списке (зомби-дубли переживают один taskkill и дают suspended-акки). 13. **Стадии profile/repo выключены в config.json по умолчанию.** `complete_profile`, `set_profile_status`, `create_repo` = False даже когда код стадий есть; для прогрева акка включай их явно в config.json перед batch. 14. **Settings-страницы свежих акков редиректят на ПОЛНУЮ форму логина, не sudo-confirm.** GitHub для подозрительных/свежих сессий кидает `/settings/*` → `/login?return_to=...` с полями `#login_field` + `#password` (не `#sudo_login_password`). Гейт-фикс должен заполнять ОБА поля (email приоритетнее username — при «Authentication failed» ретрай с username) и после прохождения landing будет `/session` или `/dashboard` — ОБЯЗАТЕЛЬНО повторный goto на исходный settings-URL. 15. **Submit гейта — только через `input[name='commit']` внутри формы.** Generic-клик по `button[type='submit']`/видимой кнопке попадает в WebAuthn/passkey-виджет («Retry passkey» на странице) → GitHub отвечает «Authentication failed» даже с верными кредами. Порядок селекторов: `input[name='commit'][type='submit']` → `form input[name='commit']` → submit-кнопка; фолбэк — JS-клик по commit внутри `form#login-form, form[action*='session']`. 16. **Device-verification луп = потолок стейджей на flagged IP.** Гейт может ПРОЙТИ, но GitHub снова кидает на `/login` для каждой следующей чувствительной страницы (`return_to=/settings/security`, `/settings/tokens/new`, `/new`) — это device-activation стена, 2FA/PAT/repo на таком акке невозможны в принципе. Детектируй маркеры «unusual»/«device activation» в тексте страницы и скипай стадию сразу (return), не жги 5 минут на ретраи; акк всё равно сохраняй. Отличить стену от бага кода помогает debug-дамп: на фейле стадии пиши `page.content()` в `accounts/_debug_.html` и смотри `` + текст — title «Sign in to GitHub» на дампе PAT означает login-редирект, а не форму токена. 17. **Рега стабильна даже когда стейджи падают.** Выход signup+verify+login на live-тестированном free-пуле ~65-70%; узкое место — не регистрация, а post-login стейджи (гейты/суспенды). Не переписывай signup-флоу из-за пустых колонок 2FA/PAT — сначала прочитай debug-дамп стейджа. ## 1024proxy (residential) — специфика - Pricing-страница CF-блокирует домашний IP — открывай через Camoufox с любым рабочим free-прокси (`proxy={"server":...}`). - Цены: Dynamic Residential Traffic 2GB=$2.40 ($1.20/GB), от 200GB $0.70/GB, 1TB $490 ($0.49/GB); registration-линии от $0.027/IP; static ISP $0.08/IP/день. - Gateway `us.1024proxy.io:3000` возвращает `407 Proxy Authentication Required` / `Insufficient traffic`, пока не КУПЛЕН traffic-пакет. Баланс кошелька сам по себе НЕ авторизует трафик; IP-whitelist тоже не помогает без пакета. - White API `https://white.1024proxy.com/white/api?region=US&num=N&time=10&format=0&type=json` работает только из браузерного контекста дашборда (cookie zero_sid); прямой fetch из Python — CORS/403. - Покупка пакета — через дашборд UI (`/getporxy/traffic`), API-эндпоинты заказа контекст-зависимы.