コマンドプロンプトを,Webブラウザとして使おう (WSH・JScriptでXmlHttpRequest)
コマンドプロンプトを,Webブラウザとして使う。
バッチファイルから
- WebサイトにGETリクエストを発行し,
- Webサイトが返すレスポンスに,最低限の「レンダリング」を施す。
という事を行なう。
(1)バッチでWebサイトと通信する第一歩
まずは,インターネット上のサイトから,単純にHTMLソースをそのまま取得してみる。
下記のコードをyahoo.jsとして保存し,ダブルクリックするだけ。
// 非同期通信 var xhr = WScript.CreateObject("MSXML2.XMLHTTP"); xhr.open("GET", "http://www.yahoo.co.jp/"); xhr.send(); while( true ) { WScript.Sleep(100); if( xhr.readystate == 4 ) { // HTMLを表示 WScript.Echo( xhr.responseText ); WScript.Quit(); } }
数秒〜10秒程スリープしたのち,ダイアログボックスに,Yahoo! JapanのHTMLソースが表示される。
もちろん,コマンドプロンプト上からも実行できる。
これだけでも様々な用途に役立つが,もっと見やすく加工してみよう。
(2)最低限の「レンダリング」を試みてみよう
上述のバッチを
- 任意のURLを処理対象にできるように
- HTMLではなく,「読みやすいテキスト」として見せたい
という2点だけ変更。
var target_url = WScript.Arguments.Unnamed(0); var page_txt = get_page_txt( target_url ); WScript.Echo( page_txt ); WScript.Quit(); // ---------- 関数 ---------- function get_page_txt( target_url ) { var xhr = WScript.CreateObject("MSXML2.XMLHTTP"); xhr.open("GET", target_url); xhr.send(); while( true ) { WScript.Sleep(100); if( xhr.readystate == 4 ) { var s = xhr.responseText .replace( / /gi, " " ) .replace( /</gi, "<" ) .replace( />/gi, ">" ) .replace( /"/gi, "'" ) ; // 主要タグ除去 s = s .replace(/<head.*?>((\n|\r|.)*?)<\/head>/i, "") .replace(/<script.*?>((\n|\r|.)*?)<\/script>/gi, "") .replace(/<style.*?>((\n|\r|.)*?)<\/style>/gi, "") ; // 行別に加工 var arr = s.split(/(\r\n|\n)/); for( var i = 0; i < arr.length; i ++ ) { var line_old = arr[i]; var line_new = line_old .replace( /<br *\/?>/gi, "\r\n" ) .replace( /<[^>]+>/g, "" ) .replace( /^[ \t]*/g, "" ) ; arr[i] = line_new; } // トリム for( var i = arr.length - 1; i >= 0; i -- ) { var line = arr[i]; if( line.length == 0 || line.match( /^[ \t\r\n]*$/ ) ) { arr.splice( i, 1 ); } } s = arr.join("\r\n"); return s; } } }
これを browse.js として保存。
コマンドプロンプトから
cscript //nologo browse.js "http://www.google.co.jp/webhp?hl=ja"
とかすると
ウェブ 画像 動画 地図 ニュース 書籍 Gmail その他 ▼翻訳 ブログ YouTube カレ ンダー 写真 ドキュメント リーダー サイト グループ サービス一覧 » iGoogle | 検索設定 | ログイン インターネットをもっと快適に。Google Chromeをインストールし よう日本 検索オプション言語ツール Googleをホームページに設定する広告掲載Google についてGoogle.com in English© 2010 - プライバシー 背景画像を変更
と表示される。
また,
cscript //nologo browse.js "http://d.hatena.ne.jp/language_and_engineering/" | more
とかやると,
ようこそゲストさん ブログトップ 記事一覧 ログイン無料ブログ開設 主に言語とシステム開発に関して <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 2010-08-04 コマンドプロンプトから,Win32 APIや任意のDLLを呼び出して実行しよう (コマンドプ ロンプトから画面キャプチャする方法の仕組みを理解) Win32, コマンドプロンプト, vbscript, VBA | Windowsのコマンドプロンプト上で,Win32 APIなどのDLLを呼び出して実行する。 例えば,コマンドプロンプトだけで,任意のキー操作イベントをエミュレートできる。 サンプルコマンド: コマンドプロンプトから,画面をキャプチャする。(PrintScreenキーの押下をエミュレ ート) mshta vbscript:execute('Set a=CreateObject(''Excel.Application''):a.ExecuteExcel 4Macro(''CALL(''''user32'''',''''keybd_event'''',''''JJJJJ'''',44,0,1,0)''):a.Ex ecuteExcel4Macro(''CALL(''''user32'''',''''keybd_event'''',''''JJJJJ'''',44,0,2, 0)''):close()') これを実行すると,クリップボードに画面のハードコピーが格納される。*1 (ペイントなどに貼り付けして確認してみるとよい) もちろん,batファイルから実行する事も可能。 以下では,このコマンドの動作原理を説明。 (1)VBAからDLLを呼び出す:事前の宣言有りの場合 (2)VBAからDLLを呼び出す:事前の宣言なしの場合 (3)VBAのCALL関数を,WSHやコマンドプロンプトから呼び出す 続きを読む *1:Excelがインストールされている必要がある。 -- More --
のようにページング付きで表示される。
まあ何とか読める。お手製のCUIブラウザ。