DOMを理解する
操作対象画面(Google)を起動
'サンプル3.1_DOMを理解する
Public Sub useHTMLAsObject()
'※VBE上でツール>参照設定で、Microsoft Internet ControlsまたはMicrosoft Browser Helpersを追加
Dim ie As InternetExplorer 'IE
'※VBE上でツール>参照設定で、Microsoft HTML Objectを追加
Dim htdoc As HTMLDocument 'HTML
'Google検索画面を取得
Set ie = getIE("Google")
'IEに表示されているHTMLをオブジェクトとして取得
Set htdoc = ie.document
'HTMLに含まれるタグが、オブジェクトとして操作できる
MsgBox htdoc.Title '<title>タグ
MsgBox htdoc.body.innerHTML '<body>タグの内側のHTML
End Sub
'ドキュメントタイトル/URLを指定してIEを取得
Public Function getIE(arg_title As String, Optional arg_url As String) As Object
Dim ie As Object 'IEを格納する変数(オブジェクト型)
Dim sh As Object '起動中のShellWindow一式を格納する変数
Dim win As Object 'ShellWindowを格納する変数
Dim document_title As String 'ドキュメントタイトルの一時格納変数
Set sh = CreateObject("Shell.Application") 'ShellWindowをwinsに格納
'ShellWindowから1つづつ取得して処理
For Each win In sh.windows
'ドキュメントタイトル取得失敗を無視(処理継続)
On Error Resume Next
document_title = ""
document_title = win.document.Title
On Error GoTo 0
'タイトルバーに引数が含まれるかチェック
If InStr(document_title, arg_title) > 0 Then
Set ie = win '変数ieに取得したwinを格納
Exit For 'ループを抜ける
End If
Next
Set getIE = ie '値の返却
End Function
HTMLはテキストデータだけど、HTMLDocumentオブジェクトはIEによる解釈後のHTMLとして操作することができる。
たとえばテキストデータとしてHTMLを扱った場合、<title>タグの抽出するためにはタグの開始位置・終了位置を判定して、その間の文字列を取得するという処理が必要。
でもDOM=HTMLDocumentオブジェクトとして扱った場合、サンプルコードのように「HTML文書のTITLE要素」「HTML文書のBODY要素中のHTMLコード」と直接的に指定できる。
MsgBox htdoc.Title '<title>タグ
MsgBox htdoc.body.innerHTML '<body>タグの内側のHTML
他のサンプルで扱う内容だけれど、「クリック」するなど、DOMとして扱わなければ行えない処理もあるから、感覚をつかんでおいて。