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をどうぞよろしくお願いいたします。

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

おわり。

 




  • この記事を書いた人

Nakamura(nkmr)

NakamuraBlog(ナカログ)運営 [ 2.5万PV/月 ] │ブロガー│ 【経歴】IT会社に新卒入社 ▶︎ 通用しない ▶︎ プログラミングに出会う ▶︎ 年間1億円以上のコスト削減プログラムを開発 ▶︎ 会社賞受賞 ▶︎ 少しでも世の中の苦しんでる私と似た人に役に立てればと思いブログを開設。 ● 文系がプログラムと出会って会社員人生が変わった人。 ● 2020年より「嫁を置いて1人旅」の旅動画を投稿開始。

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