Python
selenium-webdriver

seleniumにてButtonがクリックできない時の対処法


環境

python 2.7(2019/5追記、多分3系統でも)

使用OS:OSX

環境ブラウザ:Google Chrome


imports

from selenium import webdriver

from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC


Buttonが反応しない

pythonを使ってseleniumを動かしていた時のこと。

下記のようにxpathを使いtype:'button'の要素を指定してclickしてみたがなぜかエラーが

driver.find_element_by_xpath('XPATH').click()


selenium.common.exceptions.WebDriverException: Message: unknown error: Element is not clickable at point (741, 1767)


この要素はclickできないと言うのだ。

表示されているchrome上でclickしてみたが普通にできるし動く。

試しにこのボタンをちゃんとfindできているのか確認ついでにclickableか聞いてみた

if EC.element_to_be_clickable(By.XPATH, 'XPATH'):

print 'true'
driver.find_element_by_xpath('XPATH').click()

trueと表示された上で同様のエラーメッセージが表示された。なんでや


問題解決

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

この一行を直前に追加したら動くようになった

ここを参考にスクロールをさせてみた。

https://selenium-python.a-zumi.net/faq.html

どうやらブラウザ上にて画面外にあるButtonはclickできないようだ。


似たような問題

https://stackoverflow.com/questions/35126293/how-to-set-text-into-textarea-with-selenium-webdriver/35128666#35128666

これを見る限りではもしかしたらsendKeysも画面外にある場合は動かないのかも、、、

自分のケースでも対象がtype:submit()の場合は画面外に存在しても動いたため、全体的に人間が画面を通してブラウザを操作するのととても近いらしい。

画面内に対象があるかどうかは結構大事な問題なようだ。