Files

395 lines
34 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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`
- Токен: `<input name="octocaptcha-token">`
**Прогретый 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 ставит `<input type="hidden" name="user_signup[country]" value="DE">` по 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 <proxy> 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<N>` в 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 <file>`; второй батч = `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)