Internet Explorer自動操作

VBAでIE操作「HTMLの子要素を取得する」【エクセルマクロ】

CSSセレクタquerySelectorquerySelectorAllを使用する場合は、HTMLの要素を直に指定する為
HTMLの要素の取得は難しくはありません。
しかしid、Class、Nameなどで要素取得する場合は、取得したい要素を固定できない場合があります。

例)
・複数のテーブルがあり、片一方のテーブルからtdタグを抜き出したい。
(タグの中にある、タグの情報にアクセスしたい。)
・親子のタグが複数あり、範囲を指定してデータを抜き出ししたい。

タグを入れ子にして子要素を取得する

    Dim td As HTMLTableCell
    '■タグを入れ子で取得する。下記の場合はidがAAAAの中のtdタグを抜き出す。
    For Each td In objIE.documents.getElementById("AAAA").getElementsByTagName("td")
        Debug.Print td.innerText
    Next td

  '上記の様なデータを取得する事で、(0)のようなインデックス番号を指定せずに要素を取得可能です。
  'Debug.Printは今回全てのデータをPrintしてますが、取得した要素から必要なデータかどうか判別すれば、自由にデータが抜き出せると考えます。

Childrenプロパティを使用して子要素を取得する

    Dim tr As HTMLTableRow
    Dim th As HTMLTableCell

    '■子要素のみループして処理させる。
    '■下記であれば一つ目(0)のtrタグ内のthタグを取得
    For Each tr In objIE.document.getElementsByTagName("tr").Children(0)
        Debug.Print th.innerText
    Next tr

    '■親要素、子要素を含め全てループして処理させる。
    '■下記であれば全てのtrタグ内のthタグを順番に取得
    For Each tr In objIE.document.getElementsByTagName("tr")
        For Each th In tr.Children
            Debug.Print th.innerText
        Next th
    Next tr

その他

Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。

Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

タイトルとURLをコピーしました