スポンサーリンク

JScript / VBScript (WSH)で,IEを自動操作しよう


JScript / VBScriptでも,IEを自動操作(オートメーション)できる。

テキストファイルをダブルクリックするだけで,ブラウザが動く。


しかも,ブックマークレットを自動実行することもできる。

つまり,表示中のWebページに対してJavaScriptを自動的に実行し放題。



下記は .js / .vbs の両スクリプトでのサンプルコード。

内容は,

Excel VBAのマクロで,IEを自動操作しよう (DOMセレクタ関数をVBAで自作)
http://language-and-engineering.hatenablog.jp/entry/20090710/p1

と同じく,

  • IEを立ち上げ,
  • Googleで特定のキーワードで検索を行ない,
  • 検索結果の1件目のサイト名を表示する。

というもの。

(1)VBScript

ie.vbs


use_ie

Sub use_ie()

    ' IE起動
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Navigate "http://www.google.co.jp/"
    ie.Visible = True
    waitIE ie
    
    ' 検索キーワードを入力
    ie.Document.getElementById("q").Value = "ホゲラッチョ"
    WScript.Sleep 100
    
    ' 検索ボタンクリック
    ie.Document.all("btnG").Click
    waitIE ie
    
    ' 1件目のサイトのタイトルを表示
    MsgBox ie.Document.getElementById("res") _
        .getElementsByTagName("li")(0) _
        .getElementsByTagName("h3")(0) _
        .innerText
    
    ' 制御を破棄
    ie.Quit
    Set ie = Nothing

End Sub


' IEがビジー状態の間待ちます
Sub waitIE(ie)
    
    Do While ie.Busy = True Or ie.readystate <> 4
        WScript.Sleep 100
    Loop
    
    WScript.Sleep 1000
    
End Sub

VBA版と違うのは,sleepがWindows APIではなくWScript.Sleepになったことぐらい。

(2)JScript

ie.js

use_ie();

function use_ie()
{
    // IE起動
    var ie = WScript.CreateObject("InternetExplorer.Application")
    ie.Navigate( "http://www.google.co.jp/" );
    ie.Visible = true;
    waitIE( ie );

    // 検索キーワードを入力
    ie.document.getElementsByName("q")[0].value = "ホゲラッチョ";
    WScript.Sleep( 100 );
    
    // 検索ボタンクリック
    ie.document.getElementsByName("btnK")[0].click();
    waitIE( ie );
    
    // 1件目のサイトのタイトルを表示
    WScript.Echo(
        ie.document.getElementById("rso")
        .getElementsByTagName("h3")[0]
        .getElementsByTagName("span")[0]
        .innerText
    );

    // 制御を破棄
    ie.Quit();
    ie = null;
}


// IEがビジー状態の間待ちます
function waitIE( ie )
{    
    while( ( ie.Busy ) || ( ie.readystate != 4 ) )
    {
        WScript.Sleep( 100 );
    }
    
    WScript.Sleep( 1000 )
}


/*
注:この記事を執筆した当時は,下記のようなコードが動作していた。現在とはDOM構造が異なる。

    // 検索キーワードを入力
    ie.document.getElementById("q").value = "ホゲラッチョ";
    WScript.Sleep( 100 );
    
    // 検索ボタンクリック
    ie.document.all("btnG").click();
    waitIE( ie );
    
    // 1件目のサイトのタイトルを表示
    WScript.Echo(
        ie.document.getElementById("res")
        .getElementsByTagName("li")[0]
        .getElementsByTagName("h3")[0]
        .innerText
    );

*/


ブックマークレットについては,「制御を破棄」の手前で

    ie.Navigate( "javascript:(function(){alert(document.body.innerHTML)})();" );

を実行してみよう。

ブックマークレットが実行される。

所感

JavaScriptの世界に持って来る事ができれば,もうこっちのものだ。

関連する記事:

[IEの自動操作]記事一覧
http://d.hatena.ne.jp/language_and_en...


Excel VBAのマクロで,IEを自動操作しよう (DOMセレクタ関数をVBAで自作)
http://language-and-engineering.hatenablog.jp/entry/20090710/p1


WSH/JScriptで,Outlookを操作しよう (受信メール内からURLを抽出してみる)
http://language-and-engineering.hatenablog.jp/entry/20100324/p1