スポンサーリンク

UWSCで,IEを自動操作するためのライブラリ (ファイルアップロードも自動化できる)

※これより新しいバージョンがリリースされています。
http://language-and-engineering.hatenablog.jp/entry/20090825/p1


Windows 自動化ソフトの「UWSC」で,IEを自動操作する。


SeleniumやVBAやWSHでの自動化と比べて,このUWSCの最大のメリットは

  • ブラウザからのファイルアップロードも自動化できる

(input type="file" の要素にファイルパスを指定可能)

ということ。

これはでかい。他のツールでは困難だ。



下記はサンプルコード。


call .\IEManipulation.uws


// IEを起動
ie = new_ie()
show_ie( ie )


// Yahooを開く
ie_jump( ie, "http://www.yahoo.co.jp/" )

// 検索
ie_type( ie, gid( ie, "srchtxt" ), "ゴッゴル" )
ie_click_and_wait( ie, gid( ie, "srchbtn" ) )

// 最初の検索結果のページタイトルを取得
first_result = ie.document.getElementById( "yschpri" ).getElementsByTagName("div").Item(2)
txt = first_result.innerText

msgbox( txt )


// 終了
ie.Quit()

動かし方と IEManipulation.uws は下に掲載。



使い方

下記より,UWSCのFree版をダウンロード・解凍。

UWSC ダウンロード
http://www.uwsc.info/


UWSC.exeと同じフォルダに,下記を保存。


IEManipulation.uws


//
//  IEを自動操作するためのライブラリ
//


// -------------------- 制御 --------------------


// 新規IEオブジェクトを作成して返す
function new_ie()
  result = createOLEobj("InternetExplorer.Application")
fend


// 起動中のIEを見えるように
procedure show_ie( ie )
  ie.visible = True
  wid = hndtoid( ie.hwnd )
  acw( wid )
  ie_pause( ie )
fend


// IEがビジー状態の間待ちます
procedure ie_wait( ie )
  repeat
    sleep( 0.1 )
  until ( ! ie.busy ) and ( ie.readystate = 4 )
  ie_pause( ie )
fend


// URLにジャンプ
procedure ie_jump( ie, url )
  ie.navigate( url )
  ie_wait( ie )
fend


// ポーズ
procedure ie_pause( ie )
  sleep( 0.2 )
fend


// -------------------- DOM操作 --------------------


// $
function gid( ie, dom_id )
  result = ie.document.getElementById( dom_id )
fend


// 入力
procedure ie_type( ie, elem, str )
  elem.value = str
  ie_pause( ie )
fend


// クリック
procedure ie_click( ie, elem )
  elem.click
  ie_pause( ie )
fend


// クリックして待機
procedure ie_click_and_wait( ie, elem )
  ie_click( ie, elem )
  ie_wait( ie )
fend


// 文言ベースでセレクトボックスを選択
procedure ie_select_by_label( ie, elem, label )
  for i = 0 to elem.options.length - 1
    ifb elem.options[ i ].innerText = label then
      elem.options[ i ].selected = True
    endif
  next
  ie_pause( ie )
fend


// 値ベースでセレクトボックスを選択
procedure ie_select_by_value( ie, elem, val )
  for i = 0 to elem.options.length - 1
    ifb elem.options[ i ].Value = val then
      elem.options[ i ].selected = True
    endif
  next
  ie_pause( ie )
fend


// ファイルアップロード
// DOM IDではなくnameで要素を指定するので注意
procedure ie_file_upload( ie, post_name, file_path )
  IESetData( ie, file_path, post_name )
  ie_pause( ie )
fend


そして,冒頭のコードを hoge.uws として保存。

実行方法は,hoge.uws をUWSC.exeにマウスでドロップするか,もしくはコマンドプロンプトから

	uwsc hoge.uws

と打ち込む。


IEが立ち上がり,Yahooで検索が実行される。


UWSC文法の補足

UWSCはVBScriptに近い手続き型言語のエンジンで,入門書も出版されている。

UWSCで自動化 Windowsマクロテクニック
http://www.izagne.com/uwsc/

サンプルコードがたくさん

パッと見の特徴は

  • 大文字・小文字の違いには寛容
  • 関数(function)とプロシージャ(procedure)はfendで終わる
  • 関数の戻り値はresultに保存する
  • 外部ライブラリのインクルードは call ファイルパス
  • クラスは存在しないが,かわりに class というキーワードを使って,namespaceないしpackageを作れる
  • IESetData関数を使うことによって,不安定なSendKeysとかSendStrなどに依存せずに安定してファイルアップロードを自動化できる

などか。



機能面でWSH / JScriptと比較すると

  • 配列が動的に使いづらい
  • メソッドチェインが不可能(=自作関数が返す戻り値を,いったん変数に格納しなければならない)

つまり,UWSC内の自作関数による高級なDOM操作は望めない。

といった難点があるが,しかし

  • Windows APIへの接続が容易

というメリットもある。デスクトップアプリ向けという事だ。



IEの自動操作について言うと,ie_sub.uwsというライブラリがかつてどこかで公開されていたようだ。

しかし,もう入手できないらしい。

本エントリーが一応の代わりになるだろう。

補足

ライブラリを使わない,最も簡単なサンプルコードを

下記に掲載した。

UWSCのマクロで,IEを起動して自動操作するサンプルコード
http://language-and-engineering.hatenablog.jp/entry/20140204/controlIeBrowser...

関連する記事:

JScript / VBScript (WSH)で,IEを自動操作しよう
http://language-and-engineering.hatenablog.jp/entry/20090713/p1


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


IE AutoTester で,UIの回帰テストを完全自動化
http://language-and-engineering.hatenablog.jp/entry/20090922/p1