【Python】Selenium:ElementClickInterceptedExceptionエラーの原因と解決方法
2021.03.08 /
本記事では、PythonのSeleniumによるスクレイピング時に発生する、ElementClickInterceptedException例外の原因と解決方法について解説していきます。
Pythonでスクレイピングやデータ収集の自動化をする場合は、Seleniumモジュールによるブラウザ操作を行います。
Seleniumは高度なWebページ操作ができるので、非常に便利なモジュールです。
しかしその分様々なエラー(例外)が発生します。
本記事ではSeleniumで発生する多くのエラーのうちElementClickInterceptedExceptionが対象となっています。
その他のSeleniumのエラーを以下に示します。
【Python】Selenium:no such element: Unable to locate elementの解決(iframe要素取得)
【Python】Selenium: bluetooth_adapter_winrt.cc: Getting Default Adapter failed(ChromeDriver)
今現在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によるエラー(例外)の解決方法も解説していますので、ぜひ参考にしてください。