3
0

More than 5 years have passed since last update.

【第3回】より実践的な処理を追加してみよう(イメージテンプレート編集・変数の使用・ログ出力・キーボード操作)

Last updated at Posted at 2018-06-29

はじめに

前回では、ComparetoコマンドとIf...Else文を組み合わせて、HeartCore Roboが停止する状況にも対応する処理を作成しました。

今回は、さらに実践的な処理として
- イメージテンプレートの変更方法
- 変数の使用
- ログ出力
- ロボットによるキーボード操作

について記載します。

事前準備

前回のスクリプトをそのまま使用します。

//Click image template="comp0617-1"
Compareto "comp0617-1" method="search2"

if ({_EXIT_CODE} == 0) {
    Mouse click to=x:{_COMPARETO_CLICK_X},y:{_COMPARETO_CLICK_Y}

} else {
    Exit "1" scope="process" desc="ブラウザアイコンが見つかりませんでした"

}

Report "Results.xml"

イメージテンプレートの変更方法について

HeartCore Robo開発時においては、以前に取得したイメージテンプレートを変更する必要が往々にしてあります。例としては、ディスプレイの解像度を変更した場合や、操作対象のウェブページのレイアウトが変更された場合があります。

以下イメージテンプレートの変更方法手順です。

  1. Compareto...行で右クリック > プロパティを選択
    image.png

  2. プロパティ画面が開く

  3. 操作録画で取得したイメージテンプレート > ”選択したテンプレートを現在のデスクトップイメージに書き換えます“を選択
    image.png

  4. デスクトップ上に下記のバーが表示されて範囲選択モードになります
    image.png

  5. タスクバー上のChromeアイコンをドラッグで選択(白破線で囲まれます)
    image.png

  6. 赤十字はクリックポイント(イメージマッチングした際にマウスがクリックするポイント)となるのでアイコンの中心に配置

  7. 確定(チェック)アイコンをクリック
    image.png

  8. プロパティ画面に戻る

  9. テンプレートイメージが書き換わっている事を確認
    image.png
    テンプレートの下の数字は縦x横のピクセル数を表します

  10. 比較ボタンをクリックしてシミュレーション実行
    image.png

  11. このテンプレートは1回、下記にて見つかりました...」と現れるのでOKをクリック
    image.png
    「検索一致なし」の場合にはステップ3−10.を再度実行

  12. プロパティ画面のOKをクリックして閉じる
    image.png

マッチング処理の高速化テクニック

プロパティ画面上で「比較領域」にチェック > 紫色のアイコンをクリック > デスクトップ範囲選択モードでデスクトップ下部のみを選択すると走査範囲が絞られるため、Chromeアイコンイメージマッチングの処理が早まります。ただし必ず対象物が入るように範囲指定を行う必要があります。
image.png

image.png

image.png

image.png

結果はシミュレーションを行った際の「比較時間」に表示されます。
ここでの例は、処理時間が575ミリ秒から16ミリ秒まで短縮されます。
image.png

image.png

比較領域の絞り込みは今後も使用頻度の高い機能になります。ただし、デスクトップの解像度を変更した場合や、ウェブサイトのレイアウトが変更された場合には対象物が比較領域から外れてしまい、マッチングされなくなる場合があるので留意が必要です。

変数の使用とログ出力について

HeartCore Roboスクリプトではユーザー変数の定義・使用が出来ます。変数についてはFAQページ「変数は定義出来るのか」以下にも記載があるので参照下さい。

ここでは成功・失敗時にロボットから出力させるログの内容を変数で定義してみます。

  1. スクリプトの冒頭に空白行を2行挿入
    image.png

  2. Varを使って変数を宣言 (ここではキーボードでコマンドを直接タイプしていますが右クリック > コマンドを作成 > Timer > Varからでも宣言出来ます)

Var Success="Chromeアイコンが見つかりました"
Var Failure="Chromeアイコンがみつかりません。処理を終了します"
image.png

  1. If文の直下行にログ出力する行を追加 + ログの内容として上記で宣言した変数を中括弧を囲んで使用

    Log {Success}

  2. 併せてElseの直下行にログ出力する行の追加 + ログの内容として上記で宣言した変数を中括弧を囲んで使用

    Log {Failure}

以下スクリプト全文:

Var Success="Chromeアイコンが見つかりました"
Var Failure="Chromeアイコンがみつかりません。処理を終了します" 

//Click image template="comp0617-1"
Compareto "comp0617-1" method="search2"
if ({_EXIT_CODE} == 0) {
    Log {Success}
    Mouse click to=x:{_COMPARETO_CLICK_X},y:{_COMPARETO_CLICK_Y}

} else {
    Log {Failure}
    Exit "1" scope="process" desc="ブラウザアイコンが見つかりませんでした"

}

Report "Results.xml"

image.png

結果を確認してみる

  1. 「実行」をクリック
    image.png

  2. タスクバー内のブラウザアイコンがクリックされてブラウザが起動

  3. 実行ログに「Chromeアイコンが見つかりました」と出力されているのを確認

    Jun 29, 2018 4:09:52 PM INFO: Chromeアイコンが見つかりました (   ファイル:Script1.tpr、行:7: Log {Success})
    image.png

  4. タスクバー内のブラウザアイコンを削除して再度「実行」

  5. 実行ログに「Chromeアイコンが見つかりませんでした」と出力されているのを確認

    Jun 29, 2018 4:18:14 PM INFO: Chromeアイコンがみつかりません。処理を終了します (   ファイル:Script1.tpr、行:11: Log {Failure})
    image.png

Logコマンドについて

Logコマンドは開発者が任意のタイミングで設定出来るため、開発時におけるデバッグ・実行時における結果として使用出来ます。
使用例:
・ 「比較」ボタンを使用した際のマッチング件数・座標等の確認
・ OCR実行結果の確認(読み取れた文字の確認)
・ デバッグ時の変数の値を確認
・ If/Else文においてどちらに分岐したかをトレース...

以降の記事でもLogコマンドは頻出します。

ロボットによるキーボード操作

これまではマウスによるポインタ操作でマッチングした対象物をクリックさせていました。HeartCore Roboはキーボード操作(キーの押下・タイピング)も可能です。以下、キーボードを使用してChrome上でYahooページに遷移させてみます。

(事前準備)
Chrome起動前にHeartCore Roboのキーボード入力処理が開始するのを防ぐためにClick後の待機としてWaitパラメータを追加します。

  1. Mouse clickを右クリック > プロパティ > クリック後の待機 > 3秒を指定 > OKをクリック
    image.png
    注1:Chromeや他のブラウザ起動に3秒以上掛かる端末で実行する場合にはWait値を長くする必要があります
    注2:Wait値を固定にしない方法については別の回で記載します

  2. Mouse clickコマンドにwait=”3s”が追加されたのを確認
    image.png
    Waitはコマンドとして単体行での実行も可能です
    image.png

次に起動したChromeのアドレスバーにURLをペースト&ページ遷移を行います。

  1. Mouse click…の直下空白行 >  右クリック > コマンドを作成 > Imagedoctor > Pressを選択
    image.png

  2. プロパティ画面 > プレスするキー > キーボードでAlt+Dキー(Chromeアドレスバーへのショートカットキー)を押す > Alt+Dがキャプチャされる(キャプチャされない場合には右横の赤丸ボタンをクリック)
    image.png

  3. OKをクリック

  4. Press “Alt+D”コマンドが追加された事を確認
    image.png

  5. Press コマンド行の直下行で右クリック > コマンドを作成 > Imagedoctor > Pasteを選択
    image.png

  6. プロパティ > 貼り付けるテキスト > ”https://yahoo.co.jp”をタイプ
    image.png

  7. OKをクリック

  8. Paste "https://yahoo.co.jp"コマンドが追加された事を確認
    image.png

  9. Paste コマンド行の直下行で右クリック > コマンドを作成 > Imagedoctor > Pressを選択 > Enterキーを押してキャプチャさせる > OKをクリック
    image.png

  10. Press “ENTER”コマンドが追加された事を確認
    image.png

以下スクリプト全文:

Var Success="Chromeアイコンが見つかりました"
Var Failure="Chromeアイコンがみつかりません。処理を終了します" 

//Click image template="comp0617-1"
Compareto "comp0617-1" method="search2"
if ({_EXIT_CODE} == 0) {
    Log {Success}
    Mouse "click" wait="3s" to="x:{_COMPARETO_CLICK_X},y:{_COMPARETO_CLICK_Y}"
    Press "Alt+D"
    Paste "https://yahoo.co.jp"
    Press "ENTER"

} else {
    Log {Failure}
    Exit "1" scope="process" desc="ブラウザアイコンが見つかりませんでした"
}

Report "Results.xml"

結果を確認してみる

  1. 「実行」をクリック
    image.png

  2. タスクバー内のブラウザアイコンがクリックされてChromeが起動

  3. 3秒待つ

  4. Chromeアドレスバーにフォーカスが移り”https://yahoo.co.jp”がペーストされる

  5. Enterが押される事でyahooページに遷移

  6. ロボットの実行が完了
    image.png

その他

Paste "https://yahoo.co.jp"

Type "https://yahoo.co.jp"

と変えて実行してみて下さい。URLの入力方法が「貼り付け方式」から「タイプ方式」となります

まとめ

HeartCore Robo言語は簡素なスクリプトですが、変数(ユーザー変数・システム変数)の使用・ログ出力が可能であり、また部分実行・ブレークポイントの追加も行えるため(別の回で記載します)、開発経験のあるエンジニアの要望にも応えうる効率的な開発が可能です。

また、イメージテンプレートの編集も容易に行えるため、環境が変わった場合でもスクリプトを変える事無く、イメージを取り直すのみでロボットを実行させる事が可能です。

次回について

次回は、ロボット化対象業務の中で最も使用されるExcelの処理方法について解説します。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0