ALL Program Selenium VBA

【VBA×Selenium】innerHTMLの使い方【注意点あり】

【VBA×Selenium】innerHTMLの使い方【注意点あり】
これまでVBAIE制御(DOM制御)で「innerHTML」を使っていましたが、
Seleniumで「innerHTML」が使えません
どうすれば使えますか?
 

こんな疑問について回答します。

 
 

なぜinnerHTMLが使えないの?

結論から言うと、SeleniuminnerHTMLは使用できます

 

しかし、VBAのSelenium制御となると「なんか使えないなぁ~」って人が多いのかな?と。

 

この理由の一端が、VBE上のコーディング自動補正機能にあるのかなと思っております。

というのも、従来のIE制御をVBEでコーディングすると「innerhtml」と入力すれば、
自動で「innerHTML」と プログラムが正しく動くコーディング形式に自動補完してくれてたんですよね。

 

しかし、SeleniumではVBE側の自動補完機能が弱いです。
「innerhtml(←ダメな記入例-理由:HTMLと大文字でない)」もその例の1つですが、自動で補完してくれない場合が多いです。

こういったことから、innerHTML正しくプログラム認識されない = 使えないと結論づけてしまう人が多いのかな?と思っています。
(僕もその1人でした。問題解消時は、なんでこんな初歩的ななことをぉぉぉ!って嘆いていました。笑)

 

今回の「innerHTML」において、具体例を出して確認してみましょう。

コーディング例

■正しい記入例
driver.FindElementByID("〇〇〇").Attribute("innerHTML")

■間違った記入例
driver.FindElementByID("〇〇〇").Attribute("innerHtml")

↑の赤字の箇所のように、innerHTML正しく入力してあげる必要があります。

同じことを繰り返しになってしまいますが、VBE上ではSeleniumに関するプログラムコードの自動補完機能が乏しいから、こうなっちゃいます。
InternetExploreのDOM操作コーディングでは「innerhtml」と入力すれば「innerHTML」と自動補正してくれたからこそ気づきにくい箇所なのかなと。
Nakamura
 

はい。

ということで、ほぼ結論は書いていますが、次段で 正しいコーディング例を紹介しています。

 

innerHTMLの使用方法

以下の構文を使えば、VBA×Seleniumでも innerHTMLが使用できます

構文

driver.FindElementByID("〇〇〇").Attribute("innerHTML")

※前提※
・driverでChrome制御
・FindElementメソッドは適当なものであればOK(TagnameでもXPathでもOK)
innerHTMLは「innerhtml」のように小文字へ変換すると動かくなるので注意

.Attribute("innerHTML")」を使えば、
これまでのIE制御と同じように情報抽出できるので、安心感をもって利用できますね。
Nakamura
 

ちなみに、outerHTMLに関する 使い方/注意点については、
別記事でまとめてますので、気になればコチラを見てみて下さい(所要時間:3分程)

VBA×SeleniumのouterHTMLの使い方(注意点あり)
【VBA×Selenium】outerHTMLの使い方【注意点あり】

続きを見る

 

しかしながら、ちょっとだけコーディング時に注意点もあります。

次段で説明します。

 

注意点

前段で説明した「.Attribute("innerHTML")」ですが、注意点があります。

既に、冒頭の方で説明していますが、改めて。

.Attribute("innerHTML")」は 大文字・小文字も その通りに記載してあげないとVBA側で正しく認識してくれません

これって どのような意味か? というと 以下の通り。

注意ポイント

■正しい記入例
driver.FindElementByID("〇〇〇").Attribute("innerHTML")

■間違った記入例
driver.FindElementByID("〇〇〇").Attribute("innerHtml")
driver.FindElementByID("〇〇〇").Attribute("InnerHTML")
driver.FindElementByID("〇〇〇").Attribute("InnerHtml")

この辺はAttributeを使用時の全般的な注意点ですね。とにかく、 "innerHTML"は正しく入力しましょうってことですので注意しましょう!
Nakamura
 

余談ですが、VBAでIE制御する場合と Seleniumで制御する場合を比較してみると、あまり大差が無いように見受けられます。

構文

■IE制御の場合(変数ojtにIEブラウザ格納している前提)
ojt.document.getElementByID("○○○").innerHTML

■Seleniumの場合(変数driverでChrome制御している前提)
driver.FindElementByID("〇〇〇").Attribute("innerHTML")

Seleniumの方がコーディングが やや長くなる傾向がありますが、これは まぁしょうがないので受け入れましょう。
Nakamura
 

知ってしまえばこんなものです。是非ぜひ Seleniumライフを充実させてください。

 

終わりに

VBA×SeleniumはGoogle検索しても、欲しい情報が的確に出てこないから、ハードル高いですよね。

なんといいますか、Selenium利用者人口が少ないことを痛感させれます。笑
Nakamura

すごく便利なのに勿体ないと思っちゃいます。

 

ちなみに、VBA×Seleniumにおける「innerText」や「outerHTML」の使用方法や注意点についても、
別記事でまとめてますので、よろしければどうぞ。(各記事-所要時間:3分くらい)

【VBA×Selenium】innerTextの使い方【注意点あり】
【VBA×Selenium】innerTextの使い方【注意点あり】

続きを見る

VBA×SeleniumのouterHTMLの使い方(注意点あり)
【VBA×Selenium】outerHTMLの使い方【注意点あり】

続きを見る

 

今後も、マイノリティであろう VBA×Selenium利用者の人向けに、有益そうな情報がありましたら発信していきますので、
引き続き NakamuraBlogをどうぞよろしくお願いいたします。

では、せっかくの同志の皆様と出会えたことに感謝しつつ、今回はここまでとさせていただきます。

おわり。

 




-ALL, Program, Selenium, VBA
-, , ,