MavericksのAutomatorで”Applescriptを実行”で click at命令が実行不可に

MavericksのAutomatorで"Applescriptを実行”アクションに以下をいれ


on run {input, parameters}

set bounds of window 1 of application "Safari" to {0, 0, 1023, 747}

tell application "Safari" to activate

delay 0.5

tell application "System Events"

tell process "Safari"

click at {1, 1}

delay 0.5

end tell

end tell

end run


実行すると

”構文エラー

System Events でエラーが起きました:{800, 310} のタイプを list に変換できません。”

とでます。


ちなみにApplescript エディタでは

error "System Events でエラーが起きました:{1, 1} のタイプを list に変換できません。" number -1700 from {1, 1} to list

です。



10.6ではちゃんと動きますので、原因が良くわかりません。


触りだして数時間でいま気づいたけど、System Events.app自体がMavericksに無いから、動かないのかぁ?

10.9のシステム/ライブラリ/CoreService/System Events.appが探せない。

ちなみに、セキュティで上記をアプリ登録して、GUI Scriptingの許可はしてます。

#iPhotoも1500円出して買ったのに…Automatorの代用できるモノのスキル無いので、づっと10.6でいくかぁ。。

MacBook, Mac OS X (10.6.8), MC516J/A 増設RAM+2GB (Mid 2010)

投稿日 2013/11/09 05:06

返信
返信: 38

2013/11/11 16:28 お子様ランチ. への返信

別の方法を使った click at です。Snow Leopard では動きます (とても遅いです...) が、Mavericks では全く分かりません。動かなくても修正できないので、どうしようか迷いましたが、とりあえず情報ということで投稿します。もしこれで大丈夫なら、マウスの位置を取得するやつも書き込みます。


使い方はこんな感じ。

my click_at(x座標, y座標)


# Automator - AppleScript を実行



tell application "Safari" to activate my click_at(1, 1) on click_at(x, y)     set py01 to "import sys;"     set py02 to "from Quartz.CoreGraphics import *;"     --     set py03 to "x = float(" & x & ");"     set py04 to "y = float(" & y & ");"     --     set py05 to "p1 = CGPointMake(" & x & ", " & y & ");"     set py06 to "e1 = CGEventCreateMouseEvent(None, 1, p1, 0);"     set py07 to "CGEventPost(0, e1);"     --     set py08 to "p2 = CGPointMake(" & x & ", " & y & ");"     set py09 to "e2 = CGEventCreateMouseEvent(None, 2, p2, 0);"     set py10 to "CGEventPost(0, e2);"     --     set code to py01 & py02 & py03 & py04 & py05 & py06 & py07 & py08 & py09 & py10     --     do shell script "python -c " & quoted form of code end click_at


お書きのとおり、Safari の操作は do JavaScript でも GUI スクリプティング (UI Elements を使ったやつ) でもできますが、かなり面倒です。どの方法も、サイトがリニューアルした際の誤動作のリスクがあるので、その辺にも注意しながらワークフローを拵えてください。


思いどおりのものができるといいですね。

2013/11/11 19:12 お子様ランチ. への返信

度々、失礼致します。 システム環境設定のキーボード>ショートカットで、『フルキーボードアクセス』の適応範囲を『すべてのコントロール』に設定した場合、 Twitterのテキスト入力画面(https://twitter.com/intent/tweet?source=webclient&text=)でテキスト領域にカーソルが表示された状態で、Tabキーを押すと、テキスト領域が選択された状態から、Tweetボタンなどが選択された状態に変わります。 その状態で、リターンキーを押すと、Twitterへの投稿が行われると思います。 なので、Systeme EventsのKeystrokeコマンドでタブキーとリターンキーを押す操作を行えば、クリックと同様の処理が可能なのではないでしょうか(下図)?

ユーザがアップロードしたファイル

2013/11/11 19:25 Hiro__S への返信

こんな感じで、できました。

tell application "Safari" to activate

set bounds of window 1 of application "Safari" to {0, 0, 1000, 500}


my click_at(610, 400)


on click_at(x, y)

set py01 to "import sys;"

set py02 to "from Quartz.CoreGraphics import *;"

--

set py03 to "x = float(" & x & ");"

set py04 to "y = float(" & y & ");"

--

set py05 to "p1 = CGPointMake(" & x & ", " & y & ");"

set py06 to "e1 = CGEventCreateMouseEvent(None, 1, p1, 0);"

set py07 to "CGEventPost(0, e1);"

--

set py08 to "p2 = CGPointMake(" & x & ", " & y & ");"

set py09 to "e2 = CGEventCreateMouseEvent(None, 2, p2, 0);"

set py10 to "CGEventPost(0, e2);"

--

set code to py01 & py02 & py03 & py04 & py05 & py06 & py07 & py08 & py09 & py10

--

do shell script "python -c " & quoted form of code

end click_at


さすがです。有り難うございました。

2013/11/11 19:36 T22T への返信

えぇ、Twitterではこれができるのは、知って試したことありました。


けどアメーバなうの方はtwitterのようにシンプルじゃないので、この手tab移動が毎回違うバナー広告表示がトラップになって作動しないことがままあり、結局、座標指定に固執してしまった次第です。

2013/11/11 19:55 お子様ランチ. への返信

追記

スピードはMavericksでも同じくらいの速さでした。

同じ文を投稿できればいいので、これで十分ありがたいです。


twitter なう 同時投稿 で検索すれば http://goo.gl/hPXnGg アメーバなうとtwitterへの同時投稿サービスも見つかるのですが、二つのアカウントを入力しないといけないようなので、Automatorにやらせたいなと思ってやっとできてしばらくしてMavericksで試すと動かないので愕然としてましたが助かりました。

2013/11/11 20:36 お子様ランチ. への返信

動きましたか。良かったです。T22T さんのワークフローと組み合わせるとなんとなくカタチになりそうですね。


以下はマウスの位置を取得する AppleScript です。別スクリプトで補助用としてお使いください。


my get_mouse_position() on get_mouse_position()     set py01 to "from Quartz.CoreGraphics import *;"     set py02 to "e = CGEventCreate(None);"     set py03 to "p = CGEventGetLocation(e);"     set py04 to "print str(p.x)+'\\n'+str(p.y);"     --     set code to py01 & py02 & py03 & py04     --     do shell script "python -c " & quoted form of code     --     return {x:paragraph 1 of result as real, y:paragraph 2 of result as real} end get_mouse_position


スクリプトの結果はこんな感じになります。

{x:610.0, y:400.0}


この結果を基に my click_at(x座標, y座標)。


指定方法は my click_at(610.0, 400.0) でも my click_at(610, 400) でも大丈夫です。

2013/11/11 21:19 お子様ランチ. への返信

皆さんのおかげで、なうとtwitterの同文投稿がMavericksでできるようになりました。


以下参考までに載せておきます。

ユーザがアップロードしたファイル

全体像としては、こうなりました。


最初から説明しますと

ユーザがアップロードしたファイル

変数(テキスト)はテキスト入力されたものです。

変数(アメーバなう)はhttp://now.ameba.jp/?entryText=(テキスト)が代入されてます。

これはT22T氏のご教示の通りです。

ユーザがアップロードしたファイル

次に

ユーザがアップロードしたファイル

ここは、Hiro.S氏が作られた部分です。

tell application "Safari" to activate

set bounds of window 1 of application "Safari" to {0, 0, 1000, 500}

↑この部分は私の環境に合わせ画面をリサイズさせてます。

my click_at(610, 400)

↑ここも私の画面サイズに合わせてます。

on click_at(x, y)

set py01 to "import sys;"

set py02 to "from Quartz.CoreGraphics import *;"

--

set py03 to "x = float(" & x & ");"

set py04 to "y = float(" & y & ");"

--

set py05 to "p1 = CGPointMake(" & x & ", " & y & ");"

set py06 to "e1 = CGEventCreateMouseEvent(None, 1, p1, 0);"

set py07 to "CGEventPost(0, e1);"

--

set py08 to "p2 = CGPointMake(" & x & ", " & y & ");"

set py09 to "e2 = CGEventCreateMouseEvent(None, 2, p2, 0);"

set py10 to "CGEventPost(0, e2);"

--

set code to py01 & py02 & py03 & py04 & py05 & py06 & py07 & py08 & py09 & py10

--

do shell script "python -c " & quoted form of code

end click_at

2013/11/11 21:30 お子様ランチ. への返信

ユーザがアップロードしたファイル

ここはなうとtwitterは同じことを繰り返しているだけです。

ユーザがアップロードしたファイル

tell application "Safari" to activate

set bounds of window 1 of application "Safari" to {0, 0, 1144, 720}

end


これは、最初に画面をリサイズしたので元に戻す作業で、これも環境によって違うと思います。

だいたいこんな感じでできました!

あとは、使って修正したいと思います。

2013/11/12 03:20 Hiro__S への返信

すみません。よく見たら微妙に間違ってました。差し替えてください。


[訂正版]

tell application "Safari" to activate my click_at(1, 1) on click_at(x, y)     set py01 to "import sys;"     set py02 to "from Quartz.CoreGraphics import *;"     --     set py03 to "x = float(" & x & ");"     set py04 to "y = float(" & y & ");"     --     set py05 to "p1 = CGPointMake(x, y);"     set py06 to "e1 = CGEventCreateMouseEvent(None, 1, p1, 0);"     set py07 to "CGEventPost(0, e1);"     --     set py08 to "p2 = CGPointMake(x, y);"     set py09 to "e2 = CGEventCreateMouseEvent(None, 2, p2, 0);"     set py10 to "CGEventPost(0, e2);"     --     set code to py01 & py02 & py03 & py04 & py05 & py06 & py07 & py08 & py09 & py10     --     do shell script "python -c " & quoted form of code end click_at

2013/11/20 03:52 お子様ランチ. への返信

MavericksのGUI Scriptingのclick命令にバグ

http://piyocast.com/as/archives/2732


やはりバグのようですね。Apple にフィードバックしてはどうでしょうか?


ーーーーー


それと、Mavericks には ruby 1.8 系も入ってるようなので、自前の click at は下記でも大丈夫かもしれません。こちらの方が格段に速いと思います。動けば、の話ですが...。


動作確認してもらえるとうれしいです。


# Automator - AppleScript

my click_at(1, 1) on click_at(x, y)     set ruby to "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby"     --     set rb01 to "require 'osx/cocoa';"     set rb02 to "include OSX;"     --     set rb03 to "x = " & x & ";"     set rb04 to "y = " & y & ";"     --     set rb05 to "p1 = CGPointMake(x, y);"     set rb06 to "e1 = CGEventCreateMouseEvent(nil, 1, p1, 0);"     set rb07 to "CGEventPost(0, e1);"     --     set rb08 to "p2 = CGPointMake(x, y);"     set rb09 to "e2 = CGEventCreateMouseEvent(nil, 2, p2, 0);"     set rb10 to "CGEventPost(0, e2);"     --     set code to rb01 & rb02 & rb03 & rb04 & rb05 & rb06 & rb07 & rb08 & rb09 & rb10     --     do shell script ruby & " -e " & quoted form of code end click_at

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

MavericksのAutomatorで”Applescriptを実行”で click at命令が実行不可に

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。