SikuliX (старое название Sikuli) — это инструмент, который позволяет автоматизировать то, что вы видите на экране с помощью визуального распознавания (картинок). На хабре уже есть достаточно информации по нему, но все примеры подразумевают использование реального экрана.

Здесь же я опишу свой опыт использования SikuliX в фоновом режиме на облачной IDE Cloud9. В процессе работы с данным инструментом набил немного шишек, поэтому возможно, мой опыт будет кому-то полезен.

Вариантов использования SikuliX достаточно много, вот некоторые из действий, которые вы можете автоматизировать:
  • Работа с флеш сайтами (и любими другими)
  • Автоматизация браузерных игр (собирать урожай на ферме)
  • Работа с десктопными приложениями
  • Настройка компьютера
  • Разнообразные боты
  • Всякого рода рутинная работа с сайтами/документами

В моем случае, было необходимо автоматизировать рутинную работу с флеш сайтом, залогиниться, выбрать в выпадающем списке определенный пункт и понажимать несколько кнопочек. Занимало это порядка 1-3х минут по несколько раз в день. После задействования SikuliX это можно делать через простой запуск скрипта, и тратить свободное время на более полезные вещи (например подучить английский).

Установка зависимостей


SikuliX зависит от таких инструментов, как OpenCV (компьютерное зрение) и Tesseract (распознавание текста). Поэтому, их мы и установим. Начнем с OpenCV.

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

git clone git@gist.github.com:3d1fce8dae65e765f7c4.git
cd 3d1fce8dae65e765f7c4
chmod +x install-opencv-2.4.11-in-ubuntu.sh
./install-opencv-2.4.11-in-ubuntu.sh

Надо сказать, что установка OpenCV “выедает” почти все ресурсы которые cloud9 предоставляет в бесплатном режиме. С платным планом было бы проще, но мне хватило и того что есть. Процесс билда составил 2.15 часа, в это время можете заниматься своими делами, проблем возникнуть не должно. После установки, папку 3d1fce8dae65e765f7c4 можно удалить (освободит почти всю память).

С установкой Tesseract все просто:

sudo apt-get install tesseract-ocr

Для установки самого SikuliX нам все же понадобится реальный экран (ограничение Java). Решением стал запуск X11. Чтобы поставить необходимые компоненты, можем использовать этот скрипт. В состав входят supervisor, xvfb, fluxbox, x11vnc. Для запуска мы можем перенести файлы run.sh и supervisord.conf в корень, или поправить путь к supervisord.conf в файле run.sh

git clone git@github.com:fjakobs/cloud9-vnc.git
cd cloud9-vnc/
./install.sh
./run.sh

Если все прошло успешно, то после запуска run.sh терминал выдаст ссылку. Перейдем по ней в браузере. Что-то на подобии your-workspace/vnc.html. Там, нажмем “Connect” и попадем в оконный менеджер fluxbox.

image

Установка SikuliX


Для установки нам понадобится SikuliX 1.1.1 (версии выше не пробовал), так как в версии 1.1.0 был баг, который не позволял запустить sikuli в фоне. Нам нужно скачать sikulixsetup, возьмем его здесь.

В fluxbox откроем терминал и запустим скачанный файл на установку. У меня было так:

java -jar sikulixsetup-1.1.1-20151126.001204-18-forsetup.jar

Должно открыться окно с вариантами установки SikuliX.

image

image

Я выбрал первый вариант, который установит sikulix.jar, включающий в себя SikuliX IDE. Скрипты, написанные в нем, потом можно будет запустить в терминале без необходимости открывать IDE. Как подпункт я выбрал Python. Вы можете выбрать иной вариант установки, исходя из своих нужд.

На этапе установки Jython возможны проблемы с установкой Jython 2.7.0 (у меня они были, скрипт просто не запускался). Поэтому лучше нажать кнопку “NO” и установить Jython 2.5.4rc1.

Если все прошло успешно, то вы должны увидеть такое всплывающее окно:

image

Запуск Sikuli IDE


Теперь можем запустить IDE. В ней мы будем писать и отлаживать наши скрипты для дальнейшего их запуска в фоновом режиме.

java -jar sikulix.jar

image

Пример


Для примера давайте напишем простой скрипт, который проверяет находится ли хабр в топе выдачи гугла по запросу “как пасти котов”. Включим пользовательские логи и запишем наши действия в файл.

image

Скрипт написали, отладили.

В процессе отладки в терминал и лог сыпались некоторые ошибки, типа:

[error] command 'wmctrl' is not executable
command 'xdotool' is not executable
Failed to initialize libdc1394

Ошибки не критичны и можем их просто игнорировать.

После визуальной отладки можем закрыть fluxbox и перейти в терминал IDE Cloud9.

Запустить скрипт в фоне нам поможет Xvfb (X virtual framebuffer). Это виртуальный X-сервер, который выполняет все графические операции в памяти. Почитать можно тут. Пропишем параметры виртуального экрана, путь к сохраненному проекту, название файла логов и попробуем запустить.

xvfb-run --server-num=10 --server-args="-screen 0 1280x864x16" ./runsikulix -r project.sikuli/ -f SikuliLog.txt


image

Если все прошло гладко, то в нашем файле логов можно будет прочитать “Success. Habrahabr is in Google's first page”. Профит.

Что дальше:


Дальше можно написать небольшое API и запускать наши скрипты/автотесты, например с консоли рабочего компьютера.

Источники:


Официальный сайт проекта.

Комментарии (1)


  1. leorush
    24.01.2016 22:31

    Жаль что до выхода второй версии ещё очень долго, а альтернатив нет.
    Поделюсь своей «шишкой», новичкам будет полезно:
    В Sikuli type с русскими символами не дружит.
    Поэтому приходится использовать костыль в виде
    paste(u"")