Найти тему

Instagram bot на python ч.1

Оглавление

Итак, в один прекрасный день меня осенила идея - создать бота для просмотра с рабочего аккаунта новых записей пользователей на которых подписан, просмотра сторис и подписки на новые новые аккаунты.

Было решено писать бота с помощью библиотеки Selenium с использованием Google Chrome(chromedriver).

Задачи бота

  1. Бот должен не просто ставить лайк на запись, а проверять ставил ли он лайк на эту запись или нет;
  2. Чтобы просмотр сторис не затягивался, бот должен перелистывать сторисы каждые 4 секунды;
  3. Для подписки бот должен уметь различать открытые и закрытые аккаунты, а подписываться только на открытые.

Структура проекта

Бота решил реализовать в виде класса с целью практики написания ООП проектов.

Проект состоит из двух файлов:

  1. start_bot.py - запускает бота;
  2. insta_bot.py - содержит описание класса бота со всеми атрибутами и методами.

chromedriver(для запуска google chrome) лежит в каталоге insta_bot/driver/

Описание класса

class InettelInstaBot():
def __init__(self,username,password):
# Отключаем режим тестирования
self.options = webdriver.ChromeOptions()
self.options.add_experimental_option("excludeSwitches",["enable-automation"])
self.options.add_experimental_option("useAutomationExtension",False)
self.username=username
self.password=password
self.browser=webdriver.Chrome('/insta_bot/driver/chromedriver',
options=self.options)

Конструктор класса содержит опции для запуска браузера и принимает при создании объекта данные для авторизации в Instagram.

Первым реализованным методом стала авторизация. Здесь всё просто и ничего сложного нет.

# Авторизация в Instagram
def login(self):
try:
browser = self.browser
browser.get('https://www.instagram.com')
time.sleep(random.randrange(3, 5))
# Ввод логина
username_input = browser.find_element_by_name('username')
username_input.clear()
username_input.send_keys(self.username)
time.sleep(2)
# Ввод пароля
password_input = browser.find_element_by_name('password')
password_input.clear()
password_input.send_keys(self.password)
password_input.send_keys(Keys.ENTER)
time.sleep(10)
# Закрытие всплывающих окон после авторизации
try:
element = browser.find_element_by_class_name('sqdOP')
element.click()
time.sleep(3)
except Exception as e:
print('Окно не обнаружено ', e)
try:
element = browser.find_element_by_class_name('aOOlW.HoLwm')
element.click()
time.sleep(3)
except Exception as e:
print('Окно не обнаружено ', e)
except Exception as main_auth_except:
print(main_auth_except)

Также я сразу решил написать метод закрытия бота:

# Закрытие браузера(бота)
def close_browser(self):
self.browser.close()
self.browser.quit()

Чтобы статья не показалась слишком длинной, остальные методы я опишу в следующей части.

Спасибо, что дочитали до конца )