よく使う Firefox add-on のひとつが、 iMacros なるもの(厳密には名前の右肩にTMが付く)。browser-based macro recorder
であり、Webブラウザを使った操作を記録&再生することができる。
で、今日メモっておきたいのは、iMacros と JavaScript を組み合わせる方法について。iMacros のマクロはいくつかのコマンドからなっているが(Command Reference - iMacros に掲載されている)、一般的なプログラミング言語が提供するような関数や制御構造、データ構造をもたない。そこを JavaScrpt で補完しよう、という話。
例
環境は Firefox 14.0.1, iMacros for Firefox 7.5.0.4.
- 1. マクロを記録
- まずは簡単なマクロをひとつ作るため、google.co.jp を開いて検索する操作を記録してみた。そうすると、次の内容のマクロ(#Current.lim)ができた。
-
VERSION BUILD=7500718 RECORDER=FX
TAB T=1
URL GOTO=https://www.google.co.jp/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:lst-ib CONTENT=foo
- ここで、
foo
の部分が検索した文字列に相当する。
- 2. マクロを編集(変数の導入など)
- 記録したマクロをもとにして、繰り返し検索を行う処理をJavaScriptで作ることにする。そのための準備としてまずはマクロ "#Current.lim" を "my.lim" にリネーム。それから内容を編集。
- 第一に、新しいタブを作ってフォーカスを移すための iMacrosコマンド
TAB OPEN と TAB T={{!VAR1}} を追加する。{{!VAR1}} はタブの番号を指定するために導入した変数。 - 第二に、JavaScriptから指定した文字列で検索を行うことにしたいので、
foo
を {{!VAR2}} と置換。 - 結果、マクロは次の内容になった。
VERSION BUILD=7500718 RECORDER=FX
TAB OPEN
TAB T={{!VAR1}}
URL GOTO=https://www.google.co.jp/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:lst-ib CONTENT={{!VAR2}}
TAG POS=1 TYPE=INPUT:BUTTON ATTR=VALUE:Google<sp>検索
- 3. JavaScriptを作成
- とりあえずテキトーにマクロを作って、my.js とリネームしてから編集。
iimSet, iimPlay という2つのインターフェースを利用してJavaScriptを書く。具体的には、マクロに導入した変数 {{!VAR1}} に、タブ番号を iimSet() という関数でセット。それから配列にはいっている文字列 foo, bar, baz を {{!VAR2}} にセット。最後に、iimPlay() で my.lim を実行する。 var a = ['foo', 'bar', 'baz'];
for(var i=0, n=a.length; i<n; i++){
iimSet("VAR1", i + 1);
iimSet("VAR2", a[i]);
iimPlay("my");
}
- 4. JavaScriptを実行
- 作成した JavaScript(my.js)を保存して、実行する(Playボタンとか)。うまくいくとタブを新規作成して検索する操作が3回繰り返される。
- ※空白のタブがひとつできてしまうから、いまひとつなところがあるのかもしれないな。。。