8.5 KiB
Автоотклик на hh.ru (полуавтоматический)
Скрипт ищет вакансии на hh.ru по ключевым словам, генерирует персонализированный текст отклика через ИИ (на основе вашего резюме и описания вакансии), открывает страницу в браузере, подставляет текст и резюме. Отправка — в один клик («Отправить отклик»), либо с проверкой текста перед отправкой.
Установка
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/playwright install chromium
Если скачивание браузера падает с 403 (регион), используйте зеркало:
PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.npmmirror.com/binaries/playwright .venv/bin/playwright install chromium
Запуск веб-интерфейса (рекомендуется)
.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 из браузера:
- Войдите на hh.ru в браузере
- Откройте DevTools (F12) → вкладка Application/Хранилище → Cookies →
https://hh.ru - Скопируйте все cookies (главные:
hhtoken,hhuid,hhrole,_xsrf— старыхhh_sess/_hh_больше нет) - Вставьте в поле «Ключ сессии hh.ru» в настройках аккаунта и нажмите «Сохранить ключ»
После этого нажмите «Обновить список» рядом с «Резюме на hh.ru» и выберите резюме,
которое должно подставляться при отклике. Ключ хранится в accounts/<имя>/session.txt
(в git не попадает).
Запуск из терминала (CLI)
.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 |
По названию, исключая сеньоров |
Как это работает
- Скрипт парсит страницу поиска hh.ru по вашим запросам
- Для каждой новой вакансии получает описание
- ИИ генерирует текст отклика (вакансия + ваше резюме + стиль)
- Один клик: кнопка «Отправить отклик» — браузер открывает вакансию, жмёт «Откликнуться», вставляет текст, выбирает резюме, жмёт «Отправить» и автоматически закрывается (скриншот результата — в модалке)
- С проверкой: «Открыть в браузере» — вы проверяете текст и отправляете сами, либо жмёте «Отправить отклик» в модалке скриншота
- Отправленные вакансии отмечаются и больше не предлагаются
Переменные окружения (.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)