Разработчик описал бот для откликов на hh, который сам ищет вакансии, пишет сопроводительные письма, отвечает на анкеты работодателей и поднимает резюме по расписанию. Для рынка, где кандидат всё чаще спорит не с рекрутером, а с фильтрами, лимитами и молчанием платформы, это почти бытовая автоматизация выживания.
Проектом поделился пользователь madnessbrains, сообщает Habr / Карьера. По его словам, бот закрывает часть функций платной подписки hh PRO: генерирует сопроводительные письма, отправляет отклики, разбирает отказы и нажимает поднятие резюме раз в четыре часа, если такая кнопка доступна. Автор сравнивает это с ценами hh PRO на 24 сентября 2026 года: 279 рублей в неделю, 799 рублей в месяц или 1499 рублей за три месяца.
Схема у проекта гибридная. Вакансии бот ищет через API hh там, где он доступен, и через обычную выдачу сайта, потому что API, по словам автора, отдаёт не всё. Отклики через официальный API сторонним приложениям закрыты: запрос на создание переговоров возвращает запрет, а доступ к собственным резюме тоже ограничен. Обход через ключи Android-приложения автор сознательно не использовал: технически это встречается в похожих утилитах, но риск бана получает пользовательский аккаунт.
Отправкой занимается Selenium с уже авторизованным профилем Chrome. Один раз пользователь входит вручную, дальше бот открывает страницы, пишет письмо, заполняет ответы на вопросы работодателя и сохраняет историю в SQLite. Вариант с несколькими аккаунтами тоже предусмотрен: у каждого своя сессия и своя база. Для серверного запуска автор использует Docker и noVNC, чтобы можно было авторизоваться в браузере даже без локального рабочего стола.
Заявленная производительность упирается не в код, а в лимиты hh. Автор приводит замер: 63 отклика за 18 минут, примерно 17 секунд на вакансию. Теоретические 200 откликов в день занимают около часа, дальше мешает дневной лимит платформы. Самые медленные этапы — ожидание интерфейса hh, работа React-компонентов и посимвольный ввод сопроводительного письма. Вставка текста через JavaScript оказалась быстрее, но ненадёжной: форма визуально заполнялась, а отклик мог уходить без письма.
Самая полезная часть истории — не про ИИ, а про то, как автоматизация врёт владельцу. В ранней версии бот писал в лог «успешно» сразу после клика. Потом выяснилось, что кнопка «Напомнить об отклике» не сработала, навыки в резюме не добавились, а поднятие резюме засчитывалось только в воображении скрипта. Причина банальная и неприятная: интерфейс hh на React не всегда реагировал на прямой JavaScript-клик. Надёжным оказался клик через ActionChains, то есть имитация более человеческого движения мыши.
После этого автор поменял правило: не верить клику, пока страница не подтвердила изменение. Если бот нажал кнопку поднятия резюме, он должен увидеть, что hh убрал кнопку и показал время следующего поднятия. Если добавил навык, нужно перечитать форму и проверить новый список. Если изменений нет, это предупреждение, а не зелёный статус в журнале. Для разработчиков это знакомая боль: автотест, парсер или бот ценны не тогда, когда они уверенно кликают, а когда умеют доказать, что действие реально произошло.
Вторая группа ошибок пришла из сравнения строк. Оператор вида «одно содержится в другом» ломал ответы в анкетах: «готов» находился внутри «не готов», короткое «да» — внутри слов вроде «данные», а «Go» мог совпасть с фрагментом в «Google Cloud» или даже в русском слове с похожей последовательностью букв. В результате бот рисковал отправить работодателю противоположный ответ, поставить лишнюю галочку или неверно подтвердить навык.
С навыками всплыл ещё один практичный нюанс. У hh есть лимит в 30 навыков, и если форма превышает его, сохранение может откатиться к последнему рабочему состоянию. Ранний бот пытался добавить новые позиции, не учитывая, что часть навыков уже есть в резюме, но записана иначе: через аббревиатуру, другой язык или другой пробел. Теперь сравнение идёт после нормализации, а свободные места считаются по живой форме. Если места нет, бот не удаляет чужие навыки сам, а просит пользователя освободить слот вручную.
ИИ в проекте используется как прикладной слой, а не как магическая кнопка. Сопроводительные письма и ответы на анкеты могут писать бесплатные Gemini и Groq, затем Claude или ChatGPT, если у пользователя есть доступ. Если модели недоступны, бот переходит на шаблоны. Ответы на чувствительные вопросы — например про оформление, полиграф или судимость — берутся только из настроек, а не придумываются моделью. Это важная граница: автоматизация поиска работы легко превращается в генератор юридически неприятных сюрпризов.
Для кандидатов такой бот для откликов выглядит соблазнительно: меньше ручной рутины, больше попыток попасть в воронку, понятная статистика отказов. Для рекрутеров и платформ это менее приятная картина. Если массовые отклики становятся дешёвыми, компании будут сильнее закручивать фильтры, добавлять анкеты, капчи, скрытые проверки и собственных ботов на входе. В итоге рынок труда рискует получить ещё один слой автоматизированного шума, где люди с обеих сторон всё позже доходят до нормального разговора.
Главный вопрос теперь не в том, можно ли автоматизировать поиск работы: можно, и довольно грубо, но эффективно. Вопрос в другом — где проходит граница между разумной экономией времени кандидата и гонкой скриптов, после которой честное резюме без бота будет выглядеть как письмо, отправленное на бумаге.