今回は「is not clickable at point」というエラーについて。
これ、Seleniumを使って自動操作を行っている時に割と出るエラーなのですが、正確には以下の様な形で出力されます。
is not clickable at point (322, 159).
この後ろにつく(322, 159)というのはそれぞれブラウザ上のX、Yの座標を表しており、その位置にあるオブジェクトをクリック出来なかったという意味です。
理由は単純で、「対象物が画面の外にあったため」です。
当ページを例にどういう状況かを見てみましょう。
上図を見てみると、開いているブラウザの画面上には上から2番目の記事までが見えている事が確認できますね。ただこのページにはまだ下に続きの記事が存在しますが、今その部分は画面外となっています。
この状態でSeleniumのブラウザを使って「3番目の記事をクリック」しようとした場合、画面外に存在するため「is not clickable at point (画面外のリンクは押せません)」になってしまうという事です。
まぁ「click()」メソッドの詳しい処理内容は分かりませんが、画面内にある要素をクリックする場合には発生しないエラーなのでそういう事なんでしょう。
対処法
クリック対象が画面の外にある事が原因なので、画面の中に来るようにページをスクロールしてあげればOKです。
Seleniumで動かしているブラウザをスクロールさせるには、以下の様にJavaScriptで「window.scrollTo(X, Y)」という画面をスクロールさせるメソッドを使用します。
driver.ExecuteScript("window.scrollTo(0, 200);")
上記の命令を実行すると、水平方向に0px、垂直方向に200pxのスクロールを行います。
正確なオブジェクトのY座標が分からない場合は、以下の様にオブジェクトの座標プロパティを参照すると良いです。
' 変数element は Selenium.WebElement型 driver.ExecuteScript("window.scrollTo(0, " & element.Location.Y & ");")
以上。