ALL EXCEL Program Selenium VBA

【VBA×Selenimu】FindElementの記載ルール注意点【動かない人向け】

SeleniumのFindElementが上手く行かない場合の対処法
VBASeleniumを使いたいけど、FindElementでXpathをコピペしても動作が失敗する。。。
そもそもVBA自体が起動しないことがあるのですが、何でですか?
 

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

 

FindElement使用時に注意が必要(こんな課題に直面)

これは筆者が直面した問題ですが、
Google検索で VBA×SeleniumFindElement系の記事を調べると、こんなコードに良く出会うかと。

.FindElementByClass("◆◆◆")
.FindElementByCss("◆◆◆")
.FindElementById("◆◆◆")
.FindElementByLinkText("◆◆◆")
.FindElementByName("◆◆◆")
.FindElementByPartialLinkText("◆◆◆")
.FindElementByTag("◆◆◆")
.FindElementByXPath("◆◆◆")
※◆◆◆:該当HTML情報を入れてあげる。

 

これらは Seleniumが用意したメソッドであり、
仮に Xpathで Webスクレイピングするとしたら使い方はこんな感じ。

Xpathの場合

■XpathでWebスクレイピングする場合
driver.FindElementByXPath("〇〇〇").text
 ※○○○:Xpathを入力してあげる

 

で、筆者は直面するわけです。
Chromeディベロッパーツールで Xpathをコピー&ペーストしてもSeleniumで情報を抽出できないことに。

正しい表現でいうと、VBAが動作しない。

で、何がダメだったのか?というのを解明しましたので詳しく説明していきます。

 

何がダメだったの?(解決方法)

結論、以下の通りに VBAならではの記載方法に修正してあげないと、Seleniumを実行できません。

ポイント

<前提>
Xpath情報
//*[@id="eyebrow"]/a/p/span[2]

○:正しい記載方法
driver.FindElementByXPath("//*[@id=""eyebrow""]/a/p/span[2]").text
※↑赤文字箇所を追記してあげる

✖:間違いの記載方法
driver.FindElementByXPath("//*[@id="eyebrow"]/a/p/span[2]").text
※XpathをそのままコピペするのはNG

理由を述べると、Xpathをそのままコピペすると、
VBA側の ""(ダブルクォーテーションルールに引っかかり、
意図しない範囲を文字列として扱われるため、Xpathを正しく認識してくれないからです。

なので、Xpathで””(ダブルクォーテーション)を利用されている箇所を"”で更に囲ってあげると問題は解消されます。これがVBAルールにのっとった解消方法ですね。知ってしまえば簡単ですが、意外にもこの解消方法がGoogle検索でヒットしなかったので、本記事が参考になれば幸いです。
Nakamura
 
 

終わりに

そもそもSeleniumは、C言語・Java・JavaScript・Python などのコア言語をサポートしており、
VBAは おまけで使えるような位置づけです。

ですので、VBA×Selenium の情報というのは、意外にもGoogle検索で引っかからないんですよね。
本屋さんでも そういった専門書は見つかりませんし。。。(コア言語×Seleniumの本は見つけた)

筆者は どうしても 仕事の兼ね合いで VBAでSeleniumを動作させる必要性があったので、
今後も、試行錯誤した結果を本ブログで公開していければと思います。

ダラダラ書いてもあれなので、今回はここまで。

今後もNakamuraBlogをよろしくお願いいたします。

おわり。

 




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