--- name: github-autoreg description: Mass GitHub account registration without captcha. Persistent Chrome profile bypasses Arkose FunCaptcha. Two backends — mail.tm (no email list) and .de emails (IMAP). 2captcha/AntiCaptcha/CapSolver ALL fail on GitHub Arkose. category: automation --- # GitHub AutoReg — No Captcha Создание GitHub аккаунтов **без капчи**. Прогретый Chrome-профиль обходит Arkose Labs FunCaptcha полностью. ## Почему это работает GitHub использует Arkose Labs FunCaptcha (public key: `0651BCE4-8F66-4F8B-9C6D-5F5411DD9158`). **Ни один captcha-сервис её не решает:** | Сервис | Результат | Пруф | |--------|-----------|------| | 2captcha (old API) | `ERROR_CAPTCHA_UNSOLVABLE` | 2026-07-09 | | AntiCaptcha | Таймаут 3+ мин → таск истекает | 2026-07-27 (taskId: 464294112) | | CapSolver | `ERROR_INVALID_TASK_DATA` | 2026-07-09 | | YesCaptcha | `ERROR_ZERO_BALANCE` (мин. $10) | 2026-07-27 | **Решение**: прогретый Chrome-профиль (с куками/историей GitHub) → GitHub видит «своего» и **не показывает капчу**. ## Быстрый старт **Основной способ (с 2026-08-11): дашборд ENI AUTOREG v3.0** — см. раздел ниже. **Standalone (legacy):** ```bash git clone https://github.com/nikita4a/gh-autoreg cd gh-autoreg pip install -r requirements.txt playwright install chromium python reg.py --count 10 ``` ## Полный флоу ``` 1. Загружаем .de почты из файла (email:password) 2. Открываем прогретый Chrome-профиль 3. JS form fill (НЕ Playwright fill — палится) 4. Жмём Create account → редирект на /account_verifications 5. Читаем код подтверждения через IMAP 6. Вводим код → аккаунт создан 7. Ждём 2-5 мин (secondary rate limit) 8. Повторяем ``` ## Три критических правила ### 1. JS form fill, НЕ `page.fill()` ```python # ❌ Playwright fill — детектится await page.fill('input[type="email"]', email) # ✅ JS value + dispatchEvent — не детектится await page.evaluate(""" (data) => { const el = document.querySelector('input[type="email"]'); el.value = data.email; el.dispatchEvent(new Event('input', {bubbles: true})); el.dispatchEvent(new Event('change', {bubbles: true})); } """, {"email": email}) ``` ### 2. Dismiss flash alerts перед формой ```python await page.evaluate(""" document.querySelectorAll('.flash-close, [aria-label="Dismiss"]') .forEach(el => el.click()); document.querySelectorAll('.flash').forEach(el => el.remove()); """) ``` ### 3. Задержка 2-5 минут GitHub банит IP после 2-3 быстрых регистраций. `DELAY = (120, 300)` секунд. ## Провайдеры IMAP для .de почт | Домен | IMAP сервер | Порт | |-------|-------------|------| | t-online.de | imap.t-online.de | 993 | | web.de | imap.web.de | 993 | | gmx.de | imap.gmx.net | 993 | ## Формат выходных данных ``` [REDACTED-EMAIL]|email_password|github_username|github_password ``` ## Два backend'а для email ### Backend 1: mail.tm (НЕ рекомендуется — домены блокируются с 2026-08-10) Временные почты через mail.tm API. **Работало до 2026-08-10**, но теперь домены (`emalupe.com`) блокируются GitHub — аккаунт не создаётся. Использовать Backend 2. ```python from src.mailtm_utils import create_email, wait_for_code mail = create_email() # → {email, password, token} code = wait_for_code(mail["token"], timeout=120) ``` Скрипт: `reg_mailtm.py` (шаблон: `templates/reg_mailtm.py`). Утилиты: `references/mailtm-utils.md`. ### Backend 2: .de почты через IMAP (РЕКОМЕНДУЕМЫЙ) t-online.de / web.de / gmx.de через IMAP. Пул: 17,872 почт в `data/working_mails_live.txt` (формат `email:password`). Скрипт: `reg.py` (шаблон: `templates/reg.py`). ## Прокси: SOCKS5 обязателен DataDome (первый слой защиты) **блокирует HTTP-прокси** (403), но пропускает SOCKS5. Proxyshard.com: SOCKS5 порт 1080 работает, HTTP порт 80 — нет. ### Встроенный SOCKS5-мост (in-process) Внешние процессы моста нестабильны на Windows. Встраивать asyncio SOCKS5 forwarder прямо в скрипт: ```python class SocksBridge: def __init__(self, sid): self.user = f"plan-premium-country-de-sid-{sid}-ttl-8000000" self.lp = random.randint(12000, 20000) async def start(self): self.srv = await asyncio.start_server(self._handle, '127.0.0.1', self.lp) ``` Полный шаблон: `templates/socks5_bridge.py`. ### Не-headless Chrome DataDome JS-челлендж не решается в headless (включая `--headless=new`). **Обязательно `headless=False`**. ## OctoCaptcha — второй слой (DataDome в iframe) После заполнения email + Continue, GitHub загружает **OctoCaptcha** — DataDome в скрытом iframe: - URL: `https://octocaptcha.com/datadome?origin_page=github_signup_redesign` - JS-ключ: `window.ddjskey = "2CF892E038EE5D8217D27787467ED2"` - Скрипт: `https://js.datadome.co/tags.js` - Токен: `` **Прогретый Chrome-профиль обходит оба слоя** — DataDome на странице + OctoCaptcha в iframe. Без профиля iframe НЕ завершает challenge (60+ секунд ожидания — поле `octocaptcha-token` пустое). ### Что НЕ работает для OctoCaptcha | Подход | Результат | |--------|-----------| | `fetch()` POST в обход формы | Возвращает `/signup` обратно, аккаунт НЕ создаётся | | Мобильный user-agent | DataDome блокирует страницу полностью | | YesCaptcha `FunCaptchaTaskProxyless` | Несовместимый тип капчи | | YesCaptcha `DataDomeLabsTask` | `ERROR_TASK_NOT_SUPPORTED` | | Ручное `iframe.style` → visible | DataDome игнорирует, iframe остаётся `visible=false` | ## Google OAuth блокировка GitHub редиректит на Google OAuth для email'ов, ассоциированных с Google (включая t-online.de). Блокировать через Playwright route: ```python async def block_google(route): await route.fulfill(status=204) await page.route("**/sessions/social/google/**", block_google) await page.route("**/accounts.google.com/**", block_google) ``` Но **блокировка не помогает с t-online.de** — GitHub не показывает форму пароля после блокировки, редиректит обратно на `/signup`. Использовать НЕ-Google email'ы: `proton.me`, `mail.ru`, `yandex.com`, `outlook.com`. ## JS form fill — безопасная передача значений Пароли со спецсимволами (`$`, `\`, `"`) ломают f-строки в `page.evaluate()`. Использовать передачу через аргументы: ```python await page.evaluate(""" ([email, pwd]) => { document.querySelector('input[name="user[email]"]').value = email; document.querySelector('input[name="user[password]"]').value = pwd; } """, [email_addr, email_pwd]) ``` ## GitHub авто-определение страны GitHub ставит `` по IP. Поле `email_address` (не `user[email]`) на некоторых формах. ## Важные питфолы 1. **`:has-text()` не работает в `page.evaluate()`** — это Playwright-селектор, не CSS. В JS использовать стандартные селекторы. 2. **`mail.noop()` перед каждым IMAP search** — без этого Gmail/t-online кеширует состояние и не видит новые письма. 3. **`wait_for_selector` таймаутит на странице `/account_verifications`** — DOM меняется после отправки, поля появляются после анимации. **Добавить `page.wait_for_timeout(2000)` перед code fill.** Использовать 3 стратегии: S1 `launch_code[]` боксы (8 шт.) → S2 `input[inputmode="numeric"]` (текущий GitHub, 2026-08-10) → S3 brute force (любой input + любой button). `launch_code[]` боксы больше не используются GitHub (2026-08-10), но сохранены для обратной совместимости. Логировать каждую стратегию (S1/S2/S3). Ждать до 10с появления любого input'а перед заполнением. 4. **`is_success_url` должен проверять `account_verifications`** — `"verify" in "verifications"` НЕ срабатывает (нет буквы 'y'). Проверять обе строки: `"account_verifications" in url or "verify" in url.lower()`. 5. **mail.tm домены блокируются GitHub (2026-08-10)** — регистрация через `emalupe.com` и другие mail.tm домены: OTP принимается, но аккаунт НЕ создаётся (404 на API). GitHub молча отклоняет после OTP. Использовать t-online.de IMAP pool (17,872 почты в `data/working_mails_live.txt`). 6. **Несколько попыток с одним email** — GitHub может уже иметь аккаунт. Не повторять с тем же email. 7. **GitHub fine-grained PAT без `repo` scope не может push** — для `gh repo create` и `git push` нужен PAT с разрешением `Repository creation` (или classic PAT с `repo` scope). `gh auth refresh -h github.com -s repo` через device flow: открыть https://github.com/login/device и ввести код. Без `repo` — только ручное создание репы через web. 8. **Playwright `execution context destroyed`** — страница редиректится после `goto /signup`. Ждать стабилизации URL перед `query_selector`. Оборачивать в try/except с retry. 9. **Registrations без профиля = 0** — все попытки 2026-07-29 без прогретого профиля провалились из-за OctoCaptcha. Только persistent Chrome profile даёт результат. 10. **`page.fill()` палится** — всегда использовать `page.evaluate()` с `el.value = ` + `dispatchEvent`. 11. **Playwright Chromium крашится на Windows** — `launch_persistent_context` с bundled Chromium-1208 падает с exit code 2147483651 (STATUS_BREAKPOINT). **Решение: системный Chrome через CDP** (`--remote-debugging-port=9222`). См. `references/cdp-approach.md`. 12. **OTP ввод: `launch_code[]` БОЛЬШЕ НЕ ИСПОЛЬЗУЕТСЯ (2026-08-10)** — GitHub перешёл на single `input[inputmode="numeric"]`. Использовать 3 стратегии: S1 `launch_code[]` (legacy) → S2 `input[inputmode="numeric"]` (текущий) → S3 brute force. Ждать до 10с появления input'ов. См. `references/otp-and-provisioning.md`. 13. **Post-OTP URL detection** — проверять **путь** (`urlparse(url).path`), а не query params. `return_to=dashboard` в query params — это `/login`, а не `/dashboard`. См. `references/otp-and-provisioning.md`. 14. **Python 3.14 isolated mode** — hermes venv загрязняет `sys.path`. Использовать `python -I` для изоляции. Плюс `sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')` для Windows. 15. **`page.url` — live property, не кешируется** — Playwright/Camoufox `page.url` переоценивается при каждом обращении. Между `log(page.url)` и `if "verif" in page.url` страница может уйти на другой URL. **Fix:** читать один раз в локальную переменную. 16. **Navigation race condition** — после клика на submit страница может оставаться на `/signup` 30+ сек через медленный прокси. `while "signup" in page.url` с таймаутом — ненадёжен (URL живой, может измениться между проверками). **Fix:** `page.wait_for_selector('input[name="launch_code[]"]', timeout=90000)` вместо URL-поллинга. 17. **Post-OTP "accepted" без сессии** — GitHub может редиректить на `/` или `/dashboard` после OTP, но аккаунт требует пост-регистрационный логин. **Fix:** после "accepted" → перейти на `/settings/profile`. Если редирект на `/login` → сделать логин (email + password). 18. **Rate limit держится часами** — secondary rate limit на GitHub может длиться 1+ час. 15-минутное ожидание недостаточно. Поля формы не заполняются (все `querySelector` возвращают null), страница `/signup` возвращается без редиректа. Ротировать IP агрессивно, не ждать на одном IP. 19. **bpproxy residential pool — ВСЕ прокси мертвы (2026-08-10)** — 10/10 прокси в `bpproxy_hardsession_pool.txt` не отвечают (curl: пустой ответ, Camoufox: NS_ERROR_PROXY_CONNECTION_REFUSED). Прокси не залимичены — они физически недоступны. Нужны свежие прокси от другого провайдера. 20. **Camoufox `geoip=True`** — при использовании прокси Camoufox выдаёт `LeakWarning`. Добавлять `geoip=True` в launch_opts. 21. **PYTHONPATH изоляция Python 3.11** — hermes-venv добавляет свои site-packages в `PYTHONPATH`, из-за чего `py -3.11` пытается импортировать playwright из заблокированного herm-венва (PermissionError). **Fix:** `PYTHONPATH= py -3.11 main.py` — очищает PYTHONPATH перед запуском. 22. **Path-based URL matching needs BOTH path AND full URL** — `urlparse(url).path` alone misses the verification page URL `/login?return_to=...account_verifications` (path = `/login`). Check BOTH `path` AND `url_lower` for `account_verif`/`launch`. The verification page is at `/login?return_to=...account_verifications`, NOT at `/account_verifications` directly. See `references/otp-and-provisioning.md`. 23. **`still_on_verify` time-limit** — in post-OTP loop, the `still_on_verify` check catches the same URL `/login?return_to=...account_verifications` indefinitely. Limit to first 10s of the 30s post-OTP window: `if still_on_verify and time.time() < deadline - 20`. After 10s, evaluate other signals (has_session, login page, code error). 24. **HTTP provisioning shares rate limit** — `provision.py` (requests) hits the SAME rate limit as the browser on the local IP. Login to fresh accounts via HTTP returns "login failed: rate". Use the same proxy as registration, or extract browser cookies and inject into `requests.Session`, or do 2FA+PAT through the browser (CDP) instead of HTTP. 25. **Проверка alive прокси перед использованием** — `_active_proxy_from_db()` выбирает прокси с максимальным `success_count`, но не проверяет актуальную доступность. Все прокси в пуле могут быть мертвы (bpproxy 2026-08-10). **Fix:** `curl -sI --max-time 10 -x https://github.com` перед каждым использованием. 26. **Accounts created without octocaptcha are silently locked** — CDP form submission without `octocaptcha-token` creates the account (OTP email arrives), but GitHub flags and locks it immediately. Login fails with "Incorrect username or password" even through real Chrome browser. The `octocaptcha-token` field is `required` on the signup form — without it, the account is born-dead. Honeypot fields (`required_field_*`) must be left empty. **Fix:** solve octocaptcha before form submission, or use a pre-warmed profile that bypasses the captcha entirely. Verified 2026-08-10: manual browser login with just-created credentials also fails. 27. **CDP `requestSubmit()` vs `submit()`** — `form.submit()` bypasses JavaScript event handlers (including octocaptcha validation). Use `form.requestSubmit ? form.requestSubmit() : form.submit()` to trigger proper HTML5 form validation and event handlers. 28. **CDP debug pattern** — Dump page fields and body text via `Runtime.evaluate` to diagnose form issues. JS snippet: `JSON.stringify({title: document.title, url: window.location.href, fields: Array.from(document.querySelectorAll('input')).map(el => el.id + '|' + (el.name||'') + '|' + (el.type||'') + '|' + (el.getAttribute('inputmode')||'')), body: document.body ? document.body.innerText.substring(0, 300) : ''})`. Log before and after each form submission. 29. **CDP `Runtime.evaluate` with `awaitPromise: true`** — Without `awaitPromise: true`, `Runtime.evaluate` returns immediately without waiting for the expression to complete. Always use `awaitPromise: true` for async operations and form submissions. The CDP message format: `{"id": N, "method": "Runtime.evaluate", "params": {"expression": code, "returnByValue": true, "awaitPromise": true}}`. ## Результаты - **2026-07-27**: `nova9417` через mail.tm + persistent profile ✅ - **2026-07-27**: `0402294270-0001-2943` через t-online.de + persistent profile ✅ - **2026-07-27**: 3-strategy code fill (digit boxes / single input / keyboard) ✅ - **2026-07-09**: v6 скрипт работал, но требовал IMAP email (не mail.tm) - **2026-08-10**: CDP подход через системный Chrome 151 работает, Playwright Chromium крашится - **2026-08-10**: OTP через `launch_code[]` боксы (8 шт.) — больше не используются GitHub. Текущий подход: `input[inputmode="numeric"]` (стратегия S2) - **2026-08-10**: Post-OTP `still_on_verify` с time-limit 10s — необходим, иначе проверка ловит `/login?return_to=...account_verifications` бесконечно - **2026-08-10**: Path + full URL matching — path-only (pitfall #22) не видит `account_verif` в query string. Нужна проверка обоих - **2026-08-10**: bpproxy.at residential pool — все 10 прокси физически мертвы (curl: пустой ответ). Нужны новые прокси - **2026-08-10**: `PYTHONPATH=` фикс для Python 3.11 — без него hermes-venv вызывает PermissionError на playwright - **2026-08-10**: mail.tm домены (`emalupe.com`) блокируются GitHub — OTP accepted, но аккаунт не создаётся (404). Нужен t-online.de IMAP - **2026-08-12**: ZTE proxy + Camoufox + .de IMAP — 4 аккаунта зарегистрировано (2FA+токен+прогрев) за один запуск. DataDome `t=bv` на 5-м — IP забанен. 2Captcha zero balance. ZTE DISCONNECT/CONNECT возвращает failure. - **2026-08-12**: Task API формат: все параметры в `config` dict. `executor_type` default = `protocol` (не `headed`). `use_proxy: "0"` в `extra` отключает bpproxy-пул. `proxy` на верхнем уровне config задаёт прокси браузера. - **2026-08-12**: IMAP pool `allow_reuse=false` — 17,872 email'ов, 89 использовано, 17,597 доступно. ~30% email'ов уже заняты на GitHub (из предыдущих сессий). Авто-ротация находит свежий за 1-2 попытки. ## CDP подход (альтернатива Playwright) Когда Playwright Chromium крашится на Windows, использовать системный Chrome через CDP: ```bash chrome.exe --remote-debugging-port=9222 --user-data-dir=.../chrome_profile ``` Управление через websocket + `Runtime.evaluate`. См. `references/cdp-approach.md`. ## Post-регистрационное provisioning После регистрации — 2FA и PAT через `provision.py` (из `авторег проект/backend/platforms/github/provision.py`): - `enable_2fa(email, password)` → `{totp_secret, recovery_codes}` — чистый HTTP, без браузера - `generate_token(email, password, totp_secret, scopes)` → `ghp_...` — classic PAT См. `references/otp-and-provisioning.md`. ## Camoufox (альтернативный backend) `авторег проект/backend/platforms/github/browser_register.py` — полноценный Camoufox-based регистратор с: - DataDome обходом (два слоя) - SOCKS5 прокси - Авто-логином после регистрации - Извлечением сессии Установлен: `camoufox==0.4.11`, `cloverlabs-camoufox==0.6.0`. 30. **IMAP pool exhausted — #1 failure mode в ENI AUTOREG v3.0 (2026-08-11)** — Дашборд показывает `FAIL: IMAP pool exhausted — add accounts or enable reuse` для каждой попытки регистрации. Пул `data/working_mails_live.txt` пуст или все почты израсходованы. **Fix:** (a) пополнить файл свежими t-online.de почтами, (b) переключить дефолтный mailbox на NotLetters API или mail.tm API (не требуют IMAP-пула), (c) включить `reuse` режим в настройках IMAP-провайдера. Проверить состояние пула: `wc -l backend/data/working_mails_live.txt`. Логи дашборда (Tasks → клик по задаче → LIVE LOGS) показывают ошибку мгновенно — задача не тратит прокси, fail fast. 31. **ZTE proxy IP бан после 3-4 регистраций (2026-08-12)** — DataDome детектит `t=bv` (banned). Без работающего DataDome-солвера аккаунт фейлится. **Fix:** ротировать IP ZTE-модема каждые 3 регистрации. DISCONNECT/CONNECT через goform ненадёжен — физическая перезагрузка модема надёжнее. 32. **`allow_reuse=true` отдаёт уже занятые GitHub email'ы (2026-08-12)** — IMAP-пул не знает, какие email'ы уже зарегистрированы на GitHub. При reuse pool выдаёт те же адреса → GitHub `email TAKEN` → задача тратит время на ротацию. **Fix:** `allow_reuse=false` для чистых регистраций. `allow_reuse=true` только для тестов. 33. **2Captcha zero balance — DataDome unsolvable (2026-08-12)** — 2Captcha — единственный DataDome-солвер для Firefox/Camoufox. При нулевом балансе капча не решается → задача фейлится. **Fix:** пополнить 2Captcha ($3-5 минимум). CapSolver не подходит для Camoufox (требует Chrome UA). 34. **Task API: `executor_type` default = `protocol`, не `headed` (2026-08-12)** — `task_runtime.py` line 203: `executor_type = payload.get("executor_type", "protocol")`. Без явного указания `executor_type: "headed"` в config задача запускается в HTTP-режиме, не в браузере. Лог: `Task started: github x5 [protocol]` вместо `[headed]`. 35. **Recovery codes не сохраняются в `github_accounts_2fa.txt` (2026-08-12)** — ENI AUTOREG v3.0: `provision.py` → `enable_2fa()` вызывает `persist_pending` только для сохранения в БД (таблица `account_credentials`), но **не дописывает строку в `data/github_accounts_2fa.txt`**. Файл содержит только старые аккаунты (16 записей на 2026-08-12). **Fix:** добавить дописывание строки в файл после успешного `enable_2fa` в формате `email:password:[REDACTED] Recovery codes = 12 слов/16 hex-кодов, лежат в поле `recovery_codes` ответа от `enable_2fa`. 36. **DataDome wall taxonomy — classify before acting (2026-10-12)** — четыре разные стены: slider (`div.sliderContainer`, решается drag), robot wall (`captcha__robot` в iframe — нерешаема, fail fast + disable сессии), JS-challenge wall (пустая страница «Please enable JS and disable any ad blocker» — переживает reload'ы, disable сессии), SSL-broken proxy (Firefox рендерит «SSL received a record that exceeded…» КАК СТРАНИЦУ — прокси мёртв, не reload). Маркеры проверять и внутри iframe, не только main page. Полная таблица + селекторы: `references/datadome-slider-stall-debug-bank-audit.md`. 37. **Residential sticky-пул: disable ТОЛЬКО по exact URL (2026-10-12)** — все sticky-сессии делят один host:port (различается только `sess` в username); disable по host:port комментирует ВЕСЬ пул → runner падает на direct IP → secondary rate limit. Точный URL + ambiguity guard в ротаторе (отказ при >1 совпадении). Residential-латентность ломает тайминги: verify-редирект 10-30с, auto-login cookie ждать 75с (не 30с — иначе акки сохраняются verified-only без repo/2FA/PAT). 38. **Patient verify-wait после launch-кода (2026-10-12)** — проверка «verify stable» за ~4с ЛОЖНО объявляет хороший код rejected на медленном residential. Ждать до 90с; «rejected» только при явном error-баннере (incorrect/invalid code/wrong code/try again) или полном таймауте; на середине один раз перепечатать код (auto-submit может пропустить событие 8-го бокса). 39. **Параллельные батчи = дизъюнктные пулы (2026-10-12)** — раннер читает config ОДИН раз на старте и поддерживает `--config `; второй батч = `config_b.json` + `proxies_b.txt` с непересекающимся диапазоном сессий → разные exit IP, ноль коллизий. Два батча с одного пула могут взять одну сессию одновременно → кросс-флаг аккаунтов. 40. **Цена рестарта батча (2026-10-12)** — kill в mid-flow теряет аккаунт безвозвратно: у упавших акков пароль НЕ сохраняется → backfill невозможен. Группировать фиксы и рестартовать один раз; перед kill сверять живой pid + CreationDate через CIM — heartbeat'ы уже убитых батчей продолжают приходить как stale-буферы (смотреть на таймстемпы в логе, не на номер процесса). ## ENI AUTOREG v3.0 Task API (прямой запуск без дашборда) Запуск через `POST /api/tasks` — **все параметры внутри `config`**: ```json { "platform": "github", "action": "register", "count": 5, "config": { "executor_type": "headed", "captcha_solver": "yescaptcha_api", "proxy": "http://127.0.0.1:8899", "extra": { "use_proxy": "0", "identity_provider": "mailbox" } } } ``` **Критично:** `config` — dict с ВСЕМИ runtime-параметрами. `executor_type`, `captcha_solver`, `proxy` — на верхнем уровне config. `use_proxy` — внутри `extra`. `proxy` задаёт прокси для браузера; `use_proxy: "0"` в extra отключает bpproxy-пул. Значения по умолчанию в `task_runtime.py`: - `executor_type`: `"protocol"` (НЕ `"headed"`!) — всегда указывать явно - `captcha_solver`: `"auto"` - `_use_proxies`: `str(extra.get("use_proxy", "1"))` — `"1"` по умолчанию (bpproxy-пул активен) ## ZTE Proxy для GitHub ZTE-модем (192.168.0.1) → mobile proxy на `127.0.0.1:8899`. **Работает чисто** — DataDome не появляется на первых 2-3 регистрациях. После 3-4 рег IP банится (`t=bv`), нужна ротация. ### Ротация IP ZTE-модема Логин: `SHA256(SHA256(password).upper() + LD).upper()` → POST `goformId=LOGIN` (result=0). Ротация: `DISCONNECT_NETWORK` → ждать 10с → `CONNECT_NETWORK`. **Важно:** DISCONNECT/CONNECT часто возвращают `{"result":"failure"}` даже после успешного логина. Физическая перезагрузка модема надёжнее. ### DataDome solver chain (Camoufox) Camoufox = Firefox UA → **CapSolver отклоняет** (требует Chrome UA, `NotImplementedError`). **2Captcha** — единственный DataDome-солвер для Firefox UA. При `t=bv` солверы не нужны — нужна ротация IP. Порядок в `solve_datadome_with_fallback`: настроенные candidates → CapSolver → 2Captcha. YesCaptcha НЕ поддерживает DataDome. ### IMAP пул: reuse и занятые email'ы `allow_reuse: false` — предотвращает повторную выдачу email'ов, уже использованных этим экземпляром пула. **НО:** email'ы, зарегистрированные на GitHub в предыдущих сессиях, пул не знает. GitHub отвечает `email TAKEN` → авто-ротация до 5 раз. При 17,872 почт в пуле большинство свежих находится за 1-2 ротации. Управление: `PUT /api/providers/mailbox/imap_pool` → `config.imap_pool_allow_reuse: "true"/"false"`. ## ENI AUTOREG v3.0 Dashboard (основной интерфейс с 2026-08-11) Основной способ запуска GitHub-регистраций — дашборд ENI AUTOREG v3.0, а не standalone-скрипты из `gh-autoreg`. ### Пути - **Проект**: `C:\Users\User\Desktop\авторег проект\` - **Бэкенд**: `backend/main.py` — FastAPI на `http://127.0.0.1:8002` - **Фронтенд**: `frontend/` — Vite dev-server на `http://127.0.0.1:5173` - **База**: `backend/account_manager.db` — SQLite (299+ аккаунтов, 1038+ задач) - **IMAP-пул**: `backend/data/working_mails_live.txt` — t-online.de почты - **Платформы**: 32 платформы (GitHub: 215 аккаунтов, 728 задач) ### Запуск ```bash # Бэкенд (Python 3.11, чистая среда) cd "/c/Users/User/Desktop/авторег проект/backend" PYTHONPATH= py -3.11 main.py # Фронтенд cd "/c/Users/User/Desktop/авторег проект/frontend" npm run dev ``` Проверка: `curl http://127.0.0.1:8002/api/health` → `{"ok":true}`. ### Запуск регистрации через дашборд 1. Открыть `http://127.0.0.1:5173` 2. Platforms → GitHub → **Register Account** 3. Модалка: выбрать количество (1-100), executor (Headed/Headless), captcha solver (auto / yescaptcha_api), прокси (опционально) 4. Нажать **Register account** 5. Смотреть логи: Tasks → клик по задаче → LIVE LOGS (SSE-стрим) ### Провайдеры mailbox в дашборде | Провайдер | Тип | Статус | |-----------|-----|--------| | t-online.de IMAP Pool | IMAP (файл) | DEFAULT, enabled | | NotLetters API | REST API | Enabled | | NotLetters IMAP | IMAP (файл) | Enabled | | mail.tm | REST API | Enabled | | Temp-Mail Web | Web | Enabled | | reforrm.me catch-all | IMAP (Gmail) | Disabled | ## Связанные референсы - `references/datadome-slider-stall-debug-bank-audit.md` — DataDome wall taxonomy (slider/robot/JS-wall/SSL/mid-wizard interstitial) + живые DOM-селекторы слайдера, residential sticky-пул ops (exact-URL disable), patient verify-wait, параллельные батчи через --config, bank-аудит через PAT `/user`, backfill PAT через password-reset (IMAP TO-search + BODY.PEEK), debug_stall-артефакты - `references/camoufox-registration-patterns.md` — Camoufox регистрация: `_wait_form_valid` (octocaptcha), правильный клик (не social buttons), navigation wait, mail.tm API, post-OTP pitfalls - `references/zte-proxy-task-api.md` — ZTE прокси, Task API формат, DataDome solver chain, mailbox provider management - `references/octocaptcha-datadome.md` — анализ OctoCaptcha (второй слой DataDome), все failed подходы - `references/mailtm-utils.md` — утилиты mail.tm - `references/cdp-approach.md` — CDP подход (системный Chrome) вместо Playwright - `references/otp-and-provisioning.md` — OTP ввод через launch_code[], пост-регистрация (2FA + PAT) - `templates/socks5_bridge.py` — встроенный SOCKS5-мост для Playwright - `templates/reg.py` — шаблон регистрации через .de IMAP - `templates/reg_mailtm.py` — шаблон регистрации через mail.tm - Проект: `C:\\Users\\User\\gh-autoreg\\` (готовый к заливке на GitHub)