<html>
<body onload="window.setTimeout('document.getElementById(\'criimlaunch\').click();', 1000);">
<script>
var macroCode = '';
macroCode += 'PROMPT HELLO!\n';
macroCode += 'URL GOTO=http://imacros.net/\n';
macroCode += 'PROMPT BYE!\n';
function launchMacro()
{
try
{
if(!/^(?:chrome|https?|file)/.test(location))
{
alert('iMacros: Open webpage to run a macro.');
return;
}
var macro = {};
macro.source = macroCode;
macro.name = 'EmbeddedMacro';
var evt = document.createEvent('CustomEvent');
evt.initCustomEvent('iMacrosRunMacro', true, true, macro);
window.dispatchEvent(evt);
}
catch(e)
{
alert('iMacros Bookmarklet error: '+e.toString());
};
}
</script>
<a id="criimlaunch" href="javascript:launchMacro();">Launch CR iMacros</a>
</body>
</html>
document.createEvent('CustomEvent');
でイベントを作成し発火させています。
https://developer.mozilla.org/ja/docs/Web/API/Document/createEvent
jQueryが使えない環境やメモリ的にjQueryを使用したくない場合のDOMセレクターにJavaScriptのquerySelectorがとても便利に使えます。
jQueryが使えないiMacros環境でも使用できます。
querySelector() : セレクターに最初の要素ひとつを返す
querySelectorAll() : セレクターに合致した全ての複数の要素を返す。(DOMオブジェクトの配列で返る)
window.document.querySelector("#my_id");
window.document.querySelector(".my_class");
window.document.querySelector([class='my_class']);
window.document.querySelector("input[type='checkbox']");
window.document.querySelector("table[class='shipInfo'] tr td:nth-of-type(1)");
window.document.querySelector("tr > td");
window.document.querySelectorAll(".my_class");
window.document.querySelector( 'tag:contains("●●●")' );
↑これは使用できません。 (Xpathなら取得できるのですが)
' 先頭がクォーテーションはコメントと見なされます
' コメント
' コメント
WAIT SECONDS=2
SET !REPLAYSPEED SLOW
SET !REPLAYSPEED MEDIUM
SET !REPLAYSPEED FAST
SLOW : 2秒待つ
MEDIUM : 1秒待つ
FAST : 0秒待つ(待たない。)
マクロ「mymacro.iim」を実行します。
imacros://run/?m=mymacro.iim
実は拡張子 .js のマクロも実行できます
imacros://run/?m=mymacro.js
フォルダ「myfolder」の中に入った「mymacro.iim」を実行するには「/」を「%5C」で置き換えます
imacros://run/?m=myfolder%5Cmymacro.iim
Aタグを使ってHTMLから起動することもできます
<a href="imacros://run/?m=myfolder%5Cmymacro.iim">マクロ起動</a>
var test;
test = "CODE:";
test += "URL GOTO=www.google.com \n";
var rt = iimPlay(test);
alert(rt); // 1 以下の時エラー
window.content.document.getElementById("xxx");
window.console.log( 'TEST!!!' );
SET !ERRORIGNORE YES
(ステップごとのタイムアウトを 2秒 に設定する)
SET !TIMEOUT_STEP 2
(ページ読み込みのタイムアウトを 1秒 に設定する)
SET !TIMEOUT_PAGE 1
(スペースの代わりに <SP> を入力します。)
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:myform.php ATTR=* CONTENT=日本語<SP>太郎
普通に xpath が使えます (xpath式はダブルクォーテーションで囲むこと)
TAG XPATH="//*[@id='my_id']/tr/td[3]/div/a"
firefoxで新規ウィンドウをタブで開く場合 target="_blank" をマクロで踏むとタブ番号がおかしくなりその後のマクロでエラーが出ることがあります。 この場合はリンクを押す代わりにリンク先を取得して imacros で画面遷移しましょう
http://qiita.com/nori4k/items/2e55bc346062d5c490b8
リファレンス http://imacros.doorblog.jp
iMacrosではマクロ内で変数 (VAR1 〜 VAR9)が使用できます。
が、そもそもJavaScriptも使用できるので変数を使用したい場合はJavaScriptで扱うのもいいと思います。
表示用のHTMLページを用意してどこかのサーバにアップしておきます
<html lang="ja">
<head>
<meta charset="utf-8">
<title>iMacros debug</title>
</head>
<body>
<form action="test.cgi" name="FM">
!VAR1 : <input type="text" name="var1" id="var1" size="30"><br>
!VAR2 : <input type="text" name="var2" id="var2" size="30"><br>
!VAR3 : <input type="text" name="var3" id="var3" size="30"><br>
</form>
</body>
</html>
ページ xxxx.xxxx.com/imacros_debug.html を開いてその中のフォームに変数を代入します。
var test;
test = "CODE:";
test += "URL GOTO=xxxx.xxxx.com/imacros_debug.html "+"\n";
test += 'SET !VAR1 "テスト 太郎"' + " \n";
test += 'SET !VAR2 "てすと たろう"' + " \n";
test += 'SET !VAR3 "000-111-2222"' + " \n";
test += "TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:FM ATTR=NAME:var1 CONTENT={{!VAR1}} \n";
test += "TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:FM ATTR=NAME:var2 CONTENT={{!VAR2}} \n";
test += "TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:FM ATTR=NAME:var3 CONTENT={{!VAR3}} \n";
iimPlay(test);
alert('imacrosで変数をフォームに代入しました');
test2 = "CODE:";
test2 += "URL GOTO=xxxx.xxxx.com/imacros_debug.html "+"\n";
iimPlay(test2);
window.document.getElementById("var1").value = 'ジャヴァ スクリプト';
window.document.getElementsByName("var2")[0].value = 'じゃば すくりぷと';
window.document.getElementsByName("var3")[0].value = '000-999-8888';
alert('JavaScriptで変数をフォームに代入しました');
Firefox(やChrome)を立ち上げ、そこからiMacrosを立ち上げてそこから set_var.js を起動すると、1回目はマクロでフォームに変数を代入します。2回目はJavaScriptで代入します。