# Автоотклик на hh.ru (полуавтоматический) Скрипт ищет вакансии на hh.ru по ключевым словам, генерирует персонализированный текст отклика через ИИ (на основе вашего резюме и описания вакансии), открывает страницу в браузере, подставляет текст и резюме. Отправка — в один клик («Отправить отклик»), либо с проверкой текста перед отправкой. ## Установка ```bash python3 -m venv .venv .venv/bin/pip install -r requirements.txt .venv/bin/playwright install chromium ``` Если скачивание браузера падает с 403 (регион), используйте зеркало: ```bash PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.npmmirror.com/binaries/playwright .venv/bin/playwright install chromium ``` ## Запуск веб-интерфейса (рекомендуется) ```bash .venv/bin/python webui.py ``` Откройте **http://localhost:18091** (порт меняется через `PORT`) — там можно: - регистрироваться и входить (открытая регистрация, отключается `ALLOW_REGISTRATION=0`) - создавать аккаунты (имя, регион, поисковые запросы, стиль) - загружать резюме файлом (**txt, md, docx, pdf**) - сохранять **ключ сессии hh.ru** (cookies из браузера) — нужен для поиска и списка резюме - выбирать **резюме на hh.ru** — оно автоматически подставляется в модалке отклика - искать вакансии и видеть их списком (название, компания, зарплата, опыт) - генерировать тексты откликов через ИИ (редактируются перед отправкой) - отправлять отклик в один клик: кнопка «Отправить отклик» в колонке действий — браузер открывает вакансию, вставляет текст, жмёт «Отправить» и закрывается (скриншот результата показывается в модалке) - открывать вакансию в браузере с уже вставленным текстом и выбранным резюме для ручной проверки перед отправкой - отмечать отправленные — они больше не предлагаются ### Регистрация При первом запуске откройте `/register` и создайте логин с паролем (минимум 6 символов) — вы сразу войдёте. Каждый пользователь работает со своими аккаунтами и лимитом генераций. Открытая регистрация отключается `ALLOW_REGISTRATION=0` (пользователей тогда создаёт администратор через `manage_users.py`). ### Ключ сессии hh.ru Чтобы скрипт мог искать вакансии и видеть ваши резюме, нужны cookies из браузера: 1. Войдите на hh.ru в браузере 2. Откройте DevTools (F12) → вкладка **Application/Хранилище** → **Cookies** → `https://hh.ru` 3. Скопируйте **все** cookies (главные: `hhtoken`, `hhuid`, `hhrole`, `_xsrf` — старых `hh_sess`/`_hh_` больше нет) 4. Вставьте в поле «Ключ сессии hh.ru» в настройках аккаунта и нажмите «Сохранить ключ» После этого нажмите «Обновить список» рядом с «Резюме на hh.ru» и выберите резюме, которое должно подставляться при отклике. Ключ хранится в `accounts/<имя>/session.txt` (в git не попадает). ## Запуск из терминала (CLI) ```bash .venv/bin/python hh_respond.py --login my_account # войти в аккаунт (один раз) .venv/bin/python hh_respond.py --account my_account # обработать аккаунт .venv/bin/python hh_respond.py --limit 5 # максимум 5 откликов .venv/bin/python hh_respond.py --dry-run # без браузера, только текст ``` ## Настройка аккаунта Каждая папка в `accounts/` — отдельный аккаунт со своей сессией: ``` accounts/ └── my_account/ ├── config.json # запросы, регион, стиль, выбранное резюме ├── resume.txt # текст вашего резюме (для ИИ) ├── session.txt # ключ сессии hh.ru (cookies, не коммитить) ├── profile/ # сессия браузера (создаётся автоматически) └── progress.json # уже отправленные отклики (автоматически) ``` В веб-интерфейсе всё это создаётся и редактируется без ручной работы с файлами. ## Поисковые запросы Поддерживаются операторы hh.ru: | Запрос | Что найдёт | |---|---| | `Python разработчик` | Всё, где упоминается запрос | | `NAME:Python разработчик` | Только по названию вакансии | | `NAME:Python AND NOT NAME:senior` | По названию, исключая сеньоров | ## Как это работает 1. Скрипт парсит страницу поиска hh.ru по вашим запросам 2. Для каждой новой вакансии получает описание 3. ИИ генерирует текст отклика (вакансия + ваше резюме + стиль) 4. **Один клик**: кнопка «Отправить отклик» — браузер открывает вакансию, жмёт «Откликнуться», вставляет текст, выбирает резюме, жмёт «Отправить» и автоматически закрывается (скриншот результата — в модалке) 5. **С проверкой**: «Открыть в браузере» — вы проверяете текст и отправляете сами, либо жмёте «Отправить отклик» в модалке скриншота 6. Отправленные вакансии отмечаются и больше не предлагаются ## Переменные окружения (.env) | Переменная | По умолчанию | Описание | |---|---|---| | `LLM_API_KEY` | — | Ключ API для генерации текстов откликов | | `SESSION_SECRET` | `dev-secret-change-me` | Секрет сессий Flask (обязательно сменить) | | `PORT` | `18091` | Порт веб-интерфейса | | `HOST` | `127.0.0.1` | Адрес прослушивания | | `ALLOW_REGISTRATION` | `1` | Открытая регистрация (`0` — выключить) | | `REGISTER_LLM_LIMIT` | `50` | Лимит генераций для новых пользователей | | `HH_HEADLESS` | `0` | `1` — браузер без окна (для сервера без дисплея) | | `PROXY_URL` | — | Прокси для браузера: `http://LOGIN:PASS@HOST:PORT` | ## Важно - Отправка в один клик автоматически жмёт «Отправить» — используйте с осторожностью и не чаще, чем позволяет hh.ru (паузы между страницами уже стоят) - Не запускайте поиск слишком часто — между страницами есть паузы - Если hh.ru покажет капчу — скрипт остановится, решите капчу вручную и запустите снова - `.env` содержит API-ключ — не коммитьте его в git (уже добавлен в `.gitignore`)