2013/05/13

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

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

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

クリップボードの取得

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

1
2
3
4
5
from java.awt import Toolkit
from java.awt.datatransfer import Clipboard
 
toolkit = Toolkit.getDefaultToolkit()
clipboard = toolkit.getSystemClipboard()

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

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

1
2
3
4
from java.awt.datatransfer import DataFlavor
 
contents = clipboard.getContents(None)
text = contents.getTransferData(DataFlavor.stringFlavor)

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

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

1
2
3
from java.awt.datatransfer import StringSelection
 
clipboard.setContents(StringSelection(""), None)

サンプルコード

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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 件のコメント:

コメントを投稿

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