name: hh-ru-apply-workflow description: >- Maps hh.ru automation in this repo: Playwright scripts, vacancies queue, dashboard, cover letter fill vs chat apply, selector files. Use when editing or running hh-ru-apply, debugging Playwright flows, or answering questions about npm scripts, data paths, and hh.ru response/chat automation.
hh-ru-apply — рабочий контур
Стек и запуск
- Node.js 18+, проект на ESM (
"type": "module"в package.json). - После
npm installпри необходимости:npx playwright install chromium. - Список команд — в
scriptsвнутри package.json; ниже — смысл.
Сценарии (npm run …)
| Команда | Назначение |
|---|---|
login | Сохранение сессии hh.ru в профиле Chromium. |
apply | Проверка, что сохранённая сессия жива. |
dashboard | Локальный UI: очередь вакансий, письма, запуск сценариев. |
scan-tg | Вакансии из Telegram (см. переменные в .env.example). |
vacancies | Открытие вакансий с hh по ключевым словам. |
harvest | Сбор/обогащение очереди (в т.ч. OpenRouter — см. .env.example). |
hh-fill-letter | Вставка сопроводительного в форму отклика на странице вакансии; отправку не нажимает — пользователь проверяет и жмёт сам. |
hh-apply-chat | Сценарий отклик + письмо в чат с работодателем (не textarea формы на карточке). |
codegen-hh | Playwright codegen против живого hh.ru — подбор селекторов. |
Типичные флаги отладки у скриптов с браузером: --stay-open (см. README.md).
Данные и конфиг
Источник путей: lib/paths.mjs.
| Путь / переменная | Назначение |
|---|---|
data/vacancies-queue.json | Очередь вакансий; у записи есть id для --id=…. |
data/skipped-vacancies.jsonl | Пропущенные вакансии. |
data/feedback.jsonl | Обратная связь. |
data/cover-letter-user-edits.jsonl | Правки писем пользователем. |
data/hh-apply-chat.log | Лог сценария «отклик в чате». |
HH_SESSION_DIR / data/session/chromium-profile | Профиль браузера (см. .env.example). |
config/preferences.json | Настройки приложения. |
CV/ | Материалы резюме для контекста. |
Секреты и ключи не дублировать в ответах; ориентир — .env.example и config/secrets.example.env / локальные файлы из доков.
Селекторы Playwright (где чинить поломки UI)
- Форма отклика (кнопка «Откликнуться», поле письма в модалке): lib/hh-response-selectors.mjs, скрипт scripts/hh-fill-response-letter.mjs.
- Отклик + чат: lib/hh-chat-selectors.mjs, скрипт scripts/hh-apply-chat-letter.mjs.
При смене вёрстки hh.ru: открыть нужную страницу вручную, npm run codegen-hh, обновить селекторы в этих lib-файлах (не размазывать по проекту). Дополнительно — паузы/джиттер: lib/hh-human-delay.mjs, лимиты: lib/hh-apply-rate.mjs.
Ограничения и ожидания
- Массовая автоматизация откликов может противоречить правилам hh.ru; проект рассчитан на умеренное использование и ручной контроль.
- Возможны капча и другие защиты — закладывать ручной вход и реалистичные паузы.
- Не отключать и не обходить human-delay / rate-limiting ради скорости, если пользователь явно не попросил.
hh-fill-letterпо задумке не отправляет отклик — это не баг.
Письма и стиль
Кратко: шаблон config/cover-letter.example.txt; личный файл (например config/cover-letter.txt) — в .gitignore по желанию. В дашборде после Утвердить письма попадают в очередь эталонов стиля для следующих генераций; опционально config/cover-letter-style-examples.txt (разделитель --- на отдельной строке). Подробности и переменные окружения для LLM — reference.md.