2013/05/13

Sikuliからクリップボードの内容を操作する

Sikuliからクリップボード (ペーストボード) の内容を操作したかったので調べてみました。

Stack Overflowによると、Java AWT経由でクリップボードを操作すればよいみたいです。

クリップボードの取得

文字列の取得と文字列のセットのどちらの場合でも、まず始めにクリップボード自体を取得する必要があります。

from java.awt import Toolkit
from java.awt.datatransfer import Clipboard

toolkit = Toolkit.getDefaultToolkit()
clipboard = toolkit.getSystemClipboard()

クリップボードから文字列を取得する

クリップボードの取得後に次のコードを実行するだけです。

from java.awt.datatransfer import DataFlavor

contents = clipboard.getContents(None)
text = contents.getTransferData(DataFlavor.stringFlavor)

クリップボードに文字列をセットする

クリップボードの取得後に次のコードを実行するだけです。

from java.awt.datatransfer import StringSelection

clipboard.setContents(StringSelection(""), None)

サンプルコード

次のコードは、Chromeの一番左のタブから5つのタブからURLを抜き出し、その中のhttpsのものをクリップボードにセットします。

from java.awt import Toolkit
from java.awt.datatransfer import Clipboard
from java.awt.datatransfer import DataFlavor
from java.awt.datatransfer import StringSelection

app = App('Chrome.app')
app.focus()
win = app.window(0)

win.type('1', KeyModifier.CMD)

urls = []
for i in range(5):

    win.type('l', KeyModifier.CMD)
    win.type('c', KeyModifier.CMD)

    toolkit = Toolkit.getDefaultToolkit()
    clipboard = toolkit.getSystemClipboard()
    contents = clipboard.getContents(None)
    url = contents.getTransferData(DataFlavor.stringFlavor)

    if url[:8] == 'https://':
       urls.append(url)

    win.type(Key.RIGHT, KeyModifier.CMD | KeyModifier.ALT)

clipboard.setContents(StringSelection('\n'.join(urls)), None)

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。