2015-12-06

VBS で Web ページから情報を集めるためのコマンドサンプル。


とある事情で、Web ページから情報を集めたくなり、VBScript でゴニョゴニョとやったのですが、その時に使ったコマンドをテンプレ形式でまとめてみた。



情報収集には、IE を使いました。
理由は、追加でアプリケーションを導入したりする必要をなくすため。 (自分以外の人間も実行する可能性があったため。)
Windows という条件は付きますが、それは置いといて。



IE のオブジェクトを作る。
Visible = True とすると、ウィンドウが表示されるので、デバッグ時には True がいいでしょう。

Dim objIE : Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False ' ウィンドウの可視状態

以降、InternetExplorer.Application のオブジェクトを objIE で表現するので、場合によっては上手く書き換えてください。



ページを開き、ロード待ちをする。
Web ページという特性上、リンクを開いた直後にはロードしきらない。
ロードしきらずに次の処理に移ると、想定外の動作をする可能性があるので、入れておくことをオススメする。

' サブルーチン: Web ページを開く
Sub openWebPage(objIE, strUrl)
    ' 待ち時間 (ミリ秒)
    Dim valLoadingWait : valLoadingWait = 1000

    ' ページを開く
    objIE.Navigate strUrl

    ' ロード待ち
    WScript.Sleep(valLoadingWait)
    Do While (objIE.ReadyState <> 4) Or objIE.Busy
        WScript.Sleep(valLoadingWait)
    Loop
End Sub

Dim strUrl : strUrl = "http://karat5i.blogspot.jp"

openWebPage objIE, strUrl

また、ブラウザを閉じる場合 (終了処理) は、次の通り。
最後に呼んでおきましょう。

objIE.Quit



特定のタグ要素を順番に探索する。
このサンプルでは、div 要素を探索している。

Dim div

' getElementsByTagName() 引数の各要素の対して
For Each div In objIE.document.getElementsByTagName("div")
    ' 処理
Next



タグの属性によって分岐する。
このサンプルでは、div 要素の属性 id の値を見て、"12345" だったら処理をする。

Dim div : Set div = objIE.Document.getElementsByTagName("div")

' getAttribute() の引数が StrComp の第2引数と同じならば
If StrComp(div.getAttribute("id"), "12345") = 0 Then
    ' 処理
End If



タグ内の文字列を取得する。
サンプルでは、div 要素内のテキストを読みだす。

Dim strInnerText
Dim div : Set div = objIE.Document.getElementsByTagName("div")

strInnerText = div.innerText








以降は、VBScript 全般で使う事柄。



メッセージ出力。
下記サンプルを実行すると、"Error!" と表示される。

WScript.Echo "Error!"



変数の定義と代入。
通常の値の場合 (変数 = 値) と、オブジェクト (Set 変数 = オブジェクト) を代入する場合で変わる。

VBScript では変数の定義と代入を 1 行で書くことができない。
ただ、初期値を代入したいだけなのに 2 行で書くと可読性が下がるなぁと思う方は、コロン ":" (コマンド区切り文字) を使うのがよい。 (私はこっちの人間。)

' OK
Dim val
val = 1

' NG
Dim val = 1

' OK
Dim val : val = 1

' object
Dim objFSO : Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")



文字列処理。
とりあえず、文字列の長さ、部分文字列の取得、文字列の連結、置換を組み合わせればそこそこいろいろとできるかなと。

Dim str : str = "hogehoge"

WScript.Echo Len(str)         ' 8
WScript.Echo Left(str, 5)     ' hogeh
WScript.Echo Right(str, 5)    ' ehoge
WScript.Echo str & ", " & str & str  ' hogehoge, hogehogehogehoge
WScript.Echo Replace(str, "h", "")  ' ogeoge



とりあえず、こんなところで。

0 件のコメント :

コメントを投稿