STORES やなんかもそうなんですが、意外とかゆいところに手が届きません。
Yahoo! Auctions なども、API で出品できるようにするといっていたのですが、問い合わせたら、できなくなりました、ということなので、ブラウザの側をスクリプトで制御して、決まった動作を(半)自動化しているのですが、今までは AppleScript で行っていたので、AppleScript と JavaScript、更に shell とのちゃんぽんだったわけです。
別に動いているものを特に書き換えるつもりもないのですが、最近覚えるよりも忘れるほうが早いので、なるべく単一の言語でやりたい、というのがありまして、重い腰を上げて JXA なるものを初めてみました。
というわけで、かなりの人にどうでもいいネタだと思いますが、備忘録として。
Imperia Online という村ゲーをしているのですが、これの特定の村を表示するスクリプトを書いてみました。
いや、ブックマークが 20 件までしか登録できないので、不便なので。
function run(argv) { se = Application('System Events'); if (se.uiElementsEnabled()) { app = Application('Safari'); app.includeStandardAdditions = true; //app.activate(); //delay(1); // waiting for competition of ativatation // search Imperia Online Document world = null; for (i = 0; ! world && i < app.windows().length; ++i) { for (j = 0; j < app.windows[i].tabs().length; ++j) { console.log(app.windows[i].tabs[j]); if (app.windows[i].tabs[j].url().match(/imperiaonline/)) { world = app.windows[i].tabs[j]; break; } } } if (!world) { return; } try { app.doJavaScript("xajax_switchVillageToGlobalMap('global-map-window', {x: 1701, y: -614})", {in:world}); } catch (e) { console.log(e); } } else { with (Application('System Preferences')) { pane = panes.byId('com.apple.preference.security'); pane.anchors['Privacy_Accessibility'].reveal(); activate(); } } }
参考にしたのは、この辺り。
動作的には、Safari のすべてのウインドウを取得して、ウインドウの中にぶら下がっているすべてのタブを巡回し、URL をマッチして目的のタブを調べる、という部分、あとは、そこで取得したタブに対して、JavaScript を実行する、という部分で成り立っています。
例えば、Yahoo! Auctions で発送作業をしようと思った時など、発送情報が開かれているタブと、クリックポストの発送入力画面が開かれているタブと、その両方を取得して、それぞれで doJavaScript をすれば、通常できないクロスサイト・スクリプティングが簡単に可能になり、スクリプトメニューにそういうよく使うスクリプトは登録しておくこともでき、また、所詮はスクリプトですから、サイト側のデザイン変更などにも容易、かつ、迅速に対応ができるわけです。
ところで、今のところのハマっている部分。
いちいちエラー画面を出すのがイヤなので、通常は、say を使って喋らせているんですが、うまくいかないんですよね。
多分、Accessibility の権限設定が間違えているんだと思うんだけど。
こちらで参考にしたのは、openspc。
一体何年お世話になりっぱなしなんだろう。
にほんブログ村 ライフスタイルブログ 薪ストーブ暮らしに参加しています。 励みになりますので、足あとがわりに、ランクアップにご協力下さい。 |