# 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 ```bash 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) ```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 ```bash cd hh-resume-booster python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt playwright install chromium ``` (Если нет питона: `brew install python`.) --- ## 3. Логин (создаём сессию) ```bash 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. Пробный прогон вручную ```bash 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 bash scheduler/install-mac.sh ``` - Статус: `launchctl list | grep hhbump` - Остановить: `launchctl bootout gui/$(id -u)/com.stackops.hhbump` ### 🐧 Linux — systemd (user timer) ```bash bash scheduler/install-linux.sh ``` - Статус: `systemctl --user list-timers | grep hhbump` - Разовый прогон: `systemctl --user start hhbump.service` - Остановить: `systemctl --user disable --now hhbump.timer`
Нет systemd? Вариант через cron ```bash 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 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`: ```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 ```