24 May 2014, 06:18

Sikuli, Selenium, WSH, 3つの自動化ツールでGoogle検索自動化に挑め!

はじめに

前回、Sikuliの使い方を調べてみました。

今回は、Sikuliと別のツールを組み合わせてみます。前回記事の続編です。

やること

以下の手順を自動化します。

  1. firefoxを立ち上げる
  2. 検索窓にSikuliと入力する
  3. 検索ボタンをおす

以下のツールを利用します。

  • Sikuli … 画像認識による自動化ツール
  • Selenium … HTML解析による自動化ツール
  • WSH … キー操作の自動化ツール

なんだか、ヨットに対して戦車と軍艦と戦闘機で総攻撃をかけるような感じになってきた。

使う手段

JRubyです。以下を利用。

  • win32ole
  • sikulixapi
  • selenium-webdriver

win32oleはデフォルトで入っている。sikuliは前回記事を参照。

selenium-webdriverは、jgem install selenium-webdriverで問題なくインストール。

結果

自動化がキマるとけっこうきもちいい。

24 May 2014, 05:11

画像認識でアプリケーション操作の自動化を実現!Sikuliがあまりに革命的で興奮した

はじめに

アプリケーションの自動操作をスクリプトで実現するために、Sikuliを調べてみました。

Sikuliとは

Sikuliとは、

  • OpenCVをつかった画像認識
  • OCRをつかった文字認識

で、アプリケーションの自動操作を実現するためのツール、スクリプト言語。

Javaで実装されているため、JVM上で動作するスクリプト言語から利用できる。

スクリプト編集のためのIDEは、 画像とプログラム言語を合わせて表示できるという、革命的なソフトウェア。 久々に、スゴイ!とおもったソフトウェアだ。

インストール

sikuli-setup.jarをダウンロードして、インストーラをダブルクリックで起動するだけ。

すると、いろいろとインストールオブションがきかれる。JRubyを選択。

slkulix.jarをダブルクリックで起動。IDEが立ち上がる。

インストールは、以下のドキュメントが詳しい。

WinUtil.dllが見つからないエラーではまる

<div class="outline-text-3" id="text-3-1">
  <p>
    runsikulix.cmdで起動するとエラーした。
  </p>

  <div class="org-src-container">
    <pre class="src src-sh">[error] ResourceLoader: loadLib: Fatal Error 110: loading: WinUtil.dll

[error] ResourceLoader: loadLib: Since native library was found, it might be a problem with needed dependent libraries C:\sikuliX\libs\WinUtil.dll: 指定されたプロシージャが見つかりません。ﴀ＀ [error] ResourceLoader: loadLib: Check, wether a valid Sikuli libs folder is in system path at runtime!

  <p>
    よくわからないのだが、環境変数のパスを通して(C:)、JDK 7 を最新版にしたらなおった。
  </p></p>
</div></p>

Hello Sikuli

以下のようなコード。

App.open("notepad.exe")
  
find("1400849474303.png")
  
type("Hello Sikuli!!")

<p>
  <a href="https://picasaweb.google.com/lh/photo/lRDJ9IcUEEb0SOkEeZUtAjyD6hjDXGH6XyE6iLrzolo?feat=embedwebsite"><img src="https://lh6.googleusercontent.com/-MTSQnqO-6L8/U4AlKQuYAII/AAAAAAAABEI/aW-X9CjdRYo/s800/HelloSikuli.png" height="137" width="307" /></a>
</p>

<p>
  実行結果はこんな感じ。驚きの結果である。
</p>

<p>
  <iframe width="420" height="315" src="//www.youtube.com/embed/SoN_zfuG1E8?rel=0" frameborder="0" allowfullscreen></iframe> </div>
</p>

実行ファイルから実行する

<div class="outline-text-2" id="text-5">
  <p>
    もちろん、IDE を経由しないでコマンドラインから実行できる。
  </p>

  <p>
    ツールバーのファイルから実行ファイルとしてエクスポートを選択。 .skl拡張子のバイナリファイルができる。(ここではtest.skl) なかみは、たんなるzipだったりする。
  </p>

  <p>
    runsikulix.cmdの引数として、.sklを渡す(注意: 1.1からの仕様)
  </p>

  <div class="org-src-container">
    <pre class="src src-language">E:\test&gt;C:\sikuliX\runsikulix.cmd -r test.skl

  <p>
    これで、コマンドラインから実行できた。
  </p></p>
</div></p>

Rubyから実行する

<div class="outline-text-2" id="text-6">
  <p>
    Sikuliの素晴らしいところは、JVM上で動作スクリプト言語を利用できる。
  </p>

  <p>
    JPython, JRubyとか。つまりは、Rubyが使える!
  </p></p>
</div>

<div id="outline-container-sec-6-1" class="outline-3">
  <h3 id="sec-6-1">
    IDEで Rubyをつかう
  </h3>

  <div class="outline-text-3" id="text-6-1">
    <p>
      保存フォルダをのぞくと、たんなる.rbファイルがある。 IDEから実行すると、Lib配下にあるsikkulix.rbがrequireされるようだ。 ようするに、rubyの文法をつかってかけるということ。
    </p>

    <p>
      たとえば、さっきのHelloSikuliをメソッド化してみる。
    </p>

    <div class="org-src-container">
      <pre class="src src-language">def hello

App.open(“notepad.exe”)

find(“1400849474303.png”)

type(“Hello Sikuli!!”) end

hello()

    <p>
      すごい。
    </p></p>
  </div></p>
</div>

<div id="outline-container-sec-6-2" class="outline-3">
  <h3 id="sec-6-2">
    Ruby scriptとしてつかう
  </h3>

  <div class="outline-text-3" id="text-6-2">
    <p>
      Sikuli IDEでは、実行時にsikkulix.rbを読み込んでいろいろやっているようなので、 このファイルに書いてあることを真似すると、純粋なrubyとして実行できる。
    </p>

    <blockquote>
      <p>
        But be aware: Since the interpreters used are based on Java, the modules available for Python or Ruby might not be available in the Jython or JRuby environment. So before trying to use any non-standard modules or extension packages, you have to check, wether they are supported in this SikuliX environment.
      </p>
    </blockquote>

    <p>
      Java APIを JRubyを経由して呼び出すため、 JRubyのちからを借りる。以下のガイダンスに従う。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://sikulix-2014.readthedocs.org/en/latest/faq/030-java-dev.html">How to use SikuliX API in your JAVA programs — SikuliX 1.1+ documentation</a>
      </li>
    </ul>
  </div></p>
</div>

<div id="outline-container-sec-6-3" class="outline-3">
  <h3 id="sec-6-3">
    JRubyをインストール
  </h3>

  <div class="outline-text-3" id="text-6-3">
    <p>
      以下から、インストール。インストールしたら、binフォルダにパスを通す。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://jruby.org/">Home — JRuby.org</a>
      </li>
    </ul>

    <p>
      実行は、jrubyコマンドで実行。
    </p></p>
  </div></p>
</div>

<div id="outline-container-sec-6-4" class="outline-3">
  <h3 id="sec-6-4">
    sikulixapi.jarをクラスパスに追加
  </h3>

  <div class="outline-text-3" id="text-6-4">
    <p>
      sikulixapi.jarのなかに、sikuliを制御する処理が入っているので、ここにクラスパスを通す。
    </p>

    <div class="org-src-container">
      <pre class="src src-language">require 'java'

$CLASSPATH << ‘C:\sikuliX\‘ require ‘sikulixapi.jar’

<div id="outline-container-sec-6-5" class="outline-3">
  <h3 id="sec-6-5">
    必要なSikuliクラスをimport
  </h3>

  <div class="outline-text-3" id="text-6-5">
    <p>
      つづいて、必要なクラスをインポートする。
    </p>

    <div class="org-src-container">
      <pre class="src src-language">java_import "org.sikuli.script.Screen"

    <p>
      あとは、一生懸命書くだけだ。なんどでも思う、これはスゴイ。
    </p></p>
  </div></p>
</div>

<div id="outline-container-sec-6-6" class="outline-3">
  <h3 id="sec-6-6">
    結果
  </h3>

  <div class="outline-text-3" id="text-6-6">
  </div></p>
</div>

<div id="outline-container-sec-6-7" class="outline-3">
  <h3 id="sec-6-7">
    Environment
  </h3>

  <div class="outline-text-3" id="text-6-7">
    <ul class="org-ul">
      <li>
        windows 7 64bit
      </li>
      <li>
        JDK 7 64bit
      </li>
      <li>
        JRuby 1.7.12
      </li>
    </ul>
  </div></p>
</div>

<div id="outline-container-sec-6-8" class="outline-3">
  <h3 id="sec-6-8">
    Special Thanks
  </h3>

  <div class="outline-text-3" id="text-6-8">
    <p>
      Official
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.sikulix.com/">SikuliX powered by RaiMan &#8211; Home</a>
      </li>
    </ul>

    <p>
      Java Doc
    </p>

    <ul class="org-ul">
      <li>
        <a href="https://dl.dropboxusercontent.com/u/42895525/docs/index.html">https://dl.dropboxusercontent.com/u/42895525/docs/index.html</a>
      </li>
    </ul>

    <p>
      Document
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://sikulix-2014.readthedocs.org/en/latest/index.html">Sikuli / SikuliX Documentation for version 1.1+ (01/2014 and later) — SikuliX 1.1+ documentation</a>
      </li>
    </ul>

    <p>
      よくまとまっている日本語のまとめ
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://safx-dev.blogspot.jp/2013/02/sikuliui.html">Safx: SikuliスクリプトでのUI操作自動化を試してみる</a>
      </li>
      <li>
        <a href="http://hontech.xii.jp/blog/archives/28">sikuliの簡単な使い方 | hontech</a>
      </li>
      <li>
        <a href="http://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:sikuli">Sikuli KamonoWiki</a>
      </li>
    </ul>

    <p>
      Ruby関連
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://blackrat.org/ruby/getting-sikuli-script-working-with-jruby-on-the-mac/">Getting Sikuli Script working with Ruby(JRuby) on the Mac | blackrat.org</a>
      </li>
      <li>
        <a href="https://answers.launchpad.net/sikuli/+question/221083">Question #221083 : Questions : Sikuli</a>
      </li>
      <li>
        <a href="http://www.software-testing.com.au/blog/2010/08/16/automating-flash-ajax-popups-and-more-using-ruby-watir-and-sikuli/">Automating Flash, AJAX, Popups and more using Ruby, Watir and Sikuli | Illiteration –</a>
      </li>
    </ul>
  </div></p>
</div></p>

19 Sep 2012, 23:32

速聴自動化!UWSCで速聴変換をオートメーションしてみる

前回の続き。

クラウド速聴!フリーソフト『Lilith』でNHKニュースを3倍速で聴いてみる。

NHKニュースの速聴変換はルーチンワークなので、速聴変換を自動化してみた。

以下のサイトを参考にしました。

マウス、キーボードの自動操作: 高速再生ニュースの薦め

 

 

 

 

使用したのは、UWSCというフリーソフト。PC操作を記録して、再生できるソフトだ。

UWSC 窶錀 Vector

前回のエントリで紹介した一連の操作を、記録機能で記録して、マクロとして保存。

あとは、それを実行すると、自動で速聴変換済みの音声ファイルが

クラウド上にアップロードされる。