Safariで表示中のWebコンテンツの表示範囲の座標を取得するAppleScriptです。
Webブラウザに対するAppleScriptの処理といえば、
(1)表示中のURLを取得して処理
(2)表示中のコンテンツにJavaScriptを実行したりGUI Scripting経由で操作(特定要素をカウントしたりFormに値を入れたりボタンを押したり)
(3)表示中のHTMLソースを取得して処理
(4)Webブラウザそのものの環境情報(Bookmarkや履歴など)にアクセスして処理
(5)選択中のテキストを取得して処理
(6)テキストを選択しておいて、その内容が該当する要素を抽出
といった操作を行ってきました。
(1)は、Webブラウザで表示中のURLを他のプログラムで処理する場合などに便利な、基礎的な処理です。
(2)は、ロボット的なScriptにありがちな、メニューの奥深く(URLで一発オープンが無理なログインを要求される構造のWebサイトとか)にあるデータを定期的に取得するような処理によく使います。
(3)は、(1)の延長線上にあるもので、HTMLReaderなどのHTMLそのものを解釈して処理できる高機能フレームワークと組み合わせてWebスクレイピングを行うものです
(4)は、書いてあるとおりブックマークや履歴などにアクセスして統計処理を行なったりしています。
(5)は、ちょっとした調べ物や翻訳などを行いたい場合に使っています。
(6)は、(3)の処理を行いたいが、処理対象の要素(表など)が複数あるので、どの要素なのか特定するための補助情報としてテキスト選択を要求するものです。
このうち、(6)に該当する処理が現状だといまひとつです。Webブラウザ上でテキストを選択しておく必要があるというのでは使い勝手がよくありません。
Webコンテンツのうち、Webブラウザ上で表示中の要素を取得するようなやり方であれば、その方が使い勝手がよいことでしょう。Wikipedia上の表データを使いまわしたいが、対象ページ上に表が複数あるので、いま現在Webブラウザのウィンドウ上で見えている範囲内に存在する表を取り出すようにすれば、より気の利いた処理になることでしょう。
AppleScript名:コンテンツ中の表示中のエリア座標を取得する |
–https://stackoverflow.com/questions/9271747/can-i-detect-the-user-viewable-area-on-the-browser tell application "Safari" set dCount to count every document if dCount = 0 then return set aHeight to do JavaScript "window.innerHeight;" in front document set sHeight to do JavaScript "window.scrollY;" in front document set aWidth to do JavaScript "window.innerWidth;" in front document set sWidth to do JavaScript "window.scrollX;" in front document return {myWidth:aWidth, scrollX:sWidth, myHeight:aHeight, scrollY:sHeight} end tell |