Files

8.9 KiB
Raw Permalink Blame History

hh resume booster

Бесплатное автоматическое «поднятие» резюме в поиске hh.ru — по расписанию, на Linux, Windows и macOS.

Как это работает

На hh любое сохранение резюме заново поднимает его в выдаче поиска — причём без 4-часового кулдауна, который есть у ручной кнопки «Поднять в поиске». Скрипт вносит невидимую правку в блок «О себе» (тумблерит один двойной пробел в середине текста — в вёрстке страницы он схлопывается, так что глазами он не виден и содержимое резюме не меняется) и сохраняет. Это бесплатный аналог платного сервиса «Автоподнятие».

Резюме на вашем аккаунте определяются автоматически. Планировщик ОС гоняет скрипт каждые 2 часа.

⚠️ Требование: у резюме должен быть непустой блок «О себе» (иначе прятать правку негде — такое резюме скрипт пропустит и напишет об этом в лог).

🔐 Безопасность — прочитайте

Файл session/storage.json — это ваши cookie-сессии hh, то есть полный доступ к аккаунту. Никогда не выкладывайте его в git и не пересылайте архив ПОСЛЕ логина. В поставке этого файла нет — вы создаёте его локально сам через login.py. .gitignore уже исключает session/, config.json и логи.

Автоматизация браузером — «серая зона» правил hh (ToS). Риск низкий (вы правите своё же резюме), но частить не стоит: 2 часа — норм, каждые 5 минут — палево.


1. Требования

  • Python 3.9+
  • Интернет и аккаунт соискателя на hh.ru
  • ~400 МБ на браузер Playwright (chromium)

Проверить питон: python3 --version (на Windows — python --version).


2. Установка (суть одна, команды под каждую ОС ниже)

Распакуйте архив, зайдите в папку hh-resume-booster, создайте виртуальное окружение, поставьте зависимости и браузер.

🐧 Linux

cd hh-resume-booster
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
playwright install --with-deps chromium     # --with-deps ставит системные библиотеки (нужен sudo)

Если --with-deps ругается на права — выполните sudo $(which playwright) install-deps один раз, затем playwright install chromium.

🪟 Windows (PowerShell)

cd hh-resume-booster
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
playwright install chromium

Если PowerShell не даёт активировать окружение — запустите один раз: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.

🍎 macOS

cd hh-resume-booster
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
playwright install chromium

(Если нет питона: brew install python.)


3. Логин (создаём сессию)

python login.py           # Windows: python login.py  |  Linux/mac: python login.py

Откроется настоящий браузер. Войдите в hh.ru любым способом (почта/пароль, код из письма/смс, госуслуги). Скрипт сам поймает вход и сохранит session/storage.json, после чего окно можно закрыть. Появится ✅ Готово.

Сервер без экрана (headless Linux)? login.py требует графику. Запустите его на своём компьютере, затем скопируйте получившийся session/storage.json на сервер в такую же папку session/.


4. Пробный прогон вручную

python bump_resumes.py

Ожидаемый вывод — по строке на резюме, например:

[2026-08-24 20:08] 30ee2ebd…: about-added-ok | поднято✓ (next-manual=00:08)

next-manual=HH:MM = метка «Можно сегодня в …» на странице резюме; она равна времени_правки + 4ч и двигается при каждом прогоне — это и есть подтверждение, что резюме подняли. Всё пишется в bump.log.


5. Автозапуск каждые 2 часа

🍎 macOS — launchd

bash scheduler/install-mac.sh
  • Статус: launchctl list | grep hhbump
  • Остановить: launchctl bootout gui/$(id -u)/com.stackops.hhbump

🐧 Linux — systemd (user timer)

bash scheduler/install-linux.sh
  • Статус: systemctl --user list-timers | grep hhbump
  • Разовый прогон: systemctl --user start hhbump.service
  • Остановить: systemctl --user disable --now hhbump.timer
Нет systemd? Вариант через cron
crontab -e
# добавить строку (замените /ПОЛНЫЙ/ПУТЬ):
0 */2 * * * /ПОЛНЫЙ/ПУТЬ/hh-resume-booster/scheduler/run.sh >> /ПОЛНЫЙ/ПУТЬ/hh-resume-booster/bump.cron.log 2>&1

(сделайте chmod +x scheduler/run.sh)

🪟 Windows — Планировщик заданий

В PowerShell из папки пакета:

powershell -ExecutionPolicy Bypass -File .\scheduler\install-windows.ps1
  • Статус: schtasks /Query /TN hhbump
  • Разовый прогон: schtasks /Run /TN hhbump
  • Удалить: schtasks /Delete /TN hhbump /F

6. Настройка (необязательно)

Скопируйте config.example.jsonconfig.json:

{
  "resume_ids": ["30ee2ebd...", "fb175217..."],
  "headless": true
}
  • resume_ids — если хотите поднимать только конкретные резюме (иначе — все на аккаунте). RID виден в URL резюме: hh.ru/resume/ЭТОТ_ID.
  • headless: false — показывать браузер во время прогона (для отладки).

Сменить частоту: поменяйте StartInterval (секунды) в plist / OnUnitActiveSec в hhbump.timer / интервал в задаче Windows и переустановите соответствующим install-* скриптом.


7. Диагностика

Симптом в bump.log Что делать
STOP: нет session/storage.json запустите python login.py
STOP: сессия мертва (hhrole=...) сессия протухла (живёт ~30 дней) → python login.py заново
empty-about-skip добавьте текст в блок «О себе» этого резюме
no-about-field / ERR hh поменяли вёрстку или таймаут — проверьте вручную

Важно: прогон случается, только когда компьютер не спит. launchd/systemd схлопывают пропуски в один прогон при пробуждении (свежак к утру — это ок). Нужен режим 24/7 без пропусков — держите машину бодрой или поставьте на VPS.


Состав пакета

hh-resume-booster/
├── bump_resumes.py         # сам бустер (автоопределение резюме)
├── login.py                # логин в hh -> session/storage.json
├── requirements.txt
├── config.example.json
├── README.md
├── session/                # сюда ляжет storage.json (в архиве пусто)
└── scheduler/
    ├── run.sh / run.bat            # обёртки для планировщиков
    ├── install-mac.sh              # launchd
    ├── install-linux.sh            # systemd user-timer
    ├── install-windows.ps1         # Task Scheduler
    ├── com.stackops.hhbump.plist   # шаблон launchd
    ├── hhbump.service / .timer     # шаблоны systemd