Sikuliデモプログラムを作ってみた(準備編)
http://qiita.com/miz21358/items/d301297dcb9d925172f6
Sikuliデモプログラムを作ってみた(設定・起動編)
http://qiita.com/miz21358/items/7462bae80494d49dc392
画面キャプチャTips
ソースコードにもコメントですべて記載しています。
GitHubへのリンクは準備編参照。
アプリケーション限定キャプチャ
ウィンドウ全体のキャプチャ
SCREEN.capture()
特定のアプリケーション領域のみをキャプチャしたい場合、範囲を指定してキャプチャができます。
アプリケーションの特定保持は、設定・起動編参照。
### -------------
# ブラウザのキャプチャを行う
#
def captureBrowser(params):
#ブラウザだけを範囲選択し、キャプチャを行う
#この時点ではテンポラリ等、どこに保存されるかは確実ではない
tmpPath = SCREEN.capture(params.browserReg.getTopLeft().getX(), \
params.browserReg.getTopLeft().getY(), \
params.browserReg.getW(), params.browserReg.getH())
if isinstance(tmpPath, basestring) == False:
# 文字列が取得できてない場合、
# ファイルオブジェクトである可能性があるので、ファイルパスを再取得する
tmpPath = tmpPath.getFile()
logger(u"captureTmpPath={0}".format(tmpPath))
#キャプチャの保存先を取得する
captureDirPath = params.tree.findtext(u'.//capture/path', None)
#キャプチャファイルの画像名を、日時に合わせて修正する
capturePath = u"{0}{1}{2:%Y%m%d-%H%M%S}.png".format(captureDirPath, os.sep, datetime.datetime.now())
logger(u"capturePath={0}".format(capturePath))
#キャプチャファイルを移動する
os.rename(tmpPath, capturePath)
#キャプチャファイルフルパスを返す
return capturePath
params.browserReg … ブラウザアプリケーションの領域(Region)
私の環境では、SCREEN.capture() の return が、キャプチャ画像フルパスの場合と、キャプチャ画像オブジェクトの場合の2パターンが発生しました。
Win7はフルパス、Win10はオブジェクト。OSのバージョンによるのかしら…
なので、パス文字列ではなかった場合、ファイルパスを再取得してます。
SCREEN.capture() した際のキャプチャ画像がどこに置かれるかは、環境に依るようです。
なので、使いやすいところに動かしといた方が後々楽かと思います。