Итак, в один прекрасный день меня осенила идея - создать бота для просмотра с рабочего аккаунта новых записей пользователей на которых подписан, просмотра сторис и подписки на новые новые аккаунты.
Было решено писать бота с помощью библиотеки Selenium с использованием Google Chrome(chromedriver).
Задачи бота
- Бот должен не просто ставить лайк на запись, а проверять ставил ли он лайк на эту запись или нет;
- Чтобы просмотр сторис не затягивался, бот должен перелистывать сторисы каждые 4 секунды;
- Для подписки бот должен уметь различать открытые и закрытые аккаунты, а подписываться только на открытые.
Структура проекта
Бота решил реализовать в виде класса с целью практики написания ООП проектов.
Проект состоит из двух файлов:
- start_bot.py - запускает бота;
- 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()
Чтобы статья не показалась слишком длинной, остальные методы я опишу в следующей части.
Спасибо, что дочитали до конца )