Seleniumで”Element is not clickable at point”エラー

Seleniumを使っていて、要素をclick()しようとした際に”Element is not clickable at point”エラーが発生しました。

短い内容ですが、このエラーがと対処法について記載します。

目次

前提

本記事はSelenium x ChromeDriver x Headless Chromiumで構成されている前提で書かれています。

使用するブラウザ等によって違いはあるかもしれませんので、ご承知おきください。

エラー内容

このエラーは指定した要素のある座標がクリックできないというものです。

ブラウザの画面内に対象となる要素がない場合に発生します。

なお、私の場合、この事象はHeadlessモードでも発生しました。

「Headlessモードは画面表示しないから関係ない」と思っていると深みにハマるので、気をつけてくださいね。

対処法

画面におさまっていないのが要因なので、対処法としては画面におさめることです。

具体的にやることは、以下のどちらかになるでしょう。

  1. 画面サイズを大きくしておさまるようにする
  2. スクロールして画面内におさめる

画面サイズを大きくしておさまるようにする

要素が画面上部にあるようなら、最初から画面サイズを大きくしておく形でも良いかもしれません。

from selenium import webdriver

# WebDriverのパスを設定
driver = webdriver.Chrome(executable_path='path_to_chromedriver.exe')

# ブラウザウィンドウのサイズを設定
driver.set_window_size(1024, 768)  # 幅 1024 ピクセル、高さ 768 ピクセル

# 要素のあるページを開く
driver.get(url)

別の書き方もあるようです。

from selenium import webdriver

# ブラウザ立ち上げ時に指定するオプションを生成
chrome_options = webdriver.ChromeOptions()
# ウィンドウサイズを指定する(例. 1024x768)
chrome_options.add_argument('--window-size=1024,768')

# オプションを指定してブラウザ立ち上げ
driver = webdriver.Chrome(executable_path='path_to_chromedriver.exe', chrome_options=chrome_options)

driver.get('https://www.example.com')

スクロールして画面内におさめる

要素がページの冒頭ではなく下の方にあるようでしたら、ウィンドウを大きくするのではなくスクロールする方が適切です。

スクロールするには、JavaScriptのスクロールのためのメソッドを利用します。

# スクロールを実行(例: 500ピクセル下にスクロール)
driver.execute_script("window.scrollBy(0, 500);")

マウス操作をシミュレートしてスクロールすることも可能です。

やり方を2種類紹介します。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

...{driver立ち上げ&ページを開く処理}

# スクロール実行例1. 500ピクセル下にスクロール
actions = ActionChains(driver)
actions.send_keys(Keys.PAGE_DOWN).perform()

# スクロール実行例2. 指定の要素までスクロール
element = driver.find_element_by_id('element_id')
actions = ActionChains(driver)
actions.move_to_element(element).perform()

まとめ

クリック可能な要素でclick()した際、”Element is not clickable at point”エラーが発生した場合は

  1. 画面サイズを大きくしておさまるようにする
  2. スクロールして画面内におさめる

で、クリックできるようになるという内容でした。

繰り返しになりますが、Headlessモードでも起きるので注意が必要です。

ちょっとしたことだけど、結構やっちゃいそうな問題ですよね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

都内Edtech企業のコーポレートエンジニア。
業務改善・自動化についての開発をしています。
エンジニア歴9年、コーポレートエンジニア歴4年。

目次