とある事情で、Web ページから情報を集めたくなり、VBScript でゴニョゴニョとやったのですが、その時に使ったコマンドをテンプレ形式でまとめてみた。
情報収集には、IE を使いました。
理由は、追加でアプリケーションを導入したりする必要をなくすため。 (自分以外の人間も実行する可能性があったため。)
Windows という条件は付きますが、それは置いといて。
IE のオブジェクトを作る。
Visible = True とすると、ウィンドウが表示されるので、デバッグ時には True がいいでしょう。
Dim objIE : Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False ' ウィンドウの可視状態
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
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
' 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
' 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
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 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
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 件のコメント :
コメントを投稿