Webページ内のHTMLを取得するVBAコード

スポンサーリンク

HTMLを確認できないページを操作する

WebサイトをVBAを用いて自動で操作するには要素(タグ)の情報が記載されているHTMLを確認する必要がありますが、セキュリティ対策などの目的で、HTMLが確認できない場合もあります。

右クリックやCtrl+Uの機能が無効化されている場合などがその代表ですが、今回はVBAを用いてページのHTMLを取得し、必要なタグを確認する方法を紹介します。

VBAでHTMLの情報を取得するプロパティは4つ

HTMLをすべて取得する方法は基本的にInternetExplorerで表示されたページを操作する場合と同じで特に難しいものではありません。
下記の4種類のHTMLを取得するためのプロパティを知っていれば簡単です。

単純にできるだけ多くの情報を取得するには④outerHTMLを取得するとよいと思います。

①innerText

指定した要素の中に記載されているテキストを取得します。
要素の中に入れ子で存在しているタグの情報は取得できません。

②outerText

指定した要素に記載されているテキストを取得します。
要素の中に入れ子で存在しているタグの情報は取得できません。

VBAで値を取得する場合においては①innerTextと違いはありません。

③innerHTML

指定した要素の内側のHTMLの情報を取得します。
指定したタグ自体は取得しません。

④outerHTML

指定した要素のHTMLの情報を取得します。
innerHTMLと異なり、指定したタグ自体も取得します。

スポンサーリンク

HTMLの情報を取得するVBA、操作するVBA

「HTMLの情報をVBAで取得」→「その情報を用いてウェブページを操作する」手順を紹介するにあたり、以前に書いたこちらのページを使用します。

このページにはJANコードを入力し、表示ボタンをクリックするとバーコードが表示されるプログラムが含まれていて、今回はこのページの情報を取得するVBAコードと、その情報を生かしてバーコードを表示させるVBAコードを紹介します。

(このページは要素を調べる機能が無効かされていないので、実際はVBAを使わなくてもHTMLの情報を取得することができますが、適当なページが思いつかないのでVBAで情報を取得する例として用いることにします。)

①ウェブページのHTMLを取得するVBAコード

下記はウェブページ(https://officevba.info/javascriptbarcodemaker2/)のHTMLをテキストファイルに書き出すVBAのサンプルコードです。
該当ページを開いた状態で実行するとテキストファイルはデスクトップに「HTML.txt」というファイル名で作成されます。

Sub HTMLの情報を取得してテキストに書き出す()

Dim colSh As Object
Dim win As Object
Dim objIE As Object

Dim FSO As Object, WSH As Object
Set FSO = CreateObject(“Scripting.FileSystemObject”)
Set WSH = CreateObject(“Wscript.Shell”)

Dim DesktopPath As String
DesktopPath = WSH.SpecialFolders(“Desktop”)

Dim HTMLコード As String

Set colSh = CreateObject(“Shell.Application”)
For Each win In colSh.Windows
If TypeName(win.document) = “HTMLDocument” Then
If InStr(win.document.Title, “VBA(マクロ)で仕事を楽しく効率化”) > 0 Then
’If win.document.Url = “https://officevba.info/javascriptbarcodemaker2/” Then ’こちらの指定方法でも可
Set objIE = win
Exit For
End If
End If
Next

If objIE Is Nothing Then
MsgBox “入力するページが見つかりません”
Else

HTMLコード = objIE.document.body.outerHTML
With FSO.CreateTextFile(DesktopPath & “\HTML.txt”)
.WriteLine HTMLコード
.Close
End With

End If

Set FSO = Nothing
Set WSH = Nothing

Set colSh = Nothing
Set win = Nothing
Set objIE = Nothing

End Sub

作成されたテキストファイルより下記の該当箇所のタグが確認できました。

対象ページにてバーコードを自動で表示させるVBAコード

取得したHTMLの情報を用いてJANコードを入力し、バーコードを自動で表示させるVBAコードはこちらになります。
今回の操作対象となるタグはId属性が割り振られていますので、コードはシンプルになります。

Sub IEを操作してバーコードを表示させる()

Dim colSh As Object
Dim win As Object
Dim objIE As Object

Dim JANコード As Object
Dim 表示ボタン As Object

Set colSh = CreateObject(“Shell.Application”)
For Each win In colSh.Windows
If TypeName(win.document) = “HTMLDocument” Then
If InStr(win.document.Title, “VBA(マクロ)で仕事を楽しく効率化”) > 0 Then
’If win.document.Url = “https://officevba.info/javascriptbarcodemaker2/” Then ’こちらの指定方法でも可
Set objIE = win
Exit For
End If
End If
Next

If objIE Is Nothing Then
MsgBox “入力するページが見つかりません”
Else
Set JANコード = objIE.document.getElementById(“JANCode”)
JANコード.Value = “4902778093108”
Set 表示ボタン = objIE.document.getElementById(“表示”)
表示ボタン.Click

Set JANコード = Nothing
Set 表示ボタン = Nothing

End If

Set objIE = Nothing
Set colSh = Nothing

End Sub

おすすめ書籍 (広告)

コメント

  1. nyarou より:

    大変参考になるコードで、ありがたく拝見させて頂いております。

    ①ウェブページのHTMLを取得するVBAコード
    において、

    DesktopPath = WSH.SpecialFolders(“Desktop”)

    の行の末尾に恐らく、

    & “\”

    のコードが必要ではないかと思われますが、どうでしょうか?

    • okumasahito より:

      ご指摘ありがとうございます。
      先ほど修正しました。

      修正箇所はDesktopPathでもよかったのですが、
      特殊フォルダには文字列を追加しないようにしているので
      以下の部分を修正しております。

      With FSO.CreateTextFile(DesktopPath & “HTML.txt”)

      With FSO.CreateTextFile(DesktopPath & “\HTML.txt”)

      混在してややこしくならないようにこの運用に統一したつもりだったのに
      ミスってしまっていました。