SikuliX (старое название Sikuli) — это инструмент, который позволяет автоматизировать то, что вы видите на экране с помощью визуального распознавания (картинок). На хабре уже есть достаточно информации по нему, но все примеры подразумевают использование реального экрана.
Здесь же я опишу свой опыт использования SikuliX в фоновом режиме на облачной IDE Cloud9. В процессе работы с данным инструментом набил немного шишек, поэтому возможно, мой опыт будет кому-то полезен.
Вариантов использования SikuliX достаточно много, вот некоторые из действий, которые вы можете автоматизировать:
В моем случае, было необходимо автоматизировать рутинную работу с флеш сайтом, залогиниться, выбрать в выпадающем списке определенный пункт и понажимать несколько кнопочек. Занимало это порядка 1-3х минут по несколько раз в день. После задействования SikuliX это можно делать через простой запуск скрипта, и тратить свободное время на более полезные вещи (например подучить английский).
SikuliX зависит от таких инструментов, как OpenCV (компьютерное зрение) и Tesseract (распознавание текста). Поэтому, их мы и установим. Начнем с OpenCV.
Установка OpenCV оказалась не очень простой, поэтому я использовал этот скрипт, который установит и сбилдит все необходимое. Склонируем его, дадим права на исполнение и запустим.
Надо сказать, что установка OpenCV “выедает” почти все ресурсы которые cloud9 предоставляет в бесплатном режиме. С платным планом было бы проще, но мне хватило и того что есть. Процесс билда составил 2.15 часа, в это время можете заниматься своими делами, проблем возникнуть не должно. После установки, папку 3d1fce8dae65e765f7c4 можно удалить (освободит почти всю память).
С установкой Tesseract все просто:
Для установки самого SikuliX нам все же понадобится реальный экран (ограничение Java). Решением стал запуск X11. Чтобы поставить необходимые компоненты, можем использовать этот скрипт. В состав входят supervisor, xvfb, fluxbox, x11vnc. Для запуска мы можем перенести файлы run.sh и supervisord.conf в корень, или поправить путь к supervisord.conf в файле run.sh
Если все прошло успешно, то после запуска run.sh терминал выдаст ссылку. Перейдем по ней в браузере. Что-то на подобии your-workspace/vnc.html. Там, нажмем “Connect” и попадем в оконный менеджер fluxbox.
Для установки нам понадобится SikuliX 1.1.1 (версии выше не пробовал), так как в версии 1.1.0 был баг, который не позволял запустить sikuli в фоне. Нам нужно скачать sikulixsetup, возьмем его здесь.
В fluxbox откроем терминал и запустим скачанный файл на установку. У меня было так:
Должно открыться окно с вариантами установки SikuliX.
Я выбрал первый вариант, который установит sikulix.jar, включающий в себя SikuliX IDE. Скрипты, написанные в нем, потом можно будет запустить в терминале без необходимости открывать IDE. Как подпункт я выбрал Python. Вы можете выбрать иной вариант установки, исходя из своих нужд.
На этапе установки Jython возможны проблемы с установкой Jython 2.7.0 (у меня они были, скрипт просто не запускался). Поэтому лучше нажать кнопку “NO” и установить Jython 2.5.4rc1.
Если все прошло успешно, то вы должны увидеть такое всплывающее окно:
Теперь можем запустить IDE. В ней мы будем писать и отлаживать наши скрипты для дальнейшего их запуска в фоновом режиме.
Для примера давайте напишем простой скрипт, который проверяет находится ли хабр в топе выдачи гугла по запросу “как пасти котов”. Включим пользовательские логи и запишем наши действия в файл.
Скрипт написали, отладили.
В процессе отладки в терминал и лог сыпались некоторые ошибки, типа:
Ошибки не критичны и можем их просто игнорировать.
После визуальной отладки можем закрыть fluxbox и перейти в терминал IDE Cloud9.
Запустить скрипт в фоне нам поможет Xvfb (X virtual framebuffer). Это виртуальный X-сервер, который выполняет все графические операции в памяти. Почитать можно тут. Пропишем параметры виртуального экрана, путь к сохраненному проекту, название файла логов и попробуем запустить.
Если все прошло гладко, то в нашем файле логов можно будет прочитать “Success. Habrahabr is in Google's first page”. Профит.
Дальше можно написать небольшое API и запускать наши скрипты/автотесты, например с консоли рабочего компьютера.
Официальный сайт проекта.
Здесь же я опишу свой опыт использования 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.
Установка SikuliX
Для установки нам понадобится SikuliX 1.1.1 (версии выше не пробовал), так как в версии 1.1.0 был баг, который не позволял запустить sikuli в фоне. Нам нужно скачать sikulixsetup, возьмем его здесь.
В fluxbox откроем терминал и запустим скачанный файл на установку. У меня было так:
java -jar sikulixsetup-1.1.1-20151126.001204-18-forsetup.jar
Должно открыться окно с вариантами установки SikuliX.
Я выбрал первый вариант, который установит sikulix.jar, включающий в себя SikuliX IDE. Скрипты, написанные в нем, потом можно будет запустить в терминале без необходимости открывать IDE. Как подпункт я выбрал Python. Вы можете выбрать иной вариант установки, исходя из своих нужд.
На этапе установки Jython возможны проблемы с установкой Jython 2.7.0 (у меня они были, скрипт просто не запускался). Поэтому лучше нажать кнопку “NO” и установить Jython 2.5.4rc1.
Если все прошло успешно, то вы должны увидеть такое всплывающее окно:
Запуск Sikuli IDE
Теперь можем запустить IDE. В ней мы будем писать и отлаживать наши скрипты для дальнейшего их запуска в фоновом режиме.
java -jar sikulix.jar
Пример
Для примера давайте напишем простой скрипт, который проверяет находится ли хабр в топе выдачи гугла по запросу “как пасти котов”. Включим пользовательские логи и запишем наши действия в файл.
Скрипт написали, отладили.
В процессе отладки в терминал и лог сыпались некоторые ошибки, типа:
[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
Если все прошло гладко, то в нашем файле логов можно будет прочитать “Success. Habrahabr is in Google's first page”. Профит.
Что дальше:
Дальше можно написать небольшое API и запускать наши скрипты/автотесты, например с консоли рабочего компьютера.
Источники:
Официальный сайт проекта.
leorush
Жаль что до выхода второй версии ещё очень долго, а альтернатив нет.
Поделюсь своей «шишкой», новичкам будет полезно:
В Sikuli type с русскими символами не дружит.
Поэтому приходится использовать костыль в виде
paste(u"")