VBAのSeleniumで文字列を抽出する際のエラー回避方法

Visual Basic

VBAでSeleniumを使用して、Google Chromeから特定の要素を抽出する際に、要素が存在しない場合のエラーについて理解することは重要です。この記事では、指定した要素が見つからない場合にどのようなエラーが発生するか、そしてそのエラーを回避するための方法について解説します。

SeleniumのFindElementByCssの挙動

Seleniumの`FindElementByCss`メソッドを使用すると、指定したCSSセレクタにマッチする最初の要素を取得します。しかし、指定した要素が存在しない場合、エラーが発生することがあります。具体的には、`FindElementByCss`が対象の要素を見つけられないと、`NoSuchElementException`という例外がスローされます。

例えば、次のコードで`FindElementByCss`を使用して要素を抽出しようとした場合。

x = driver.FindElementByCss("#this-time > div.detail.solamichi-scroll > div > div").Attribute("innerText")

もし指定されたCSSセレクタに該当する要素がページ上に存在しない場合、`NoSuchElementException`エラーが発生します。このエラーは、要素が見つからないときに発生し、プログラムが中断される原因となります。

エラー回避方法

要素が存在しない場合のエラーを回避するためには、いくつかの方法があります。以下の方法でエラーを処理し、プログラムが途中で停止しないようにできます。

  • Try-Catchブロックを使用する: 例外処理を使ってエラーをキャッチし、エラー発生時に適切な処理を行います。
  • FindElementsを使用する: `FindElements`メソッドは要素が見つからない場合でもエラーをスローせず、空のリストを返します。この方法を使えば、要素が存在するかどうかを確認できます。

これらの方法を使うことで、プログラムの実行を中断せずに、エラーが発生した場合でも適切な処理を行うことができます。

具体的な回避例

ここでは、`Try-Catch`を使用したエラー回避の例と、`FindElements`を使用したエラー処理の方法を紹介します。

Try-Catchを使用した回避方法

On Error Resume Next
Set element = driver.FindElementByCss("#this-time > div.detail.solamichi-scroll > div > div")
On Error GoTo 0
If Not element Is Nothing Then
    x = element.Attribute("innerText")
Else
    MsgBox "要素が見つかりませんでした"
End If

この方法では、エラーが発生した場合にメッセージを表示し、プログラムを中断せずに次に進むことができます。

FindElementsを使用した回避方法

Set elements = driver.FindElementsByCss("#this-time > div.detail.solamichi-scroll > div > div")
If elements.Count > 0 Then
    x = elements(1).Attribute("innerText")
Else
    MsgBox "要素が見つかりませんでした"
End If

この方法では、`FindElements`を使って要素の数を確認し、要素が見つからない場合にエラーを回避することができます。

まとめ

VBAでSeleniumを使用して要素を抽出する際、指定した要素が存在しない場合にはエラーが発生しますが、適切なエラー処理を行うことで、プログラムが中断せずに動作を続けることができます。`Try-Catch`や`FindElements`を使うことで、エラーを回避し、より堅牢なプログラムを作成することが可能です。

コメント

タイトルとURLをコピーしました