Бот для окна python

Python. Создание веб бота (WebScrapping) [1]

Веб-бот — это программа, которая автоматизирует ваши действия в интернете.

В этой статье, я объясню общий принцип создания ботов на Python, применив полученные знания, вы сможете создать бота который:

  • Получает актуальную информацию о стоимости товара.
  • Автоматически участвует в раздачах.
  • Пишет сообщения от вашего имени (ссылка на урок).
  • Скачивает картинки с сайта (ссылка на урок).

Создаем первого бота на Selenium.

Selenium — это библиотека для автоматизации действий в браузере.

Данный способ подойдет для любого сайта, однако, за все нужно платить. Selenium запускает браузер, отъедая огромный запас оперативной памяти. Используйте его только тогда, когда нужно выполнить JS код на странице.

Первым делом нужно установить библиотеку, для этого введите в консоли:

Далее, установите веб-драйвер под браузер Firefox отсюда. Также, необходимо установить браузер Mozilla Firefox, если еще не установлен.

Теперь напишем простейшего бота. Для этого, напишите следующий python скрипт.

from selenium import webdriver #Ипортируем библиотеку from selenium.webdriver.common.by import By from selenium.webdriver.firefox.firefox_binary import FirefoxBinary binary = FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe') #Прописываем путь до firefox.exe browser = webdriver.Firefox(firefox_binary=binary) #создаем объект Firefox браузера browser.get('https://under-prog.ru') #посредством метода get, переходим по указаному URL

Код скрипта описан в комментариях.

Далее, переместите файл скрипта, в одну папку с веб-драйвером geckodriver.exe

И запустите python скрипт. У вас должен открыться браузер.

В адресной строке видна иконка робота, это значит, что браузером управляет программа.

Хорошо, бот создан, но он бесполезен. Единственное на что он способен, это заходить на сайт. Давайте добавим ему новых функций. Например, сделаем так, чтобы бот лайкал посты на сайте.

Бот лайкающий посты на сайте.

Последовательность действий у нас следующая.

  1. Зайти на сайт under-prog.ru (открыть браузер)
  2. Пройтись по каждому из постов.
  3. Нажать кнопку лайк, если она не нажата.
  4. Закрыть браузер.

Первый пункт мы уже сделали, перейдем ко второму.

Пройтись по каждому из постов.

На этом этапе, нужно понимать разметку HTML.

Зайдите на сайт, и нажмите кнопку F12.

У вас откроются инструменты разработчика. Изучив разметку, мы понимаем, что все посты находятся в теге article.

Сейчас нам нужно получить ссылку, на каждый пост. Для этого будем использовать этот css селектор.

article div div.blog-entry-content header.entry-header h2.entry-title a

Данный селектор указывает:

  • На элемент с тегом a
  • который находится находится внутри тега h2 с классом entry-title
  • тот, в свою очередь, находится внутри тега header с классом entry-header
  • тег header находится внутри тега div с классом blog-entry-content
  • тот, находится в теге div
  • тег div находится внутри тега article
link = browser.find_elements(By.CSS_SELECTOR, 'article div div.blog-entry-content header.entry-header h2.entry-title a')[0].get_attribute('href') print(link)
browser.find_elements(By.CSS_SELECTOR, css_селектор)

Данная функция ищет элементы по css селектору. В результате своей работы, она возвращает массив элементов.

link = browser.find_elements(By.CSS_SELECTOR, 'article div div.blog-entry-content header.entry-header h2.entry-title a')[0].get_attribute('href')

В-общем, мы из этого массива, достали первый элемент, и при помощи функции get_attribute(), получили значение атрибута href (ссылка на пост).

Запустите скрипт, в консоли должна появится ссылка на первый пост.

Если закинуть массив элементов в цикл, то получится извлечь ссылки на все посты.

from selenium import webdriver #Ипортируем библиотеку from selenium.webdriver.common.by import By from selenium.webdriver.firefox.firefox_binary import FirefoxBinary binary = FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe') #Прописываем путь до firefox.exe browser = webdriver.Firefox(firefox_binary=binary) #создаем объект Firefox браузера browser.get('https://under-prog.ru') #посредством метода get, переходим по указаному URL elements = browser.find_elements(By.CSS_SELECTOR, 'article div div.blog-entry-content header.entry-header h2.entry-title a') for elem in elements: print(elem.get_attribute('href'))

Отлично, ссылки на все посты получены, осталось всем этим постам, поставить лайк.

Нажать кнопку лайк, если она не нажата

Сначала перекопируем наши ссылки в отдельный массив. Замените это:

elements = browser.find_elements(By.CSS_SELECTOR, 'article div div.blog-entry-content header.entry-header h2.entry-title a') for elem in elements: print(elem.get_attribute('href'))
elements = browser.find_elements(By.CSS_SELECTOR, 'article div div.blog-entry-content header.entry-header h2.entry-title a') links_arr = [] for elem in elements: links_arr.append(elem.get_attribute('href'))

Далее напишем код, отвечающий за нажатие кнопки лайк.

for link in links_arr: #Проходим по каждому элементу массива ссылок browser.get(link) #Переходим по ссылке if browser.find_element(By.CSS_SELECTOR, 'button.wp_ulike_btn').get_attribute('class').find('wp_ulike_btn_is_active') == -1: #Если кнопка 'лайк' не нажата, тогда browser.find_element(By.CSS_SELECTOR, 'button.wp_ulike_btn').click() #кликаем по кнопке 'лайк'
if browser.find_elements(By.CSS_SELECTOR, 'button.wp_ulike_btn').get_attribute('class').find('wp_ulike_btn_is_active') == -1:

Данная строка ищет кнопку с помощью css_селектора, и получает строку с названиями классов нашей кнопки.

Далее, при помощи функции find (стандартная функция python), мы получаем индекс подстроки ‘wp_ulike_btn_is_active‘, если не удалось найти подстроку, функция find возвращает -1, этим мы и воспользовались в нашем условии. Т.е. если атрибут ‘class‘ не содержит подстроку ‘wp_ulike_btn_is_active‘, то.

browser.find_elements(By.CSS_SELECTOR, 'button.wp_ulike_btn').click()

Осталось закрыть браузер, делается это с помощью функции quit().

Бот завершен, запустите скрипт, и наслаждайтесь автоматизацией.

Делаем браузер невидимым

Бот работает и все-бы ничего, но своим окном бразуера, он перекрывает все остальные окна. К счастью, у Firefox есть headless режим, позволяющий пользоваться функциями бразура, не открывая окно браузера.

Добавьте следующий код перед инициализацией браузера:

option = webdriver.FirefoxOptions() option.headless = True

Здесь, мы переопредили настройки браузера, осталось передать их, нашему браузеру.

browser = webdriver.Firefox(options=option)
from selenium import webdriver #Ипортируем библиотеку from selenium.webdriver.common.by import By from selenium.webdriver.firefox.firefox_binary import FirefoxBinary binary = FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe') #Прописываем путь до firefox.exe browser = webdriver.Firefox(firefox_binary=binary) #создаем объект Firefox браузера browser.get('https://under-prog.ru') #посредством метода get, переходим по указаному URL elements = browser.find_elements(By.CSS_SELECTOR, 'article div div.blog-entry-content header.entry-header h2.entry-title a') links_arr = [] for elem in elements: links_arr.append(elem.get_attribute('href')) for link in links_arr: browser.get(link) if browser.find_element(By.CSS_SELECTOR, 'button.wp_ulike_btn').get_attribute('class').find('wp_ulike_btn_is_active') == -1: browser.find_element(By.CSS_SELECTOR, 'button.wp_ulike_btn').click() browser.quit()

Источник

Работа бота: как симулировать нажатия клавиш в Python

Сегодня день рождения у Гвидо ван Россума, создателя Python. Поздравляем! Самое время поговорить о его детище и затронуть животрепещущую тему: как в Питоне имитировать нажатия клавиш при создании ботов. Суть бота — автоматическое выполнение действий, на которые не хочет тратить время человек. У программистов Python есть инструменты, позволяющие имитировать события клавиатуры и реагировать на них. Подборку таких инструментов вы и найдете ниже.

Зачем и кому это нужно

Поводы симулировать нажатие клавиш:

  • автоматизация — создание ботов для сайтов, приложений и игр. Пример: бот для автоматического заполнения форм или кормления/лечения игровых персонажей;
  • тестирование десктопных приложений — перебор возможных действий пользователя и реакций программы;
  • доступность — адаптация интерфейса для людей с ограниченными возможностями здоровья, в том числе за счёт эмуляции мыши (ведь без зрения ею не воспользуешься);
  • оптимизация — переназначение стандартных клавиш и/или замена недостающих кнопок физической клавиатуры.

Инструменты питониста для разных платформ

Для симуляции событий клавиатуры и мыши есть кроссплатформенный модуль PyUserInput , который работает поверх библиотек и фрейморков:

Для Windows также стоит отметить:

pyautoit — это Python API к средству автоматизации AutoIt;

pywinauto — набор модулей, который автоматизирует взаимодействие с Microsoft Windows GUI. Библиотека написана на чистом Python — простейшие её функции по обработке событий мыши и клавиатуры работают и в Linux. Но более сложные возможности для работы с текстом заточены именно под Windows и доступны только там.

Актуальные версии этих инструментов поддерживают Python 3, более ранние — Python 2.

Как это работает: примеры

В директории examples каталога pywinauto на GitHub собраны два десятка наглядных примеров по использованию библиотеки. С их помощью вы можете прямо сейчас создавать ботов, которые умеют устанавливать/удалять программы, скачивать web-страницы, перетаскивать файлы между окнами, пакетно обрабатывать изображения в MS Paint и решать другие задачи.

Новички оценят читаемость кода:

from pywinauto.application import Application # Запускаем целевое приложение - обычный блокнот app = Application().start("notepad.exe") # Выбираем пункт меню app.UntitledNotepad.menu_select("Help->About Notepad") # Симулируем клик app.AboutNotepad.OK.click() # Вводим текст app.UntitledNotepad.Edit.type_keys("Заработало!", with_spaces = True)

Хорошо? Представьте, что вам нужно перенастроить приложение из дефолтного состояния на N-ном количестве компьютеров — выбрать нужные пункты меню, заполнить нужные поля. Или вы тестируете свою программу вдоль и поперёк, чтобы выявить сбои при обращении к GUI. Скрипт, который вам потребуется, будет длиннее, чем в примере выше, но по сути усложнится незначительно.

Добавьте сюда возможность работать с любыми приложениями на Win32 GUI и виджетами под интерфейс MS UI Automation.

Устанавливается pywinauto как обычный пакет — через pip install — и автоматически ставит еще несколько полезных компонентов: библиотеку pyWin32 , COM-клиент и серверный фрейморк comtypes , библиотеку six , которая обеспечивает совместимость Python 2 (начиная с 2.6) и 3. Всё это пригодится начинающему разработчику не только для создания ботов, но и в разработке собственных программных продуктов.

Источник

Читайте также:  text-align
Оцените статью