WSHでJScriptを使ってIEを操作したかったので頑張ったメモ。
タブで任意のURLを開けるようになれば、そこから先は通常のDOM操作で行けると思うので、そこまでを頑張った。
IE未起動の状態で実行すると、1タブ目がよくわからないタブ(真っ白なタブ)として開いてしまうのが微妙なところ...
スクリプト例
({ SHELL_APPLICATION: "Shell.Application", IEXPLORER_EXE: "IEXPLORE.EXE", INTERNETEXPLORER_APPLICATION: "InternetExplorer.Application", openURLonIE: function (noList) { // 新しいタブで開くときの定数&H800 var OPEN_NEW_TAB = 2048; var TARGET_URL = "<開きたいURL>"; var ie = this.getIE(); this.waitIE(ie); ie.Navigate2(TARGET_URL, OPEN_NEW_TAB); this.waitIE(ie); // 開いたタブは別オブジェクトになるため、改めてタブを取得 ie = this.getActiveTab(); WScript.Echo(ie.LocationURL); }, getActiveTab: function () { var HTML_DOCUMENT = "HTMLDocument"; var e = new Enumerator(WScript.CreateObject(this.SHELL_APPLICATION).Windows()); e.moveFirst(); var ie = null; // 一番最後のタブを見つける while (!e.atEnd()) { try { if (new String(e.item().document).indexOf(HTML_DOCUMENT) > -1) { ie = e.item(); } } catch (err) { } e.moveNext(); } if (ie == null) { WScript.Echo("ie nothing"); } else { return ie; } }, waitIE: function (ie) { var SHORT_WAIT_MSEC = 500; var LONG_WAIT_MSEC = 3000; while (ie.Busy) { WScript.Echo("busy"); WScript.Sleep(SHORT_WAIT_MSEC); } WScript.Echo("waiting..."); WScript.Sleep(LONG_WAIT_MSEC); }, getIE: function () { var e = new Enumerator(WScript.CreateObject(this.SHELL_APPLICATION).Windows()); e.moveFirst(); // IEを見つける var ie = null; while (!e.atEnd()) { try { if (new String(e.item().FullName).indexOf(this.IEXPLORER_EXE) > -1) { ie = e.item(); return ie; } } catch (err) { } e.moveNext(); } // IEが未起動であればウィンドウ表示ありでIE起動 if (ie == null) { ie = new ActiveXObject(this.INTERNETEXPLORER_APPLICATION); ie.visible = true; return ie; } }, isClicked: function () { var WSCRIPT_EXE = "wscript.exe"; var scriptEnironment = new String(WScript.FullName); // 実行環境がwscript.exe だとクリック起動 // コマンドライン起動だとcscript.exe if (scriptEnironment.lastIndexOf(WSCRIPT_EXE) > -1) { return true; } return false; }, main: function () { if (this.isClicked()) { WScript.Echo("コマンドライン起動してください"); return; } this.openURLonIE(); } }).main()
実行例
C:\Users\hoge\Documents\jscript\snippets>cscript //nologo .\ie_operate.js waiting... waiting... https://www.google.co.jp/