8.9 KiB
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.json → config.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