JavascriptとiMacrosを連携させると、iMacrosだけでブラウザを自動化するよりももっと色々なことができるようになります。ここでは連携の基本的な方法をお伝えします。
基本的な構成
JavascriptとiMacrosを連携させる方法は二つあります。ここで連携とは、片方からもう片方をの機能を使ったり、文字列データなどを受け渡したりすることです。
- iMacrosでJavascriptの機能を使う(コードを実行する)
- JavascriptでiMacrosの機能を使う(コードを実行する)
iMacrosでJavascriptの機能を使う場合
EVALというコマンドを使います。使い方はこんな感じですね。
これは tommorow というiMacrosの変数に、EVAL関数でJavascriptのコードを実行して、計算したdateStringを入力するというものです。
1 |
SET tomorrow EVAL("var today = new Date(); var tomorrow = new Date(); tomorrow.setDate(today.getDate() + 1); var day = tomorrow.getDate().toString(); if (day.length < 2) {day = \"0\" + day;} var month = (tomorrow.getMonth() + 1).toString(); if (month.length < 2) {month = \"0\" + month;} var year = tomorrow.getFullYear().toString(); var dateString = day + \"/\" + month + \"/\" + year; dateString;") |
この方法でiMacrosでJavascriptの機能を使うことができます。なんだかとても大変そうな書き方ですよね。
JavascriptでiMacrosの機能を使う場合
JavascriptでiMacrosを実行する場合、iimPlay()という関数で行います。
以下の例のように、iMacrosのコードを文字列macroに記述し、その文字列macroをiimPlay関数で実行するという方法です。
1 2 3 4 5 6 7 8 |
var searchItem = "imacros"; var macro = "CODE:"; macro += "URL GOTO=https://www.google.co.jp/ \n"; macro += "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:tsf ATTR=ID:lst-ib CONTENT=" + searchItem + "\n"; macro += "TAG POS=1 TYPE=BUTTON FORM=ID:tsf ATTR=ID:_fZl \n"; var ret = iimPlay(macro); |
上の例とは違いますが、こちらのコードはGoogleで “imacros” というワードを検索するコードです。
Javascriptファイルにこのコードを貼り付けて実行するとGoogle検索が出来ます。
Javascripファイルの作り方と実行の方法はこちらを参考にしてください。
文字列の注意点ですが、先頭に “CODE:” という文字を付けておく必要があります。また、各行の最後に改行コード(\n)を入れておきましょう。こうしないと、繋がった文字列と認識されて、iMacrosのコードと認識されません。
Javascriptの変数をiMacrosで使用するには、5行目の 「CONTENT=” + searchItem + “\n”」の様にJavascript変数の “searchItem” をiMacrosコード文字列に連結させるようにします。
どちらを使用するか
圧倒的にJavascriptでiMacrosの機能を使う方が簡単です。
iMacrosでは繰り返し処理(For文、while文)、条件判断(if文, swich-case文)が非常にやりにくいです。
JavascriptでiMacrosの機能を使った例
ではもう少し自動化してみましょう。
「Googleで、”風邪”、”猫”、”受験”のワードを順番に検索していき、検索結果が1億件を超えているとポップアップで表示して検索する処理を停止させる」という内容のプログラムを書いてみましょう。
繰り返しのfor文、条件判断のif文を使って以下のように書いて見ました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
var searchItems = ["風邪", "猫", "受験"]; loop:for(var i = 0; i < searchItems.length; i++) { var macro = "CODE:"; macro += "URL GOTO=https://www.google.co.jp/ \n"; macro += "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:tsf ATTR=ID:lst-ib CONTENT=" + searchItems[i] + "\n"; macro += "TAG POS=1 TYPE=BUTTON FORM=ID:tsf ATTR=ID:_fZl \n"; macro += "TAG POS=1 TYPE=DIV ATTR=ID:resultStats EXTRACT=TXT \n"; macro += "WAIT SECONDS=3 \n"; var ret = iimPlay(macro); var numStr = iimGetExtract(1); var num = parseInt(numStr.split("件")[1].replace(/[^0-9]/g, "")); if(100000000 < num) { alert(searchItems[i] + "の検索結果は1億件を超えています。"); break loop; } } |
このプログラムを実行すると、以下の動画のように動作します。
9行目のiMacrosのEXTRACTでコピーした文字列を17行目のJavascript側で条件判断しています。この時に、14行目のiimGetExtractを使ってiMacros側からJavascript側へ結果を渡しています。
Google検索の結果は以下のような文字列ですので、ここから数値だけを抽出しているのが15行目です。文字列の操作については、”件”で文字列を分割して、一番目の文字列から数字だけを抽出するようにしています。
約 237,000,000 件 (0.77 秒)
注意点ですが、サーバーへの過度なアクセスは迷惑行為になりますので、10行目のように待機時間を儲けるようにしてください。
以上の方法を使ってiMacrosとJavascriptを連携することができます。
iMacrosでFirefoxを自動操作する方法はこちらから! |