🔧 Потрібен програміст (Node.js) — ремонт існуючої Chrome CDP програми
Є готова Windows-програма, яка місяцями працювала, але раптово зламалась без змін коду.
Що робить програма:
Послідовно відкриває реальні Chrome-профілі, заходить на threeplus.three.co.uk, натискає Get Reward → My Codes, зчитує 1 код і зберігає його в CSV. Працює one-by-one, без паралельних запусків.
Проблема:
Після першого профілю Chrome не закривається фізично, chrome.exe лишається, і наступний запуск падає з:
Protocol error (Target.setAutoAttach): Target closed
Вже перевірено (це НЕ причина):
JSON / конфіг / кількість профілів
maxProcessCount
rewards_url / логіка сайту
антивірус / Defender
Chrome path / сумісність chrome.exe
тимчасовий чистий профіль працює
програма працювала вчора без змін
Завдання:
Виправити коректний shutdown Chrome / CDP, без переписування програми.
❌ Selenium / headless / proxy
✅ Реальний Chrome, CDP, існуючі профілі
💸 Розраховую на недорогу реалізацію
(у тому числі — бо сайт змінюється кілька разів на місяць — я регулярно звертатимусь до вас з оплатою для дрібних правок).
Нижче частина оригінального замовлення, коли я замовляв програму.
🎯 Мета
Створити десктопну програму (на Python або Node.js), яка автоматично відкриває реальні Chrome-профілі, заходить у 20 облікових записів Three+, натискає Get Reward, переходить у My Codes, витягує код у вигляді TH3DC\d{9,} та додає його у відповідний рядок CSV.
⚙️ Функціональність
Запускається вручну на Windows (без автозапуску або служб).
Працює через реальний Chrome із локальними профілями (user-data-dir + profile-directory).
Не використовує headless-режим, Selenium, HTTP-запити або проксі.
Імітує людські дії: запуск браузера, натискання, переходи, паузи.
Обробляє до 20 акаунтів за запуск (вказується в конфігу).
Пропускає акаунти, де вже є код у CSV.
🔄 Алгоритм роботи
Крок 1: Завантаження конфігурації
Зчитує settings.json (chrome path, список профілів, CSV шлях, затримки).
Зчитує CSV, визначає акаунти без коду.
Крок 2: Обробка кожного профілю
Запускає Chrome із вказаним профілем:
iniCopyEdit--user-data-dir=<user_data_dir>
--profile-directory=<profile_dir>
--remote-debugging-port=9222
Підключається через CDP (Playwright або Puppeteer).
Відкриває rewards_url.
Чекає повного завантаження сторінки.
Натискає кнопку Get Reward (дійсним кліком, не .click()): дійсний клік (через Playwright/Puppeteer з mouse.move + mouse.down + mouse.up, без .click()).
Чекає 3–5 секунд.
Крок 3: Зчитування коду з My Codes
Переходить на сторінку https://threeplus.three.co.uk/my-rewards
(або натискає Go to my codes, якщо вона зʼявилася після Get Reward).
Шукає останній код у форматі TH3DC\d{9,} у DOM (через innerText / textContent).
Зберігає у CSV у вигляді:
CopyEditProfile_01,TH3DC103897998490
Закриває браузер (але не виходить з акаунта).
Чекає випадкову затримку (20–40 секунд).
Повторює до 20 акаунтів.
🧠 Як саме зчитується код (чіткий алгоритм)
OCR, скриншот та модальні вікна не використовуються.
Код завжди зчитується зі сторінки My Codes - після натискання "Get Reward"
Вигляд коду: TH3DC103897998490 (шаблон: TH3DC\d{9,}).
Читання: через DOM (innerText, textContent, evaluate()).
⚙️ Конфігурація (settings.json)
jsonCopyEdit{
"chrome_path": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
"profiles": [
{
"user_data_dir": "C:\\Users\\User\\AppData\\Local\\Google\\Chrome\\User Data",
"profile_dir": "Profile 1"
}
// ...
],
"rewards_url": "https://threeplus.three.co.uk/rewards",
"csv_path": "C:\\path\\to\\accounts.csv",
"delay_range_seconds": [90, 240]
}
📄 Формат CSV
csvCopyEditaccount,code
profile_01,
profile_02,
🚫 Заборонено
| Дія | Причина |
|---|
| Selenium/WebDriver | Легко детектується, викликає SMS |
| Headless режим | Детектується сайтом |
| HTTP/API запити | Flutter Web, Canvas rendering |
| Багатопотокова обробка | Викликає підозру/блокування |
| Проксі або зміна IP | Викликає ре авторизацію |
| Затримки < 5 секунд | Нетипова поведінка |
📦 Очікувані файли на виході