【Python】Selenium:ElementClickInterceptedExceptionエラーの原因と解決方法

時計 2021.03.08 / 時計

【Python】Selenium:ElementClickInterceptedExceptionエラーの原因と解決方法

本記事では、PythonのSeleniumによるスクレイピング時に発生する、ElementClickInterceptedException例外の原因と解決方法について解説していきます。

Pythonでスクレイピングやデータ収集の自動化をする場合は、Seleniumモジュールによるブラウザ操作を行います。

Seleniumは高度なWebページ操作ができるので、非常に便利なモジュールです。
しかしその分様々なエラー(例外)が発生します。

本記事ではSeleniumで発生する多くのエラーのうちElementClickInterceptedExceptionが対象となっています。

その他のSeleniumのエラーを以下に示します。

今現在ElementClickInterceptedExceptionエラーで悩んでいる方は、本記事で原因と解決方法を確認してください。

本記事を通して以下の知識を学べます。

学べる知識
  • ElementClickInterceptedExceptionの原因
  • ElementClickInterceptedExceptionの解決方法(クリックまたはスクロール)

ElementClickInterceptedExceptionとは

エラー(例外)内容

Seleniumでブラウザの自動操作を行っていると、次に示すエラー(例外)が発生してプログラムがストップすることがあります。

ElementClickInterceptedException: Message: element click intercepted: Element is not clickable at point (xxx, xxx)

このエラーは「メッセージ:エレメントのクリックは遮られました:エレメントは座標(xxx, xxx)でクリックできなかった」という内容です。

エラー(例外)内容

発生するタイミングとしては、取得したWebElementオブジェクトに対してclick()メソッドを使用するときでした。

element.click()

エラー内容を考えると、指定した要素をクリックすることができずにエラー(例外)が発生しているということです。

ElementClickInterceptedExceptionの原因と解決方法

エラー(例外)の原因

ElementClickInterceptedExceptionの原因はすでに説明していますが、要素をクリックできないことが起因となっています。

実はSeleniumでは、画面外にある要素をクリックすることができないのです。

エラー(例外)の解決方法

画面外にある要素をクリックするためには、WebDriverオブジェクトに対してexecute_script ()メソッドを使ってJavaScriptを実行させます。

driver.execute_script()

JavaScriptを使うことで次に示す2つの方法で本エラーを解決することができます。

  • click()を使って要素をクリックする
  • スクロールをして要素の画面範囲まで移動する

それぞれの解決方法について見ていきましょう。

click()を使って要素をクリックする

私がSeleniumで範囲外の要素をクリックする際は、基本的にこの方法を使います。

driver.execute_script("arguments[0].click();", element)

elementにはSeleniumのfind_element_by_*メソッドなどで取得したWebElementオブジェクトを指定します。

JavaScriptを使用するだけで、とても簡単にElementClickInterceptedExceptionを解決することができます。

スクロールをして要素の画面範囲まで移動する

JavaScriptで対象要素までスクロールすることで、ElementClickInterceptedExceptionを回避して要素のクリックをすることができます。

driver.execute_script("arguments[0].scrollIntoView(false);", element)
element.click()

elementはSeleniumのfind_element_by_*メソッドなどで取得したWebElementオブジェクトです。

まとめ

本記事「Selenium:ElementClickInterceptedExceptionエラーの原因と解決方法」はいかがでしたか。

Seleniumはまるで人がブラウザ操作するかのように動きます。
そのため画面範囲内でないとクリックができないのも頷けますね。

本サイトOFFICE54では、その他のSeleniumによるエラー(例外)の解決方法も解説していますので、ぜひ参考にしてください。