GUIを自動で操作するフリーツール:SikuliX ですが、単にGUIの自動化というだけではなく、ソースコード上でパスの指定やコピー操作を行うことができます。バッチファイルやコマンドプロンプトで同様の操作を行うのと同じことができると思って下さい。
本記事では、パス指定の行い方について記載します。
パスの指定方法
パスの指定をしてみましょう。以下はPythonで「C:\sample\dir」のフォルダー内に存在する「ファイル」「フォルダ」のリストを表示させるコードを書いたとしましょう。
import os
print(os.listdir(‘C:\sample\dir\’))
これを実行すると、以下のエラーが表示されます。
[error] SyntaxError ( “no viable alternative at input ‘\\n'”, )
これは、円マーク(バックスラッシュ)をエスケープシーケンスと捉えられてしまうためです。そのため、Pythonのソースコード上ではWindowsでのパスをそのまま使用することはできません。これを回避するためには、以下のいずれかの方法を行う必要があります。
エスケープシーケンスの「\」を重ねる
以下のように、「\」を追加します。
import os
print(os.listdir(‘C:\\sample\\dir\\’))
「\」を「/」に置き換える
以下のように、Pythonのパスの表記に変更します。
import os
print(os.listdir(‘C:/sample/dir/’))
raw文字列を利用する
raw文字列を使用すると、「\」を1つの文字として扱うようになります。そのため、エスケープシーケンスと判断されることはなくなります。コード上では、「r」もしくは「R」を利用して以下のように記載します。
import os
print(os.listdir(r’C:\sample\dir’))
import os
print(os.listdir(R’C:\sample\dir’))
ただし、raw文字列を使用する際は、注意点があります。
それは、文字列の最後に「\」を使えないということです。使った場合は、先述のエラーが表示されることになります。もし使いたい場合は、以下のように記載すると良いでしょう。エスケープシーケンスを使用して記載された文字列と連結させる方法です。
import os
print(os.listdir(r’C:\sample\dir’+’\\’))
どの方法が良いのか?
ここで、実際にどの方法を使用するのが、良いのか?ということを考えるかもしれません。
エスケープシーケンスの方法ですと、「\」の数が多ければ多いほど誤記が発生するかもしれません。確認する際も苦労することでしょう。また、「誰にでも簡単に利用できるように」ということを考えれば、コードに不慣れな場合はこの点は特に欠点になるかもしれません。一番楽なのは、一括変換などで「\」を「/」に置き換えることかもしれません。慣れてきたら、raw文字列を使う方法が良いと思います。
まとめ
いかがでしたでしょうか?
「画像で判定する」ということは、環境が変わることで、画像の認識が正確に行われないこともあるということです。例えば、「解像度などが異なる環境」「ブラウザの表示倍率が設定の画像と異なる環境」「対象のツールのUIが変更された場合」などです。実際に動かしている時に、これらの環境下で認識されなくなることがありました。
SikuliXを使うからと言って、全てGUI操作で解決しようとしていませんか?GUIを使わなくても済むケースも多々あると思っています。SikuliXはPythonの構文が使用できます。ということは、PythonのコードでできることはGUIを操作しなくてもコードのみで解決できる可能性があるとも言えます。視野を広げてGUIで行うべきものとソースコード上で行ってしまうものを使い分けると、面白いかもしれません。SikuliXは画像認識で自動化できる便利なものですが、その反面、画像認識で失敗した時は意図したとおりに動きません。単にGUI操作の自動化ツールというだけではなくて、ぜひ色々な使い方を模索してみて下さい。