🤖🔍 Ваш ИИ помощник в поиске работы на сайте hh.ru. Ищите и откликайтесь только на интересные вам вакансии в полностью автоматическом режиме и найдите работу своей мечты быстрее.
Этот проект является форком проекта AIHawk, также предназначенного для автоматизации поиска работы (на LinkedIn). Если вас интересует поиск работы именно на LinkedIn, советую приглядеться к AIHawk.
XX_Auto_Jobs_Applier — передовой автоматизированный инструмент, предназначенный для автоматизации поиска и подачи заявок на работу на сайте hh.ru. Используя мощь искусственного интеллекта, XX_Auto_Jobs_Applier дает возможность пользователям в автоматическом режиме подавать заявки на огромное количество интересующих их вакансий, увеличивая свои шансы получить работу мечты.
Вам больше не нужно тратить бесчисленное количество времени на вычитывание и прокликивание всех интересующих вас вакансий. XX_Auto_Jobs_Applier сам найдет интересующие вас предложения, учитывая при этом как текст вакансии, так и текст вашего резюме и дополнительную информацию о вас и ваших интересах. Далее XX_Auto_Jobs_Applier сам откликнется на данное предложение, а также ответит на все сопутствующие вопросы работодателя и приложит сопроводительное письмо, написанное с учетом требований вакансии и содержимого вашего резюме.
-
Автоматизация поиска
- Возможность настройки поиска под интересующие вас вакансии
- Настройка фильтров для исключения неподходящих вакансий и работодателей
-
Быстрая и эффективная подача резюме
- Запуск приложения одной командой
- Автозаполнение всех необходимых работодателю форм и вопросов
- Написание сопроводительных писем в автоматическом режиме
- Есть возможность использовать одно готовое сопроводительное письмо для всех вакансий
-
AI персонализация
- Приложение само отвечает на все интересующие работодателя вопросы
- Сопроводительное письмо пишется с учетом требований вакансии и содержания резюме
- Если в описании вакансии работодатель просит ответить на вопросы или указать ключевые слова, приложение это учтет
-
Мониторинг работы приложения
- Все действия и ошибки логируются
- Все обращения к AI также логируются + записывается стоимость каждого обращения
- Все вакансии и должности, на которые производился отклик, и результат каждого отклика также записываются в соответствующие файлы
-
Безопасная обработка данных
- Все приватные данные хранятся локально в YAML файлах
Работа приложения проверялась на следующих конфигурациях:
- ОС:
- Windows 10
- Ubuntu 22
- Версии Python:
- 3.12.0(64b)
- 3.12.7(64b)
- LLM:
- OpenAI GPT-4o mini
-
Скачайте и установите Python:
Убедитесь, что у вас установлена последняя версия Python. Если нет, загрузите и установите ее с официального сайта Python. Подробные инструкции см. в руководствах (на инглише):
-
Скачайте:
- Приложения заточено под работу с Google Chrome, поэтому скачайте и установите последнюю версию с официального сайта.
-
Клонируйте репозиторий:
git clone https://github.com/beatwad/XX_Auto_Jobs_Applier.git cd XX_Auto_Jobs_Applier
В случае Windows перед выполнением этой команды возможно потребуется установить Git. Найти его можно по этой ссылке
-
Активируйте виртуальное окружение
python -m venv virtual
или
python3 -m venv virtual
source virtual/bin/activate
для Windows нужно зайти в терминал (Win + R -> в появившемся окне ввести cmd, затем Enter):
.\virtual\Scripts\activate
Если в Windows пишет, что pyhon не является исполняемой командой и т.д., запустите еще раз установочный файл python, в появившемся окне нажмите Modify -> Next -> Add python to environment variables
-
Установите все необходимые пакеты:
pip install -r requirements.txt
Основные файлы для настройки лежат в папке data_folder.
В папке data_folder_example лежат примеры файлов для настройки
Этот файл содержит важную информацию. Никогда не делитесь им ни с кем и не делайте этот файл отслеживаемым системой контроля версий.
Совет: можно сделать данный файл неотслеживаемым для Git при помощи команды git update-index --assume-unchanged data_folder/secrets.yaml
или же удалить его из списка остлеживаемых при помощи команды git rm --cached data_folder/secrets.yaml
llm_api_key: [Ваш API ключ OpenAI или Ollama или Gemini]
- Для получения API ключа у OpenAI прочитайте эту статью или загуглите аналоги на русском: https://medium.com/@lorenzozar/how-to-get-your-own-openai-api-key-f4d44e60c327
- Важно: Чтобы использовать API, нужно пополнить баланс счета. Для этого нужно зайти в OpenAI billing dashboard.
- Согласно сообществу OpenAI, сразу после настройки учетной записи OpenAI и покупки необходимых кредитов, пользователи по-прежнему имеют тип учетной записи
Free
. Это не позволяет им иметь неограниченный доступ к моделям OpenAI и позволяет делать только 200 запросов в день. Это может привести к ошибкам во время выполнения, таким как:Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. ...}}
или{'error': {'message': 'Rate limit reached for gpt-4o-mini in organization <org> on requests per day (RPD): Limit 200, Used 200, Requested 1.}}
OpenAI автоматически обновит вашу учетную запись, но это может занять некоторое время, от пары часов до нескольких дней. Подробнее об ограничениях вашей организации можно узнать на официальной странице. - Также пользователи из России скорее всего (обязательно) встретятся с этой ошибкой:
Error code: 403 - {'error': {'code': 'unsupported_country_region_territory', 'message': 'Country, region, or territory not supported'...}}
Что тут можно сказать, включите VPN, выберите любую европейскую страну или США/Канаду, и будет вам счастье. - Для получения ключа API Gemini посетите Google AI for Devs
Этот файл содержит в себе настройки поиска вакансий. За исключением полей job_title, login и job_blacklist настройки этого файла повторяют настройки поиска на hh.ru, поэтому углубляться мы в них не будем (к тому же там все закомментировано). Рассмотрим только:
-
job_title:
- Должность, на которую вы претендуете, самое важное поле. Нужно, чтобы на hh.ru было резюме, которое называлось ровно также, как эта переменная
-
login:
- Собственно логин, под которым вы входите на hh.ru (может быть телефон или email)
-
job_blacklist:
- Список компаний, на вакансии которых не откликаемся
Все поля, которые обязательно должны быть в файле, помечаются в файле в комментариях как обязательное поле
.
Все поля, которые могут принимать только одно значение true, помечаются в файле в комментариях как может принимать только одно значение true
.
Этот файл содержит в себе резюме пользователя в структурированном виде. Этот файл должен быть заполнен вашими персональными данными, информацией об образовании, опыте, навыкам, зарплатным ожиданиям и т.д. Эта информация используется для написания сопроводительных писем, а также для ответов на вопросы работдателя. Информация из этого файла должна совпадать или дополнять информацию из вашего резюме на сайте hh.ru.
Каждая секция имеет специфические поля. За редким исключением, любое поле в любой секции может быть не заполнено, более того, большинство секций можно оставить абсолютно пустыми. Но чем больше информации о себе вы напишете, чем лучше LLM будет в последствии отвечать на вопросы. Если какая-то секция или какое-то поле не может быть пустым (например Имя/Фамилия или зарплатные ожидания) - приложение само сообщит вам об этом, выдав соответствующую ошибку.
-
personal_information:
В этой секции хранится ваша личная информация + контакты- name: Имя.
- surname: Фамилия.
- date_of_birth: Дата рождения.
- country: В какой стране живете в данным момент.
- city: В каком городе живете в данный момент.
- phone: Телефон.
- email: Адрес вашей электронной почты.
- github: Ссылка на ваш github.
- linkedin: Ссылка на ваш LinkedIn.
- personal_site:
-
Пример
personal_information: name: Иван surname: Иванов date_of_birth: 15.07.1995 country: Россия city: Москва phone: 89098765432 email: ivan_ivanov@gmail.com telegram: ivanov95 github: https://www.github.com/ivanov95/ linkedin: https://www.linkedin.com/in/ivan-ivanov-f3e57c712/ personal_site: https:/ivan-ivanov.ru
-
legal_authorization:
- В каких странах есть разрешение на работу- countries: Список стран
-
Пример
legal_authorization: - countries: - Россия - Беларусь
-
work_preferences:
Кем бы вы хотели работать и какие условия работы предпочитаете- position: На какой позиции хотели бы работать
- specialization: Какая у вас специальность
- job_type: Предпочитаемый тип занятости: полная занятость, частичная занятость, стажировка, разовое задание и т.д.
- work_schedule: Предпочитаемый рабочий график: полный день, удаленная работа, гибкий график, вахтовый и т.д.
- travel_time_to_work: Время, которое вы готовы тратить на работу
- ready_to_business_trips: Готовы ли вы к командировкам и если да, то как часто
- relocation: Есть ли возможность и желание релоцироваться
-
Пример:
work_preferences: position: Python разработчик specialization: Программист, разработчик job_type: Полная занятость, частичная занятость work_schedule: Полный день, Удаленная работа travel_time_to_work: Не более часа ready_to_business_trips: Иногда relocation: Могу переехать
-
education_details:
Список, образований и курсов, которые вы получали/проходили- education_level: Уровень образования (высшее, неоконченное высшее, среднее, курсы)
- institution: Название учебного заведения (если есть)
- faculty: Название факультета (если есть)
- company: Название компании (если есть)
- specialization: На какую специальность учились
- year_of_completion: Год завершения
-
Пример:
education_details: - education_level: Высшее institution: Московский Государственный Институт faculty: ВМК (Высшая Математика и Кибернетика) company: specialization: Фундаментальная информатика и информационные технологии year_of_completion: 2019 - education_level: Курсы institution: faculty: company: Яндекс Практикум specialization: Python разработчик year_of_completion: 2021
-
experience_details:
Cколько лет общего опыта в индустрии + где работали и чего добились-
total_experience: Сколько лет общего опыта
-
grade: Ваш уровень (intern, junior, middle, senior, team lead и т.д.)
-
Список мест работы:
- position: На какой позиции работали
- company: Имя компании
- employment_period: С какого по какое работали
- industry: В какой индустрии/сфере работали
- key_responsibilities: Чем занимались/за что отвечали
- пункт_1
- пункт_2
- ...
- achievements: Ваши достижения на этой позиции
- пункт_1
- пункт_2
- ...
- skills_acquired: Какие навыки приобрели
- пункт_1
- пункт_2
- ...
- technoligies: Какие технологии использовали
- пункт_1
- пункт_2
- ...
-
-
Пример:
experience_details: - total_experience: 4 года - position: Python разработчик company: ООО «Horns & Hooves» employment_period: Август 2022 — настоящее время industry: Веб-разработка key_responsibilities: - responsibility_1: Разработка веб-платформы для промо-кампании - responsibility_2: Разработка телеграм-бота для промо-кампании achievements: - Организовал структуру проекта - Cоздал посадочную страницу на React, обеспечивающую UX/UI-оптимизацию и взаимодействие с пользователем - Интегрировал API Яндекс Карт - Ускорил деплой на 10 минут благодаря Git + Docker-compose - Настроил веб-сервер при помощи Nginx и Сertbot skills_acquired: - Веб-разработка - Автоматическое тестирование technoligies: - Python - Django REST Framework - React - RabbitMQ - Redis - PostgreSQL - Aiogram - Unit tests - position: Python разработчик company: ПилРос employment_period: Сентябрь 2020 — Июнь 2022 industry: Веб-разработка key_responsibilities: - responsibility_1: Разработка телеграм-бота на Aiogram для взаимодействия с клиентами - responsibility_2: Сайт-сборник проектов на Django achievements: - Разработал базу данных для хранения и обновления рабочего расписания - Внедрил систему мгновенных уведомлений, позволяющую оповещать клиентов об изменениях в заказах в режиме реального времени - Внедрил асинхронную обработку чеков API Федеральной налоговой службы - Интегрировал API Яндекс Карт и Яндекс Погоды skills_acquired: - UI design technoligies: - Python - Django - React - Redis - PostgreSQL - Aiogram - REST API - Unit tests - UI design
-
projects:
Какие проекты вы сделали, их описание и ссылки- name: Имя проекта.
- description: Краткое описание проекта.
- link: Ссылка на проект.
-
Пример:
projects: - name: Client Interaction Telegram Bot description: Телеграм-бот на Aiogram для взаимодействия с клиентами link: https://www.github.com/ivanov95/client_int_bot.git - name: mqtt-packet-parser description: Модуль Node.js для анализа пакетов MQTT, эффективность анализа повышена на 40% link: https://www.github.com/ivanov95/mqtt_packet_parser.git
-
availability:
Как скоро вы готовы приступить к работе- notice_period: Сколько времени вам нужно, чтобы выйти на новую работу
-
Пример:
availability: notice_period: 2 недели
-
salary_expectations:
Ожидания по зарплате- salary_range: Размер/вилка по зарплате, которая вас устроит
-
Пример:
salary_expectations: salary_range: от 200000 до 400000 руб
-
certifications:
Есть ли у вас какие-то сертификаты, пройденные тесты или сданные экзамены по специальности- сертификат_1
- сертификае_2
- тест_1
- ...
-
Пример:
certifications: - Certified Python Developer - Django Certified Solutions Architect
-
languages:
Какими языками и насколько хорошо вы владеете- language: Язык
- proficiency: Уровень владения (базовый, средний, продвинутый, свободно).
-
Пример:
languages: - language: Русский proficiency: Свободно - language: Английский proficiency: Средний
-
interests:
Расскажите о ваших профессиональных или личных интересах, которые могут помочь вам в работе- интерес_1
- интерес_2
- ...
-
Пример:
interests: - Чат-боты - Машинное обучение и искусственный интеллект - Computer Vision/CV/Компьютерное зрение - Natural language processing/NLP/Обработка естественного языка - Кибербезопасность - Antifraud/Выявление мошеннических действий
-
achievements:
Расскажите о ваших профессиональных и личных достижениях, которые могут создать благоприятное впечатление о вас у работодателя- name: Название достижения
- description: Описание достижения
-
Пример:
achievements: - name: Победитель хакатона description: Занял первое место в хакатоне IT Inno Hack 2023 - name: Создатель популярного проекта mqtt-packet-parser description: Проект mqtt-packet-parser собрал более 300 звезд на GitHub
-
previous_job_details:
Расскажите о своем опыте на предыдущей работе- why_leave_previous_job: Почему ушли/уходите с предыдущей работы
- team: Как сложились ваши взаимоотношения с командой на предыдущей работе
- boss: Как сложились ваши взаимоотношения с начальством на предыдущей работе
-
Пример:
previous_job_details: why_leave_previous_job: На предыдущей работе не устраивало отсутствие карьерного роста и интересных задач. team: Коллектив на предыдущей работе был дружный. Все помогали друг другу и поддерживали в трудные моменты. Рабочий процесс был комфортным, а рабочая атмосфера была позитивной и доброжелательной. boss: Отношения с начальством были хорошие, когда возникали трудности, мне всегда шли на встречу и были готовы помочь. Мои достижения всегда замечали и предоставляли советы, которые помогали мне развиваться
-
skills:
Расскажите о своих профессиональных навыках, которые помогут вам в работе, какие технологии и инструменты вы знаете и используете- навык_1
- навык_2
- навык_3
-
Пример:
skills: - Python - Django - SQL - Docker - Git - ...
-
general_knowledge_questions:
Пункт для общих вопросов, по сути заглушка, в приложении не используется
Это файл содержит в себе настройки для работы приложения.
-
MONKEY_MODE
- если предпочитаете работать в режиме "текст не читай, отклик прожимай", этот режим для вас, просто установитеMONKEY_MODE = True
. В этом режиме приложение будет откликаться на все вакансии подряд, независимо от того, подходят ли они вам по интересам или навыкам или нет. -
DEBUG_MODE
- если пока не хотите откликаться на вакансии, а просто хотите посмотреть, какое сопроводительное письмо для каждой из вакансий напишет приложение и соответственно проверить их на наличие несостыковок или просто кринжа - установитеDEBUG_MODE = True
. Для того, чтобы вытащить сопроводительные письма из логов LLM API, можно воспользоваться файломsrc/llm/parse_llm_api_calls.py
-
FIXED_COVER_LETTER
- если этот режим активирован - приложение будет использовать одно готовое сопроводительное письмо для всех вакансий вместо генерирации отдельного сопроводительного письма для каждой вакансии. Текст готового сопроводительного письма можно найти в файле strings.py, переменная fixed_cover_letter -
JOB_IS_INTERESTING_THRESH
- в нормальном режиме работы LLM оценивает степень 'интересности' каждой вакансии по шкале от 1 до 10, где 1 - вакансия абсолютно не подходит для кандидата, а 10 - вакансия подходит идеально. Данная переменная задает порог, ниже которого вакансия считается неинтересной для отклика. -
MINIMUM_LOG_LEVEL
- минимальный уровень важности сообщений, которые будут записаны в лог, от самого низкого (DEBUG), до самого высокого (CRITICAL). Я предпочитаю записывать в лог всё и вам рекомендую, поэтому по умолчаниюMINIMUM_LOG_LEVEL = "DEBUG"
-
MAX_APPLIES_NUM
- максимальное число откликов за один запуск приложения. Учтите, что для hh.ru есть ограничение не более чем в 200 откликов в день -
MINIMUM_WAIT_TIME_SEC
- минимальное время, затрачиваемое на один отклик на вакансию. Если приложение откликнется быстрее, оно будет ждать, пока не истечет минимальное время -
LLM_MODEL_TYPE
- LLM от какой компании предпочитаете (OpenAI, Claude, HuggingFace и т.д.) -
LLM_MODEL
- какую модель LLM предпочитаете -
TEMPERATURE
- температура модели, чем она выше, тем креативнее модель, но могут случаться галлюцинации; чем она ниже, тем строже модель следует промпту, но и креативность становится ниже -
APPLY_ONCE_AT_COMPANY
- если не хотите подаваться в одну компанию на две и более вакансии - установитеAPPLY_ONCE_AT_COMPANY = True
-
PRICE_DICT
- словарь для подсчета стоимости работы той или иной модели LLM за один входящий/исходящий токен, позволяет оценить итоговые расходы на работу с LLM при рассылке откликов. На данный момент заполен только для GPT-4o и GPT-4o-mini, но вы можете дополнить информацией о стоимости предпочитаемых вами моделей.
В этом файле хранятся промпты для работы с LLM, в частности промпты для ответов на вопросы определенного типа/тематики, а также резюмирования текста вакансии или (пардон за каламбур) резюме.
Большинство из этих промптов я взял из проекта AIHawk в нетронутом виде. Поменял лишь промпт на написание сопроводительного письма (так как с оригинальным промптом получался уж совсем лютый кринж), ну и добавил промпт для определения интересности вакансии для соискателя.
Если захотите что-то поменять:
-
промпт для определения интересности вакансии находится в переменной
job_is_interesting
-
промпт для написания сопроводительного письма находится в переменной
coverletter_template
-
текст фиксированного сопроводительного письма для всех вакансий находится в переменной
fixed_cover_letter
Папка data_folder_example
содержит примеры того, как должны быть структурированы и заполнены файлы, необходимые для работы приложения. Эта папка служит практическим справочником, который поможет вам правильно настроить приложение.
Внутри этой папки вы найдете примеры настроечных файлов:
search_config.yaml
secrets.yaml
structured_resume.yaml
Эти файлы уже заполнены вымышленными, но реалистичными данными. Они показывают вам правильный формат и тип информации для ввода в каждый файл.
Использование этой папки в качестве руководства может быть полезным для:
- Понимания правильной структуры каждого конфигурационного файла
- Просмотра примеров допустимых данных для каждого поля
- Опорной точки в заполнении ваших личных файлов
-
data_folder: Убедитесь, что данная папка содержит в себе следующие файлы, и они корректно заполнены:
secrets.yaml
search_config.yaml
structured_resume.yaml
-
data_folder/output: Содержит файлы, в которые записаны результаты работы приложения.
answers.json
список предыдущих вопросов и ответов, которые давала на них LLM в предыдущие разы, позволяет избежать повторного запуска LLMfailed.json
список вакансий, отклики на которые не были отправлены по причине программной ошибкиllm_api_calls.json
лог всех запросов, сделанных к LLM, и полученных на них ответовskipped.json
список вакансий, отклики на которые не были отправлены по иной причине (причина указана)success.json
список вакансий, отклики на которые были отправлены успешно
-
Запуск:
Просто зайдите в папку с проектом и введите в терминале:
python main.py
При первом запуске потребуется авторизоваться на сайте. При последующих запусках этого не потребуется, так как все данные для входа сохраняются в папке
chrome_profile
.Затем приложение введет на сайте настройки поиска и, перед тем как продолжить, попросит вас все проверить. После проверки нажмите Enter в терминале, и приложение продолжит работу. Либо ничего не делайте, и работа продолжится сама автоматически через 2 минуты.
Дальше приложение начнет искать вакансии в соответствии с критериями поиска и откликаться на них.
Для остановки приложения введите комбинацию клавиш Ctrl + C в терминале.
В частности на этапе выполнения команы pip install -r requirements.txt
Проверьте версию python введя в терминал команду python
и убедившись, что его версия совпадает с версией, установленной ранее и что эта версия соответствует версии, на которой проверялась работа приложения (3.12.0 или 3.12.7).
В противном случае удалите все версии python с компьютера и повторите весь процесс установки заново.
Сообщение об ошибке:
openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
Решение:
- Проверьте настройки биллинга API OpenAI на странице https://platform.openai.com/account/billing
- Убедитесь, что баланс положительный
- Если нет возможности пополнить баланс со своей карточки, воспользуйтесь услугами оплаты зарубежных сервисов
- Обратите внимание, что подписка ChatGPT Plus отличается от доступа к API
- Если вы недавно добавили средства или обновились, подождите 12–24 часа, чтобы изменения вступили в силу
Сообщение об ошибке:
Unexpected error occurred: Error code: 403 - {'error': {'code': 'unsupported_country_region_territory', 'message': 'Country, region, or territory not supported', 'param': None, 'type': 'request_forbidden'}}
Решение:
Включите VPN, выберите любую европейскую страну или США/Канаду, должно помочь.
Проблема: Бот предоставляет неточные данные об опыте, навыках, зарплатных ожиданиях и т.д.
Решение:
- Обновите промпты для сопроводительного письма или ответов на вопросы соответствующей тематики
- Проверьте наличие и корректность соответствующих полей в
structured_resume.yaml
- Проверьте содерижимое файла
answers.json
, исправьте или удалите его по необходимости - данный файл используется для кэширования ответов LLM, поэтому может содержать ошибочные ответы от предыдущих вызовов LLm
Сообщение об ошибке:
Ошибка конфигурации: Отсутствует или неверный тип ключа ...
или
Ошибка конфигурации: Поле '...' не может быть пустым в конфигурационном файле ...
Решение:
- Скопируйте
search_config.yaml
из папки data_folder_example и меняйте в нем данные на свои постепенно - Скопируйте
structured_resume.yaml
из папки data_folder_example и меняйте в нем данные на свои постепенно - Убедитесь, что все отступы и пробелы в файле YAML выставлены верно
- Используйте приложение для проверки правильности YAML файла
- Избегайте необязательных спецсимволов и кавычек
Сообщение об ошибке:
selenium.common.exceptions.ElementNotInteractableException...
Решение
Возможно посторонние элементы на странице закрывают доступ к элементам, с которыми приложение осуществляет взаимодействие на странице сайта.
Попробуйте изменить размер окна браузера, например развернуть его на весь экран.
Сообщение об ошибке (Windows):
from Levenshtein.levenshtein_cpp import ( ImportError: DLL load failed while importing levenshtein_cpp: Не найден указанный модуль.
Решение
Установите Visual C++ Redistributable
Проблема: Приложение запустилось, но не начало искать вакансии или вылетело с ошибкой
Решение:
- Проверьте не появилась ли CAPTCHA на сайте
- Убедитесь, что файл
search_config.yaml
настроен корректно, и что с такими параметрами находятся хотя бы какие-нибудь вакансии - Посмотрите в логе или окне терминала, выводило ли приложение сообщения об ошибках и если да, то какие
- Используйте последнюю версию приложения
- Убедитесь, что все зависимости установлены и обновлены
- Проверьте стабильность интернет-соединения
- Закройте все открытые во время предыдущих запусков программы окна Chrome
- Удалите папку chrome_profile, если проблемы сохраняются
Для получения дополнительной помощи создайте запрос в репозитории GitHub с подробной информацией о вашей проблеме, включая сообщения об ошибках и вашу конфигурацию (не забудьте удалить или заменить конфиденциальную информацию).
XX_Auto_Jobs_Applier на данный момент находится в стадии бета-тестирования, и я был бы благодарен за ваши отзывы и предложения. Не стесняйтесь сообщать о проблемах, предлагать улучшения или отправлять pull requests, чтобы помочь улучшить проект.
Этот проект распространяется по лицензии MIT - см. файл LICENSE
XX_Auto_Jobs_Applier, предоставляется AS IS ("как есть") и предназначен только для образовательных целей. Автор не несет ответственности за любые последствия, возникшие в результате его использования. Пользователям рекомендуется соблюдать правила соответствующих платформ и придерживаться всех законов, правил и этических принципов. Использование автоматизированных инструментов для подачи заявлений на работу может нести риски, включая ограничение или блокировку учетной записи пользователя. Действуйте с осторожностью и по своему усмотрению.