0
0

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 1 year has passed since last update.

seleniumでElementNotInteractableExceptionという例外が発生

Last updated at Posted at 2023-05-24

結論

指定した要素がDOM上には存在しているが、対話(操作)可能な状態になっていない。そんな要素を操作しようとしたことで発生する例外のようです。

実際に起きたこと

seleniumを使用した個人のpythonプログラムを作っていました。作成後しばらくは意図通りに実行できていました。ところがある時を境にElementNotInteractableExceptionという例外が発生し、正しく実行しなくなりました。

調査

以下の記事を参考にしました。

多くの場合、以下のようなfind_element関数を使って要素を検索し、見つけた要素に対してclickなどをすると思います。

driver.find_element(...)

発生した例外は「要素を見つけることはできた。でもディスプレイに表示されていないなどの理由から操作できない。」というような要素を操作しようとしたことで投げられたようです。

今回の場合

以下を用いてブラウザのウィンドウサイズを大きくすることで解決できました。

driver.set_window_size(width, height)

解決までの流れは以下です。

  1. ElementNotInteractableExceptionが発生。
  2. 例外について調査したところ、操作できない要素を操作しようとしたことで投げられた例外であることが分かる。
  3. GoogleColab上1で実行していたため、一度ブラウザで対象のWebページにアクセスして画面の様子を目視確認する。
  4. 確認したところ、指定のWeb要素が操作できないようには見えない。
  5. pythonのコードで対象のWebページにアクセスした直後の画面の様子をスクリーンショットにしてGoogleドライブに保存。2
  6. スクリーンショットを確認したところ、画面がスマホ版のものになっていた。
  7. 改めてコードを確認したところ、driver.set_window_sizeでウィンドウサイズを指定していた箇所があり、そのサイズが明らかに小さかった。
  8. driver.set_window_sizeの引数を大きくして実行したところ、ElementNotInteractableExceptionが発生することはなくなった。

おわりに

操作できない原因はそれぞれの状況によって変わってくるため、それに応じて解決の対応が変わってくるかと思います。ですが1つの例として今回の記事が参考になれば幸いです。

  1. ヘッドレスモードでの実行が前提になります。

  2. driver.save_screenshot関数を使用することでスクリーンショットを撮れます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?