SeleniumBasicでHTMLソースの取得 usage_dom

リファレンス

 usage_domでは、SeleniumBasicでdom(Document Object Model )によるHTMLのbodyソースの取得をしています。私は、普段domを扱っていないのでdomについての解説は以下ページを参照しました。

  • 利用目的は業務効率化です。(テスト自動化ではありません)
  • ブラウザはGoogleChromeが対象です。(EdgeやFirefoxは対象外)
  • 原文のVBAでは現在エラー発生する場合が多いため、修正を加えてます。
Examples.xlsmの保存場所(ここをクリック)

 Examples.xlsmが保存されている場所は、SeleniumBasicがインストールされているサブフォルダ内になります。SeleniumBasicのインストール完了時に保存フォルダを確認することができます。ただ、大体以下フォルダのどちらかにファイル保存されています。

  • C:\Program Files\Seleniumbasic\Examples\Excel
  • shell:Local AppData\SeleniumBasic\Examples\Excel

今回は2例紹介します。

目次

HTMLDocumentのメソッド利用

 原文では、実行時バインディングでインスタンスの生成していますが、今回は補完機能を利用したいので、事前バインディング(参照設定)を利用します。VBE参照設定でMicrosoft HTML Object Libraryを選択しておきます。以下構文です。

Private Sub dom_htmldocument()
    Dim Driver As New ChromeDriver
    Driver.Get "https://ja.wikipedia.org/wiki/"

    Dim html As Object
    Set html = New HTMLDocument    
    html.Open
    html.Write Driver.PageSource()
    html.Close    

    Debug.Print html.body.innerText
    Driver.Quit
End Sub

5~6行目:HTMLDocumentインスタンスを生成
7~9行目:htmlオブジェクトにドライバーのページソースを代入
11行目:HTMLソースのbody部をイミディエイトウィンドウに出力

5行目で"Dim html As HTMLDocument"と記入するとエラー発生してしまいます。

JavaScriptの利用

 インスタンス生成までは、前例と同様です。下例は、実行時バインディングにしています。

Private Sub dom_JavaScript()
    Dim Driver As New ChromeDriver
    Driver.Get "https://ja.wikipedia.org/wiki/"
    
    Dim html As Object
    Set html = CreateObject("htmlfile")
    html.body.innerHTML = Driver.ExecuteScript("return document.body.innerHTML;")
    
    Debug.Print html.body.innerText
    Driver.Quit
End Sub

7行目でhtmlオブジェクトにページソースを代入していますが、ページソースの取得をJavaScriptで実行しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次