ファイルメーカーでのWebビューワー自動処理 テキストリンククリック(Javascript使用)

ログインを伴うWebサイトの処理

ファイルメーカーを使って、あるサイトの管理画面にログインし、いろいろな情報を取得したり、更新したりという作業を自動で行いたい。
これって夢がありますよね。
コンピュータに面倒な仕事をさせる。そしてその仕事をさせるスクリプトを書けるって楽しいものです。

いきなり話がそれるのですが、ログインを伴わない処理であれば別にファイルメーカーを使う必要はありません。
PHPやRubyを使った、RSS取得やスクレイピング、検索などはGoogle先生に聞けばいくらでも情報が出てきますよね。

ところがログインを伴うとなると、話が変わってきます。

今までいろいろ試しました。

  • PhantomJS
  • Mechanize
  • PHPでもなんかあったような気がします。

そのどれもが楽天の管理画面の処理をクリアできません。(僕がレベル低いってのもあると思います。)
セッションが切れたり、文字化けをクリアできなかったり、僕はその壁を乗り越えられませんでした。

ファイルメーカーを使えばブラウザがそのまま入ってるから、そこらへんの問題を気にかけなくてよいという情報を見つけて、ファイルメーカーで自動処理をするようになりました。
この自動処理をする場合に必須なのがJavascriptスキーム(Macでは使えません)

そう最近、アツイらしいJavascriptです。

今日はこのJavascriptスキームを使用した、任意のテキストリンクをクリックする方法を紹介。
これはファイルメーカーでなくても、普通にJavascriptとしても実行できます。

Javascriptで任意のテキストリンクをクリックする。

function x(){
    aall = document.getElementsByTagName('a');
    num  = aall.length;
    for(i = 0;i < num;i++){
        text = aall[i].innerText;
        if(text == 'link'){
            aall[i].click();
            break;
        }
    }
}
x();

ファイルメーカー用に書いてあるので、変数がグローバルなのはご容赦ください。
見やすさのためjavascript:は省略し、インデントを入れています。半角スペースも削除必要かな?
ファイルメーカーで使用する場合は変更必要です。
(おもしろいのがファイルメーカーの掲示板などを見ていると関数名がかなりの確率でxになっている。なんでなんだろ?別にアルファベット1文字ならなんでもいいと思うんだけど。)

  1. まずaタグをすべて取得し配列へ
  2. 次に配列をfor文で回します。
  3. aタグのinnerTextを取得。
  4. 任意のテキストと合致すれば、そのaタグをクリックしてスクリプト終了。

という手順になります。

上記のコードだと

<a href="URL">link</a>

というテキストリンクをクリックすることになります。

注意点はマルチバイトですが、マルチバイト文字のクリックはUnicodeに変換して指定しなければなりません。

以上でした。

これ個人的に便利だと思うのですが、僕だけですかね?

自動処理の必要な場面を考える

現在ではAPIを公開されていたり、Ajaxを使用しているため、取得が難しかったりする場合もでてきています。
そのため万能ではありません。
APIが公開されていて、自分のしたいことがAPIを使用すればできる場合はそちらを利用した方が良いと思います。