Instagram Bot — лайки на посты и stories автоматически

Бот для социальной сети Instagram, в котором реализован функционал для автоматических лайков последних постов аккаунтов в подписках и лайков постов и stories людей, лайкнувших последний пост

Пару слов о проекте

Основной задачей проекта было реализовать бота, который сможет лайкать последние 5 постов аккаунтов в подписках, если они не лайкнуты, а после ставить лайки на посты и реакции на stories на аккаунты, которые лайкнули последний пост аккаунта в подписках

Использованные технологии

Список технологий, языков программирования, библиотек и модулей, использованных при разработке данного проекта
Язык программирования
Python 3.10
Selenium & Chromedriver v.100
Библиотека Selenium дает удобный доступ к API браузеров, таких как Firefox, IE, Microsoft Edge, Safari и Chrome. В данном случае был использован браузер Google Chrome
Python TKinter
Стандартная библиотека Python, которая была использована для создания простого графического интерфейса управления ботом
Модули Time и Datetime
  • Модуль Datetime использовался для конвертации и  равнения временных промежутков, так как одной из задач стояла фильтрация постов на "до" и  после" 12 часов назад. Необходимо было ставить лайк только на пост, который опубликован больше 12 часов назад
  • Модуль Time необходим для замеров времени выполнения и установке задержек между лайками постов и реакциями stories
Модуль Threading
  • Так как графический интерфейс занимает главный поток исполнения программы на Python, то для запуска браузера так, чтобы графический интерфейс можно было использовать, необходимо делать это в отдельном потоке
  • Помимо этого в программе присутствует функция "Обновить список подписок", которая должна работать независимо от главного потока. При нажатии на  нопку, данная функция начинает работать в 3-м потоке
Модуль Pickle
Для того, чтобы не входить каждый раз в аккаунт Instagram при запуске программы, необходимо единожды сохранить cookies-файлы с главной страницы и вставлять их каждый раз, при запуске программы. Именно для этого и был использован модуль pickle

Danila Smolyakov
Programmer
Самое сложное в данном проекте для меня было реализовать реакции на истории. Даже на бумаге это выглядело не так легко, как поставить лайки на посты. Однако, после реализации данного функционала всплыла вторая главная сложность — тестирование

Процесс разработки

Описание схемы превращения проекта из идеи, в реализованную программу
1
Моделирование блок-схемы
Перед началом разработки было спроектировано две блок-схемы конечного продукта в качестве плана: схема графического интерфейса и пошаговый план действий бота
2
Планирование разработки
Исходя из разработанных схем был распланирован рабочий процесс в таком порядке: MVP версия интерфейса → разработка функционала лайков постов → доработка интерфейса → реакции на истории → тестирование
3
Реализация в коде
Около 40% кода занимает графический интерфейс: реализация разных состояний кнопок, радиокнопок, чек-боксов и поля для логов. Стоит сказать, что для обработки таких настроек с файла получилось бы не намного меньше строчек кода
4
Тестирование
Из-за нестабильности интернет соединения возможны различия между скоростью загрузки страницы в разное время. Необходимо было предусмотреть и протестировать все варианты интернет соединений и реакций на них

Бэклог проекта

Ошибки, мысли, выводы, ответы на вопросы по ходу решения задачи
Моделирование
Зачем было делать графический интерфейс?
Количество кода не отражает функциональность программы и скорость ее разработки. Сделать понятный интерфейс может быть и выглядит "громоздко", но на это не тратиться бóльшая часть времени. Настраивать программу, кликая на подготовленные кнопки и вписывая данные в поля, у которых заготовлены маски, проще, чем если бы нужно было вписывать данные в какой-то конфигурационный файл. Тем более, что допустить ошибку во втором случае гораздо проще
Моделирование
Почему TKinter а не какой-нибудь PyQt5?
TKinter встроенная и достаточно легковесная библиотека, по сравнению с PyQt5. Собранная в один файл программа (.exe, .dmg) с модулем TKinter весит до 10мб, в то время как Qt программа в несколько раз больше
Реализация
Зачем нужно было использовать многопоточность и почему потоки, а не процессы?
Графический интерфейс программы занимает один поток. Если в нем же запустить chromedriver для выполнения необходимых нам действий, то мы не сможем читать логи, очищать их, нажимать кнопки — пользоваться интерфейсом программы (при этом не важно, запущен ли браузер в оконном или безоконном режиме)

Помимо этого, функция, обновляющая базу подписок, должна работать параллельно основной, чего можно добиться только с помощью многопоточности.

В данном случае процессы не уместны, потому что нам нужно пользоваться общей памятью: логами, списком подписок, настройками — а память отдельных процессов полностью изолирована. Так же, потоки более легковесные.
Реализация
Зачем нужно поле "Логи", если работа идет в браузере?
В программе имеется функция "Запустить без окна браузера". Для того, чтобы следить за действиями программы в этом режиме необходим фрейм с логами, которые можно листать и проверять действия программы.
Тестирование
Какая производительность у программы?
Вся производительность заключается исключительно в скорости и стабильности интернет соединения на запускаемой машине. Если большое количество пакетов теряется и страницы долго загружаются, то программа просто не может перейти к следующему действию
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website