AppleScript
AppleScriptで操作したいアプリの要素を調べる方法

はじめに

今回は、指定したアプリ要素を調べる方法

まずは操作したい箇所の UI element を調べる

AppleScriptを用いて操作を自動化したい場合、scriptを使ってアプリの要素を調べて組み立てる方法がある。Autometer で記録してやる方法のが楽そうだけども、OSが変わったりするとエラーが起きたるするので、基本AppleScriptやpythonなどを使って操作するのが望ましいと思う。

話が少しそれたけれども、今回はテキストエディットで書類ウインドウの上部にある固有のボタンをクリックする方法を例にあげつつ要素を調べる方法をまとめる。とりあえず、テキストエディットで新規書類を作成して、次のようなスクリプトを走らせる。


tell application "System Events"
	tell process "TextEdit"
		every UI element
	end tell
end tell

だいたい、次のような結果を得られる。書類に名前がついている場合は、名称未設定ではなく、つけた名前が入っているはず。必要なのは、window名なので、window "名称未設定" をコピっておく。


{window "名称未設定" of application process "TextEdit" of application "System Events", 
menu bar 1 of application process "TextEdit" of application "System Events", 
UI element 3 of application process "TextEdit" of application "System Events"
}

そしたら、次のようなスクリプトで書類ウインドウのUI elementを調べる。ウインドウ名は先ほどコピったものにする


tell application "System Events"
	tell process "TextEdit"
		tell window "名称未設定"
			every UI element
		end tell
	end tell
end tell

次のような結果を得られる


{scroll area 1 of window "名称未設定" of application process "TextEdit" of application "System Events", button 1 of window "名称未設定" of application process "TextEdit" of application "System Events", button 2 of window "名称未設定" of application process "TextEdit" of application "System Events", button 3 of window "名称未設定" of application process "TextEdit" of application "System Events", menu button 1 of window "名称未設定" of application process "TextEdit" of application "System Events", group 1 of window "名称未設定" of application process "TextEdit" of application "System Events", static text "名称未設定" of window "名称未設定" of application process "TextEdit" of application "System Events"}

が、見づらいので、of window "名称未設定" of application process "TextEdit" of application "System Events" を置換して削除


{scroll area 1 , button 1 , button 2 , button 3 , menu button 1 , group 1 , static text "名称未設定" }

ボタン要素がいくつかあるのがわかるが、これがどれに対応しているのかは、試してみないとわからない。ので、この情報をもとにクリックイベントを走らせる。


tell application "System Events"
	tell process "TextEdit"
		tell window "名称未設定"
			click button 1
		end tell
	end tell
end tell

(多分昔から変わっていないと思うけど)Mojaveでは、ウインドウが閉じる。ので、button 1がウインドウの閉じるボタンだというのがわかる。要素名が定まっていない場合は、総当たりで調べていくしかない。次に group 1 の要素を調べてみる


tell application "System Events"
	tell process "TextEdit"
		tell window "名称未設定"
			tell group 1
				every UI element
			end tell
		end tell
	end tell
end tell

そうすると、次のような結果を得られる(of group 1 of window "名称未設定" of application process "TextEdit" of application "System Events" をすでに置換済み)


{menu button "¶" , pop up button 1 , pop up button 2 , combo box 1 , color well 1 , color well 2 , group 1 , radio group 1 , pop up button 3 , menu button 2 }

menu button "¶" とあるので、テキストエディット固有のメニューのことだとわかる。なので、次のようにして試してみる


tell application "System Events"
	tell process "TextEdit"
		tell window "名称未設定"
			tell group 1
				click menu button "¶"
			end tell
		end tell
	end tell
end tell

一番左のボタンがクリックされて、"¶"が出てくる。こうすると自分が作成したものでなくともアプリの要素を調べて操作することができる。

今回はあくまで要素を調べる方法なので、リストから選択する方法や、特殊なボタンの選択方法などは別の記事にまとめる。