Files
hh_auto/README.md

8.5 KiB
Raw Permalink Blame History

Автоотклик на 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 из браузера:

  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)

.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)