hh resume booster: free auto-bump for hh.ru (Playwright, Linux/Win/Mac)

This commit is contained in:
stackops
2026-08-24 20:34:25 +03:00
commit 5e2a1514c5
15 changed files with 468 additions and 0 deletions
+207
View File
@@ -0,0 +1,207 @@
# 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`
<details><summary>Нет systemd? Вариант через cron</summary>
```bash
crontab -e
# добавить строку (замените /ПОЛНЫЙ/ПУТЬ):
0 */2 * * * /ПОЛНЫЙ/ПУТЬ/hh-resume-booster/scheduler/run.sh >> /ПОЛНЫЙ/ПУТЬ/hh-resume-booster/bump.cron.log 2>&1
```
(сделайте `chmod +x scheduler/run.sh`)
</details>
### 🪟 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
```