
Эта статья по сути является продолжением моей прошлогодней статьи, в которой я автоматизировал отклики на hh.ru. Кстати, если кому это интересн, тот проект до сих пор живой, недавно проверял :-)
В этой статье я расскажу о том, как я сделал тоже самое, но для LinkedIn, и как тоже самое можете сделать вы, потратив на это примерно полчаса своего времени и 0 рублей (при соблюдении определенных условий, разумеется).
Итак, недавно у меня появилась желание поискать работу на зарубежном рынке, ведь перспектива валютной удаленки выглядит весьма заманчивой (хоть и достаточно смутной в свете последних сокращений в зарубежном IT). В качестве первого ресурса для поиска работы был выбран сайт LinkedIn, а в качестве приложения для автоматизации этого поиска - проект AiHawk, который и вдохновил меня в прошлом году на создание аналогичного приложения для hh.ru. Но вот незадача - проект уже почти год как неактивен а последняя найденная версия не работоспособна. Поэтому было решено переписать данный проект, чтобы он снова мог работать.
Итак, что оно умеет?
искать вакансии на LinkedIn в соответствии с заданными настройками поиска, и определять, какие из них могут заинтересовать пользователя исходя из его резюме и настроек поиска, все найденные интересные вакансии сохраняются в файл, в котором они отсортированы по степени убывания их «интересности»
выделять из текста вакансии навыки, наличие которых подразумевается у кандидата на эту вакансию; все навыки также сохраняются в файл статистики, в котором они сортируются по убыванию частоты их появления в вакансиях
собственно откликаться на вакансии, отвечать на вопросы, формировать резюме и сопроводительные письма, заточенные под определенную вакансию
-
при этом в настройках есть режим, который позволяет делать все вышеперечисленное в фоне, а также режим автозапуска, который позволяет запускать процесс поиска вакансий раз в сутки
Поэтому это приложение подойдет вам, если вы:
пока не готовы искать работу, но хотите знать, какие навыки наиболее востребованы по интересующей вас специальности
ищете работу в пассивном режиме, т.е. готовы рассматривать вакансии и откликаться на интересные, но при этом никуда не торопитесь и не хотите тратить на этот процесс ни минуты своего времени
ищете работу в пассивном режиме, готовы доверить поиск работы нейронке, но откликаться хотите самостоятельно
отчаянный ковбой, которому нужно срочно найти работу на LinkedIn, любой ценой, но бесплатно
Предупреждение
LinkedIn не одобряет использование ботов, по крайней мере в тексте его соглашения об использовании есть такой пункт:
You agree that you will not:
...
Use bots or other unauthorized automated methods to access the Services, add or download contacts, send or redirect messages, create, comment on, like, share, or re-share posts, or otherwise drive inauthentic engagement;
Но есть и смягчающие обстоятельства:
данный бот не занимается всякой жестью вроде мультиаккаунтных рассылок, лайков и прочего спама
данный бот не предназначен для коммерческого использования
в бот встроена имитация человеческого поведения вроде случайных задержек, скроллов и прочего
В общем за два месяца активной разработки и несколько сотен откликов с использованием бота не было ни одного предупреждения, я уже не говорю о банах или других санкциях. Так что можно сказать, что бот находится в серой зоне: в теории могут возникнуть вопросы со стороны LinkedIn, но на даже если и возникнут, на первый раз скорее всего ограничатся предупреждением. В общем, на свой страх и риск, все как всегда.
Еще раз об этической стороне вопроса
С рисками разобрались, теперь поговорим об этической стороне вопроса. Как и в случае с приложением для hh.ru, данное приложение для LinkedIn я считаю абсолютно этичным, так как:
компании сами используют LLM для поиска и отбора кандидатов, поэтому значительная часть откликов даже не доходит до HR, будучи отсеянными автоматическими фильтрами
найти работу в IT со временем легче не становится, помощники, упрощающие эту задачу, тут не повредят
есть режим поиска работы без автооткликов
спамить откликами в любом случае не выйдет, так как LinkedIn ограничивает количество быстрых откликов цифрой 50 в день
есть мнение, что можно потратить свое время на что-то более полезное, чем поиск и вычитывание простыней текста от работодателей с последующим затачиванием своего резюме под каждую кажущуюся подходящей вакансию и ответами на бесконечные однотипные и тупые вопросы
Основные отличия LinkedIn от HH
А они есть, и главное из них - на hh ты сначала заполняешь резюме на сайте, а потом уже откликаешься этим готовым резюме на каждую вакансию, прикладывая сопроводительное письмо и изредка отвечая на те или иные вопросы. На LinkedIn же под каждую вакансию желательно писать отдельное резюме, заточенное под эту вакансию, поскольку рассылка одного и того же резюме всем работодателям снижает вероятность ответа на ваш отклик. Плюс отклик на каждую вакансию требует ответа на множество вопросов, что на hh случается редко. А вот сопроводительные письма, в отличие от hh, просят не так часто. Эти отличия пришлось учитывать в архитектуре приложения, а теперь поговорим собственно о ней.
Архитектура приложения

Основной язык Python, использованы фреймворки Playwright, LangChain и Python-Telegram-Bot, Browser Use.
Приложение состоит из следующих блоков:
Main Block - основной блок, который запускает приложение и все его компоненты
Job Manager - блок, отвечающий за взаимодействие с сайтом LinkedIn, поиск вакансий, отклик на них, а также сохранение результатов работы приложения
Resume Builder - блок, отвечающий за создание резюме под каждую из вакансий
LLM Service - блок, отвечающий за взаимодействие с LLM
Telegram Manager - блок, отвечающий за отправку пользователю сообщений об ошибке, а также отчетов о проделанной за день работе через Telegram
Алгоритм работы
Поскольку LLM это штука довольно ненадежная, идея приложения заключается в том, чтобы доверить ей только ту работу, которую может выполнить только она, а все остальное пусть выполняют обычный софт. То есть все нажатия кнопочек в браузере и поиск нужных полей для заполнения осуществляет программа, а LLM используется только для ответов на вопросы, написания резюме и прочих NLP-шных штук. У этого подхода есть недостаток, связанный с тем, что LinkeIn периодически меняет свой сайт, и поэтому некоторые функции взаимодействия с его элементами приходится переписывать. Зато в целом приложение работает надежнее, чем типичное агентское приложение, в котором все функции выполняет LLM, да к тому же кушает на порядок меньше токенов.
В целом алгоритм работы выглядит так:
Загружаем настройки программы и информацию о резюме из соответствующих файлов.
Заходим на сайт и авторизуемся, если до этого не заходили. В противном случае просто загружаем предыдущую сессию.
Анализируем, насколько полно представлена информация в резюме. Если есть неточности - просим пользователя их указать, в противном случае продолжаем работу.
Если в конфиге есть какие-то дополнительные настройки поиска - задаем их на сайте.
Движемся по списку найденных вакансий, заходим в очередную, берем ее описание, формируем промпт, добавляем туда также информацию о резюме пользователя и настройках поиска вакансий.
Просим LLM оценить, насколько подходит по ее мнению данная вакансия по шкале от 1 до 100. Если оценка выше границы, предварительно заданной в настройках приложения - переходим к п.7, иначе переходим к п.5.
Собираем информацию о навыках, требуемых для данной вакансии, сохраняем ее в отдельный файл со статистикой по навыкам.
Если в настройках приложения стоит разрешение на отклик - жмем кнопку отклика. В противном случае сохраняем информацию о данной вакансии в отдельный файл и переходим к п.5.
Формируем с помощью LLM файл резюме и текст сопроводительного письма (при необходимости), прикладываем их к отклику.
Отвечаем на дополнительные вопросы работодателя: какую зп хочешь, готов ли приезжать в офис, есть ли гражданство и т.д. Если до этого вопрос уже встречался, загружаем готовый ответ из файла, в противном случае просим LLM ответить и сохраняем ответ.
В случае, если для ответа недостаточно информации, во избежание галлюцинаций в промпте указано возвращать вместо ответа фразу "No info". Следовательно, если получаем такой ответ - пропускаем вакансию и заносим ее в специальный файл для пропущенных вакансий, чтобы пользователь потом сам посмотрел его и откликнулся самостоятельно.
Дополнительные заметки
Отклик на другие вакансии
У LinkedIn, помимо вакансий с возможностью быстрого отклика (Easy Apply), есть также вакансии с переходом на сайт работодателя. Такие вакансии может обработать только агентское приложение, в котором все функции выполняет LLM через соответствующие инструменты. Для подобных вакансий я добавил в приложение агентскую библиотеку Browser Use, но результаты, если честно, не самые впечатляющие - агент способен справится только с одной вакансией из 5-10, при этом расход токенов минимум раз в 10 больше.
Стоимость работы приложения
Кстати о расходе токенов. По умолчанию в качестве LLM используется Gemini, у которой, есть бесплатный тариф API (до 15 вызовов в минуту), так что откликаться можно практически бесплатно! Правда периодически могут возникать ошибки, связанные со слишком частыми запросами, но в приложении есть настройка, которая позволяет минимизировать вероятность подобных ошибок, ограничивая RPM теми самыми 15 запросами в минуту. Но даже если использовать платный тариф, по моим подсчетам быстрый отклик на одну вакансию с использованием Gemin-2.0-Flash стоит $0.0005 - $0.0035, не очень большие деньги.
Анонимизация персональных данных
Отправлять на сервера сторонних компаний свои личные данные не самая хорошая идея, поэтому я добавил анонимизацию всех персональных данных пользователя (за исключением страны, города проживания и даты рождения, иначе может пострадать качество ответов на вопросы) при отправке в LLM. В приложении осталась пара функций, которые не анонимизируют данные при отправке в LLM, про это можно почитать в README, но они не обязательны к использованию. Так что теперь можно откликаться на вакансии, не жертвуя свои персональные данные третьим лицам.
Playwright вместо Selenium
В AiHawk для взаимодействия с браузером использовался Selenium, я перевел проект на Playwright, потому что могу он более производительный, стильный, модный, молодежный, и к тому же из коробки поддерживает режим Headless, позволяющий запускать программу в фоновом режиме.
Все остальные свистелки перечислять не буду, о них можно почитать в README проекта.
Результат
На видео ниже пример работы. На нем программа запускается, находит через поиск вакансии, откликается на них, прикладывает резюме, а также отвечает на сопутствующие вопросы.
Проект есть на гитхабе, найти можно по этой ссылке.
Комментарии (6)

octoMax
22.10.2025 11:39Круто! Очень полезная тулза. Нечто подобное запилил одно время для себя - но Ваше продвинутее +1000:-)
(Вот из-за таких .... мы и видим 100500 откликов на вакансию размещенную 1 минуту назад)

Paczuk
22.10.2025 11:39Как на это смотрит сам LinkedIn? Проблем с баном аккаунтов ещё не было?

beatwad Автор
22.10.2025 11:39Не сказать, чтобы LinkedIn это одобрял, но за два месяца активной разработки и несколько сотен откликов с использованием бота не было ни одного предупреждения, я уже не говорю о банах.
Спасибо за вопрос, добавил предупреждение об этом в статью.
VitaminND
Супер! В Закладки однозначно!