ファイルメーカーでの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文字ならなんでもいいと思うんだけど。)
- まずaタグをすべて取得し配列へ
- 次に配列をfor文で回します。
- aタグのinnerTextを取得。
- 任意のテキストと合致すれば、そのaタグをクリックしてスクリプト終了。
という手順になります。
上記のコードだと
<a href="URL">link</a>
というテキストリンクをクリックすることになります。
注意点はマルチバイトですが、マルチバイト文字のクリックはUnicodeに変換して指定しなければなりません。
以上でした。
これ個人的に便利だと思うのですが、僕だけですかね?
自動処理の必要な場面を考える
現在ではAPIを公開されていたり、Ajaxを使用しているため、取得が難しかったりする場合もでてきています。
そのため万能ではありません。
APIが公開されていて、自分のしたいことがAPIを使用すればできる場合はそちらを利用した方が良いと思います。