Seleniumで「outerHTML」が使えません。
どうすれば使えるようになりますか?
こんな疑問について回答します。
非表示にできる< 目次 >
なぜouterHTMLが使えないの?
結論から先に述べると、SeleniumでouterHTMLは使用できます。
しかし、VBAにおけるSelenium制御となると、VBE上のコーディング自動補正機能が上手く行かず、
outerHTMLが正しくプログラム認識されずに、使えないと結論づけてしまう人が多い印象です。
具体的には、このような感じ。
コーディング例
■正しい記入例
driver.FindElementByID("〇〇〇").Attribute("outerHTML")
■間違った記入例
driver.FindElementByID("〇〇〇").Attribute("outerHtml")
↑において 赤字で強調していますが、outerHTMLは大文字アルファベット含め正しく入力する必要があります。
VBA×InternetExploreのDOM操作の場合では、「outerhtml」と入力すれば「outerHTML」と自動補正してくれたからこそ、今回の場合は気づきにくいポイントですね。
といった形で、ほぼ結論は書いちゃっていますが、次段で 正しいコーディング例を紹介します。
outerHTMLの使用方法
以下の構文を使えば、VBA×Seleniumでも outerHTMLが使用できます。
構文
driver.FindElementByID("〇〇〇").Attribute("outerHTML")
※前提※
・driverでChrome制御
・FindElementメソッドは適当なものであればOK(TagnameでもXPathでもOK)
・outerHTMLは「outerhtml」等に改変すると動かくなるので注意
これまでのIE制御と同じように情報抽出できるので、知っていて損をしない手法ですね!
しかしながら、ちょっとだけコーディング時に注意点もあります。
次段で説明します。
注意点
前段で説明した「.Attribute("outerHTML")」ですが、注意点があります。
既に、冒頭の方で説明していますが、改めて。
「.Attribute("outerHTML")」は 大文字・小文字も その通りに記載してあげないとVBA側で正しく認識してくれません。
これってどう意味かというと 以下の通り。
注意ポイント
■正しい記入例
driver.FindElementByID("〇〇〇").Attribute("outerHTML")
■間違った記入例
driver.FindElementByID("〇〇〇").Attribute("outerHtml")
driver.FindElementByID("〇〇〇").Attribute("OuterHTML")
driver.FindElementByID("〇〇〇").Attribute("OuterHtml")
VBAでIE制御する場合と、Selenium制御する場合を比較してみましょう。
構文
■IE制御の場合(変数ojtにIEブラウザ格納している前提)
ojt.document.getElementByID("○○○").outerHTML
■Seleniumの場合(変数driverでChrome制御している前提)
driver.FindElementByID("〇〇〇").Attribute("outerHTML")
知ってしまえばこんなものですので、是非ぜひ Seleniumライフを充実させてください。
終わりに
VBA×SeleniumはGoogle検索しても、欲しい情報がクリティカルに出てこないから、結構キツイですよね。
すごく便利なのに勿体ないですよね。
ちなみに、VBA×Seleniumにおける「innerText」の使用方法や注意点についても、
別記事でまとめてますので、よろしければどうぞ。(所要時間:3分くらい)
-
【VBA×Selenium】innerTextの使い方【注意点あり】
続きを見る
今後も、数少ない VBA×Selenium利用者の人向けに、有益そうな情報がありましたら発信していきます。
せっかくの同志の皆様と出会えたことに感謝しつつ、今回はここまでとさせていただきます。
これからもNakamuraBlogをどうぞよろしくお願いいたします。
おわり。