Files
hh-resume-booster/README.md
T

208 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```