6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【SeleniumBasic】ウェブページの要素の存在を判定するには?

Last updated at Posted at 2020-01-16

この記事は、Excel+SeleniumBasic+GoogleChromeでスクライピングしている方に向けた記事です。

#結論:.IsElementPresentを用いればよい。
SeleniumのChromeDriverに用意されている「.IsElementPresent」メソッドは、
現在のウェブページ上に任意の要素が存在するか否かズバリをBoolean型で返す。

if driver.IsElementPresent(myBy.ID("hogehoge")) Then

###経緯
IsElementPresentを私が知る以前は、ページの要素の存在のチェックはFindElementsBy云々で
取得したオブジェクトの要素数をチェックすればいいと思った。しかし、

if driver.FindElementsById("任意のID").Count > 0 Then

と記述したら「NoSuchElement……以下略」が表示されVBAマクロが中断されてしまった。
つまり「そんな要素ないんだけど?」というエラーがSeleniumから返ってきてVBAの処理が止まってしまうらしい。

そこでエラーを無視せず正攻法でウェブページの要素の存在判定する方法を探すことにした。
VBAオブジェクトブラウザを探っているとIsElementPresentというそれっぽいメソッドを見つけた。
IsElementPresent.png

説明文に

Inicates whether a WebElement is present using the given method.

=「指定されたメソッドを使用してWebElementが存在するかどうかを示します。(Google翻訳)」とあった

###.IsElementPresentの使い方

IsElementPresentの基本.vba
    driver.IsElementPresent(by As By)

「たぶんこんな風だろう」と予想して、とりあえず試してみる。

test.vba
    Sub test()
        Dim driver As New ChromeDriver
        Dim myBy As New By
    
        URL = "https://www.google.com/?hl=ja"
    
        driver.Get URL
        MsgBox driver.IsElementPresent(myBy.ID("hogehoge"))
    End Sub

上記コードを実行すると「NoSuchElement……以下略」エラーポップアップすることなく"False"のメッセージを表示した(=正常終了)。
つまり、要素の存在判定は下記コードで実装すれば良い。

if driver.IsElementPresent(myBy.ID("hogehoge")) Then

ところで、引数の By クラスとは、Seleniumに搭載されたクラスである。
ByのインスタンスmyByを作ってmyByの中の「.id」メソッドを使って抽出用のタグやキーワードを指定する仕組みだ。

###Byクラスのメソッドたち
Byクラスは

Provides a mechanism by which to find elements within a document.

=「ドキュメント内の要素を検索するメカニズムを提供します。(Google翻訳)」というオブジェクトである。

このByクラス、「.id」のほか
・.Xpath
・.Class
・.Css
・.Tag
・.linktext
・.partiiallinktext
・.Any
・.name
などがある。
By.png
今後これらを必要に応じて試してみたい。

「IsElementPresent」の記事は以上です。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?