[Биржа Тем] Малоизвестные языки программирования - Sikuli X aka Sikuli Script
Sikuli Script - программирование для любого
Сегодня: в очередной раз: я напишу статью о полезном программировании с минимальными навыками. Расскажу вам о языке "Sikuli Script aka Sikuli X". Данный язык, является представителем скриптовых визуальных языков. "Sikuli Script" основан на Jython и реализует поиск паттернов на экране для автоматизации рутинных действий. У этого языка есть версии под Windows, Linux и MacOS
Для кого
Кому он может быть полезен? Всем кто делает какую-либо рутинную цикличную работу. Например, я любитель поиграть в игры, и как то играл в Eve Online. Я не любитель ПВП в играх - работал мирным шахтером и транспортировщиком - задача была простая - пролетать пояса астероидов - и долбить определенную руду. После набития трюма лететь на станцию и сгружать груз в перевозчик, после набития трюма перевозчика нужно было лететь в определенную систему и создавать ордер на продажу руды, возвращаться в систему с рудой и опять копать. Задача хоть и прикольная, но долгая и нудная и я реализовал "бота" для этих действий с помощью "Sikuli Script".
Для автоматизации большинства рутинных действий за компьютером, вам не потребуется знаний программирования. Главное обладать немного логикой. Далее разъясню на простом примере - если вы хотите голосовать автоматически за все посты в вашей ленте, то этот гайд для вас.
Установка
Я буду рассматривать установку под Windows - думаю пользователям Linux и MacOS не составит особого труда сделать тоже самое.
Для работы данного языка необходимо, что бы на компьютере была установлена Java SE. Перейдем по ссылке и скачаем необходимую версию. Не забудьте перед скачиванием согласиться с лицензионным соглашением.
Описывать установку Java я не буду - сложностей никаких быть не должно.
Первым делом нам нужно скачать и установить сам Sikuli Script. Для этого, нужно перейти по ссылке - https://launchpad.net/sikuli/+download и скачать файл sikulixsetup-1.1.1.jar
Sikuli Script любит быть поближе к корню диска, поэтому у себя я разместил его в каталоге D:\SikuliX
После запуска файлика нужно нажать кнопку "Yes"
В основном установщике необходимо выбрать пункт 1 что бы установить IDE и выбрать, на каком языке вы хотите писать - я всегда выбираю Jython. Так же я бы советовал, выбрать пункт 3 - он установит возможность использовать OCR - переводить картинку в текст.
После нажатия на кнопку "Setup Now" установщик докачает выбранные пакеты и установит их - тут нужно немного подождать. Установщик может задать несколько вопросов при установке - внимательно их читайте и отвечайте - это важно.
По окончанию установки вы увидете сообщение
Запуск и использование
После установки в каталоге D:/SikuliX
появится файл runsikulix.cmd
- его необходимо запустить для запуска IDE
С левой стороны редактора, вы увидите панель быстрого доступа к часто используемым командам. При наведении мышкой на команду - всплывает подсказка на русском языке.
В группе "Поиск" находятся команды, для поиска паттернов на экране.
- find - ищет наиболее совпадающий образ в указанной области (по умолчанию область, это весь экран).
- findAll - ищет все совпадения в указанной области
- wait - ожидает появления паттерна в указанной области до определенного количества минут
- waitVanish - ожидает исчезновения паттерна в указанной области до определенного количества минут
- exists - проверяет, существует ли паттерн в указанной области
В группе "Действия мыши" находятся команды, для одноименного мспользования мыши на паттернах.
- click - эмуляция нажатия на паттерн левой кнопкой мыши
- rightClick - эмуляция нажатия на паттерн правой кнопкой мыши
- doubleClick - эмуляция двойного нажатия на паттерн левой кнопкой мыши
- hover - навести мышь на паттерн
- dragDrop - перетащить один паттерн на другой паттерн
Естественно, это не все команды языка - более глубокие познания, вы можете получить из документации
Кроме того, Sikuli X поддерживает любые команды языка Jython, вплоть до рисования GUI окон.
Запуск кода и его остановка
Для запуска вашего кода используется кнопка "Выполнить" или "Запустить в замедленном режиме" прямо в IDE. При этом скрипт запустится и окно пропадет. Для остановки скрипта используются клавиши Shift+Alt+C.
Кноака "Запустить в замедленном режиме" будет вставлять паузы между всеми действиями и подсвечивать все нажатия - некий режим отладки.
Области
Если область не задана, по умолчанию это весь экран. Для оптимизации поиска, можно задать свою область и использовать ее. Области можно сохранять в переменных и так же использовать ее текствое представление а не картинку.
Пример использлвания SikuliX на платформе Голос
Допустим, вы доверяете всем людям, которые находятся в ваших подписках, и готовы их поддержать в любом случае. Для этого мы можем написать бот программу.
Разместите окно браузера и Sikuli IDE как показано на скриншоте (пришлось делать скриншот на MacOS - по RDP в IDE не прогружаются картинки)
Строка 2 и 3 определяют регионы поиска паттерна на экране. Я определил регион для поиска кнопки "Лента" и значка неголосованного поста. Для вставки области нужно нажать на кнопку "Region" и выделить нужную область поиска.
Строки 6,7,8 определяют наши кнопки "Лента" и значки голосования. Для вставки изображения кнопок нужно нажать кнопку "Снимок экрана"
Строки 10-19 - основной скрипт программы.
#Бесконечный цикл
while True:
rgControls.click(btnFeed) # кликаем по кнопке Лента
sleep(3.5) # ожидаем 3.5 секунды (загрузка ленты)
rgUpvotes.click(btnUpvote) # кликаем по значку upvote
sleep(0.5)
rgControls.hover(btnFeed) # наводим мышку на кнопку Лента, что бы не сработало событие наводки мыши
sleep(0.5)
if rgUpvotes.exists(btnUpvotePopup): # проверяем - существует ли большая кнопка upvote в попапе - у новичков нет попапа с выбором силы голосования
rgUpvotes.click(btnUpvotePopup) # кликаем на большую кнопку upvote
sleep(10) # ждем 10 секунд и повтаряем все заного
Алгоритм
- кликаем на кнопку "Лента", для подгрузки новых постов
- ждем 3,5 секунды
- кликаем на первый, не голосванный пост
- ждем 0,5 секунд
- наводим мышку на кнопку "Лента"
- проверяем, появился ли попап
- если появился - жмем на большую кнопку апвота
- ждем 10 секунд и повторяем все по новой
Выводы
Как видите, ничего сложного и можем не волноваться, что забыли кого то проголосовать. Особых знаний программирования не нужно, для большинства задач нужно всего несколько команд. Мое мнение - отличная и полезная штука. А что вы думаете по этому поводу?
Написано специально для "Биржи тем" по заказу @zoss и @wind009
Подписывайтесь на мой канал @exan, спасибо за внимание