Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
exan
7 лет назад

[Биржа Тем] Малоизвестные языки программирования - 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" установщик докачает выбранные пакеты и установит их - тут нужно немного подождать. Установщик может задать несколько вопросов при установке - внимательно их читайте и отвечайте - это важно.

 По окончанию установки вы увидете сообщение


Imgur

Запуск и использование

 После установки в каталоге 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 не прогружаются картинки)

Imgur

 Строка 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 секунд и повтаряем все заного

Алгоритм

  1. кликаем на кнопку "Лента", для подгрузки новых постов
  2. ждем 3,5 секунды
  3. кликаем на первый, не голосванный пост
  4. ждем 0,5 секунд
  5. наводим мышку на кнопку "Лента"
  6. проверяем, появился ли попап
  7. если появился - жмем на большую кнопку апвота
  8. ждем 10 секунд и повторяем все по новой

Выводы

 Как видите, ничего сложного и можем не волноваться, что забыли кого то проголосовать. Особых знаний программирования не нужно, для большинства задач нужно всего несколько команд. Мое мнение - отличная и полезная штука. А что вы думаете по этому поводу?


Написано специально для "Биржи тем" по заказу @zoss и @wind009


Подписывайтесь на мой канал @exan, спасибо за внимание

67
3.475 GOLOS
На Golos с May 2017
Комментарии (5)
Сортировать по:
Сначала старые