Найти тему
vladkomudrich

Мой весёлый опыт написания браузерных ботов

Оглавление

Однажды появилась у меня задачка - создать бота для автоматизации действий в браузере. Пишу на Python, поэтому выбор пал на библиотеку Splinter.

Пару слов о бибилиотеке

Splinter сделан поверх существующих инструментов автоматизации, таких как Selenium и позволяет писать программы на Python. Документация в целом неплохая и показывает много полезного, однако, есть ряд специфических моментов, за решением которых не очень опытным программистам вроде меня придётся обращаться к сообществу. В решении своих задач я попробовал далеко не всё, но был полностью удовлетворён. Здесь я не буду разбирать все возможности инструмента, поэтому, в случае заинтересованности, обратитесь к документации!

Простейший кейс использования

В нашем университете существует сайт, на котором некоторые дисциплины мы проходим онлайн. Недавно там появились уровни, который можно было прокачивать, получая опыт;) Там ещё была таблица лидеров со всеми участниками! Вот примеры событий, за который давалось XP:

  • выполнение задания (20XP);
  • просмотр лекции (15XP);
  • за каждые 5 минут, проведённые на курсе (9XP);
  • сообщение на форуме (40XP);

И сразу, подумал я, нужно это автоматизировать и забирать первое место😎. Сообщение на форуме - было самым жирным, поэтому выбор события для получения опыта - очевиден. На тот момент я уже был знаком с этой библиотекой и писал с помощью неё гораздо более сложные вещи. Поехали!

Первым шагом скачиваем Splinter, импортируем всё необходимое, прописываем путь к нашему браузеру и указываем первую страницу для посещения!

-2

Библиотека предоставляет много возможностей. На старте можно настраивать куки, профили в Chrome и многое другое...

Вторым этапом я нашёл кнопку "Вход в ЛК" по CSS-селекторам, перешёл в окошко и залогинился, применив метод fill(name, value).

-3

Методов поиска элементов и взаимодействия с ними действительно много. Помимо "поиска по CSS" в моём коде можно заметить click_link_by_href(href), который находит элемент по заданной ссылке и кликает. Можно и с помощью Xpath. Смотрите документацию!

Наверняка вы задаётесь вопросом, зачем же мне time.sleep() в коде? Они там для избежания сбоев. Интернет не всегда идеален. Случается так, что программа переходит к следующему действию, а DOM ещё не успел прогрузится. В итоге получаем ошибку типа "element is not visible". Скорость работы получается не такой высокой, как ожидается (для некоторых задач она жизненно необходима). Этот вопрос я ещё подниму в конце статьи!

Третьим шагом я, находя элементы с помощью библиотеки, добираюсь до форума и начинаю оставлять сообщения уже знакомым методом fill() и захватывать лидерскую позицию на курсе;)

Во время последовательного запуска новых потоков (XP много не бывает😆) пришлось написать пару условий для ошибок и 9 ботов стабильно "фармили" мне опыт. Десятый запускался, но жил недолго. Вероятно, уже не хватало ресурсов железа и интернета (всего лишь то 9 окон Chrome).

Итоги

Я знатно повеселился и продолжаю с помощью этого инструмента решать интересные задачи. Однако мне пока непонятно, как решить проблему скорости. Бот взаимодействует с браузером, ждёт, пока прогрузится DOM и иногда это бывает не позволительно долго. Жду ваших идей в комментариях! Может для задач, требующих скорости нужны другие инструменты?

Если вам зашло, вы можете предложить мне задание, в котором нужно что-то автоматизировать и я выложу детальную статью или даже видео, как это реализовать;) Happy coding✌️