それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Safariの自動操縦 (JXA: JavaScript for OSX Automation)

前回のハローワールド

JavaScriptでハローワールドして、とりあえずメッセージの送って遊びました。

AppleScript のJavaScriptでハローワールド - それマグで!

メッセージ.app でバンバン

AppleScript のJavaScript版 JXAで、起きない友達をバンバンする - それマグで!

今回は、ちゃんとまともに使える作業をしていきたいと思います。

Safariの自動化

スクレーパーを書くのもHeadlessなPhantomJSも、Seleniumも面倒なときはSafariIEの自動化で済ませたほうが楽な時があります。

PhantomJSとかコールバック地獄で素で書くの苦行だったのでもう使ってない。

Safariウェブサイトにアクセス(by JavaScript for OSX automation)

Safariを起動して、特定サイトにアクセスします。

app = Application('Safari')
app.includeStandardAdditions = true
app.activate()

var tab = app.windows[0].tabs[0]
tab.url = "http://pixiv.net"

これで、Safariを起動してサイトが開きます。

Pixivが開きました。

13

上手くいかない時は、ほんの少しだけウエイトをかけて、Safariの起動を待ちをしてみます。

app = Application('Safari')
app.includeStandardAdditions = true
app.activate()

delay(0.3)// 若干のスパイス

var tab = app.windows[0].tabs[0]
tab.url = "http://pixiv.net"

次に次に、サイトを切り替えてみます。

app = Application('Safari')
app.includeStandardAdditions = true
app.activate()

var tab = app.windows[0].tabs[0]

tab.url = "http://mixi.jp"
delay(3.0)
tab.url = "http://pixiv.net"
delay(3.0)
tab.url = "http://twitter.com"

ほとんどのサイトは2秒以内に表示されるので、3秒程度のウエイトを入れると上手く動きます。

ページの自動更新

今見ているページを自動更新したい時があります。

スポーツを見ていたり、プログラムをから送信したデータの反映待ちをするなど、自動更新って結構便利に使えます。

app = Application('Safari')
app.includeStandardAdditions = true
app.activate()
delay(1.0)
var tab = app.windows[0].tabs[0]

while(true){
  tab.url = "http://twitter.com/"
  delay(5.0)
}

Safariを自動化するとスクレーパー書かずにすみます。

SafariIEをパパっと自動化出来ると、省力化出来て便利です。

次回は、delay(3.0)でロード待ちをしていたところ、ちゃんとページロードを待つようにしたいと思います。

備考

この記事はJAXのアドベントカレンダーの2日目として書きました。