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

おわり。

 




  • この記事を書いた人

Nakamura(nkmr)

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

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