イクメンデータアナリストのブログ

コンサルのこと/Pythonのこと/Tableauのこと などを備忘録的に書いていこうと思います。

【Pythonでスクレイピング】ElementClickInterceptedException例外回避の方法

こんにちは!budouです!

今回はPythonスクレイピングをしているときに実際に詰まった例外エラーとその対処に関して紹介出来ればと思います。

[ElementClickInterceptedException]エラーの原因と対処法に関しての紹介の記事になります。

ElementClickInterceptedExceptionとは

エラーメッセージには下記の様に記されています。 ElementClickInterceptedException: Message: element click intercepted

つまり、このエラーは「Selenium側で操作しようと思ったときに何かに邪魔されて出来ません」ということと解釈できます。

原因(どんな時に出たか)

↓をクリックしたいけど

f:id:budounomizu:20210504075755p:plain
クリックしたい場所

↓のように「お邪魔オブジェクト」が出てきてクリックできない~

f:id:budounomizu:20210504075815p:plain
お邪魔オブジェクトが出てきてクリック出来ない!!!

このエラーが出るときは以下のようなケースが考えられます。
Seleniumでクリックさせたい場所に何か別の「お邪魔オブジェクト」がある。
・クリックさせたいのにクリックする場所が画面外にある。

...今回原因を探っていって「邪魔者があると操作出来ないとかSeleniumも意外に人間みたいなんだな」とかよくわからない感想を持ってしまいました。

実際の対処法

対処法として色々と考えられますが、今回は

  • 画面サイズを変えることで(最大化する)「クリックさせたい場所」と「お邪魔オブジェクト」の配置を強制的にずらす

ことでクリック可能にすることで回避しました。

コードは下の一行追加しただけ。(ドライバーのインスタンスを立ち上げた直後やエラーになる直前など、適当な個所に入れ込んで画面を最大化させる)

driver.maximize_window()

おわりに

画面最大化ではなくて、「画面スクロール」などでも同じく回避できそうですよね。

今回のような「お邪魔オブジェクト」をそもそもseleniumに消させることって出来るのでしょうかね。 出来たら楽なのにな~

以上、よろしくお願いします。