Seleniumで「innerHTML」が使えません。
どうすれば使えますか?
こんな疑問について回答します。
非表示にできる< 目次 >
なぜinnerHTMLが使えないの?
結論から言うと、SeleniumでinnerHTMLは使用できます。
しかし、VBAのSelenium制御となると「なんか使えないなぁ~」って人が多いのかな?と。
この理由の一端が、VBE上のコーディング自動補正機能にあるのかなと思っております。
というのも、従来のIE制御をVBEでコーディングすると「innerhtml」と入力すれば、
自動で「innerHTML」と プログラムが正しく動くコーディング形式に自動補完してくれてたんですよね。
しかし、SeleniumではVBE側の自動補完機能が弱いです。
「innerhtml(←ダメな記入例-理由:HTMLと大文字でない)」もその例の1つですが、自動で補完してくれない場合が多いです。
こういったことから、innerHTMLが正しくプログラム認識されない = 使えないと結論づけてしまう人が多いのかな?と思っています。
(僕もその1人でした。問題解消時は、なんでこんな初歩的ななことをぉぉぉ!って嘆いていました。笑)
今回の「innerHTML」において、具体例を出して確認してみましょう。
コーディング例
■正しい記入例
driver.FindElementByID("〇〇〇").Attribute("innerHTML")
■間違った記入例
driver.FindElementByID("〇〇〇").Attribute("innerHtml")
↑の赤字の箇所のように、innerHTMLは正しく入力してあげる必要があります。
InternetExploreのDOM操作コーディングでは「innerhtml」と入力すれば「innerHTML」と自動補正してくれたからこそ気づきにくい箇所なのかなと。
はい。
ということで、ほぼ結論は書いていますが、次段で 正しいコーディング例を紹介しています。
innerHTMLの使用方法
以下の構文を使えば、VBA×Seleniumでも innerHTMLが使用できます。
構文
driver.FindElementByID("〇〇〇").Attribute("innerHTML")
※前提※
・driverでChrome制御
・FindElementメソッドは適当なものであればOK(TagnameでもXPathでもOK)
・innerHTMLは「innerhtml」のように小文字へ変換すると動かくなるので注意
これまでのIE制御と同じように情報抽出できるので、安心感をもって利用できますね。
ちなみに、outerHTMLに関する 使い方/注意点については、
別記事でまとめてますので、気になればコチラを見てみて下さい(所要時間:3分程)
-
【VBA×Selenium】outerHTMLの使い方【注意点あり】
続きを見る
しかしながら、ちょっとだけコーディング時に注意点もあります。
次段で説明します。
注意点
前段で説明した「.Attribute("innerHTML")」ですが、注意点があります。
既に、冒頭の方で説明していますが、改めて。
「.Attribute("innerHTML")」は 大文字・小文字も その通りに記載してあげないとVBA側で正しく認識してくれません。
これって どのような意味か? というと 以下の通り。
注意ポイント
■正しい記入例
driver.FindElementByID("〇〇〇").Attribute("innerHTML")
■間違った記入例
driver.FindElementByID("〇〇〇").Attribute("innerHtml")
driver.FindElementByID("〇〇〇").Attribute("InnerHTML")
driver.FindElementByID("〇〇〇").Attribute("InnerHtml")
余談ですが、VBAでIE制御する場合と Seleniumで制御する場合を比較してみると、あまり大差が無いように見受けられます。
構文
■IE制御の場合(変数ojtにIEブラウザ格納している前提)
ojt.document.getElementByID("○○○").innerHTML
■Seleniumの場合(変数driverでChrome制御している前提)
driver.FindElementByID("〇〇〇").Attribute("innerHTML")
知ってしまえばこんなものです。是非ぜひ Seleniumライフを充実させてください。
終わりに
VBA×SeleniumはGoogle検索しても、欲しい情報が的確に出てこないから、ハードル高いですよね。
すごく便利なのに勿体ないと思っちゃいます。
ちなみに、VBA×Seleniumにおける「innerText」や「outerHTML」の使用方法や注意点についても、
別記事でまとめてますので、よろしければどうぞ。(各記事-所要時間:3分くらい)
-
【VBA×Selenium】innerTextの使い方【注意点あり】
続きを見る
-
【VBA×Selenium】outerHTMLの使い方【注意点あり】
続きを見る
今後も、マイノリティであろう VBA×Selenium利用者の人向けに、有益そうな情報がありましたら発信していきますので、
引き続き NakamuraBlogをどうぞよろしくお願いいたします。
では、せっかくの同志の皆様と出会えたことに感謝しつつ、今回はここまでとさせていただきます。
おわり。