🔧 Нужен программист (Node.js) — ремонт существующей Chrome CDP программы
Есть готовая Windows-программа, которая месяцами работала, но внезапно сломалась без изменений кода.
Что делает программа:
Последовательно открывает реальные Chrome-профили, заходит на threeplus.three.co.uk, нажимает Get Reward → My Codes, считывает 1 код и сохраняет его в CSV. Работает по одному, без параллельных запусков.
Проблема:
После первого профиля Chrome не закрывается физически, chrome.exe остается, и следующий запуск падает с:
Protocol error (Target.setAutoAttach): Target closed
Уже проверено (это НЕ причина):
JSON / конфиг / количество профилей
maxProcessCount
rewards_url / логика сайта
антивирус / Defender
Chrome path / совместимость chrome.exe
временный чистый профиль работает
программа работала вчера без изменений
Задача:
Исправить корректное завершение 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 секунд | Нетипичное поведение |
📦 Ожидаемые файлы на выходе