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などに依存せずに安定してファイルアップロードを自動化できる
- IESetData http://e-dcz.com/~uwsc/iesetdata.htm
などか。
機能面で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