Python+Selenium+WebDriverでスクレイピングするときに、要素(Element)を見つける「driver.find_element()」を実行すると、要素が見つからずにエラーになることがある。

ここでは、ブラウザの表示をスクロールすることで解決する方法を説明する。

GoogleMapsで検索した結果の一覧表を作成するプログラムを使用した。

GoogleMapsの検索結果の画面は、JavaScriptで作成されている。

動作環境:

  • Python 3.8.3
  • OS:Windows10-Pro [Version 10.0.19044.1889]
  • ブラウザ:Chrome 105.0.5195.54(Official Build) (64 ビット)
  • ライブラリ:Selenium 4.3.0(Selenium 3とはパラメータの渡し方が異なる)
  • サイト:Google Maps(https://maps.google.co.jp/)

現象:GoogleMapsの左側の検索結果から、対象の会社情報のElement(要素)を探すと、10件目で要素が見つからないエラーが発生する。Chromeのサイズは、1920×1080である。

(1)GoogleMapsで「不動産屋 世田谷区」で検索したときの画面である。

(2)エラー発生時の画面

GoogleMapsの左側の検索結果から、対象の会社情報のElement(要素)を探すと、10件目の「株式会社エイブル千歳烏山店」が画面に表示されないので、Element(要素)が見つからないエラーになった。

(3)エラー発生時に探していた会社

10件目の「株式会社エイブル千歳烏山店」が(2)画面では表示されていなかった。

検索結果の会社情報の「会社名」を取得するためのソースである。

これを実行すると、find_element()でElement(要素)が見つからないエラーになる。

GoogleMapsは、JavaScriptで表示しているところ(とその前後?)のソースだけを作成していると思われるので、クリック対象のElement(要素)を一番上に表示されるようにスクロールさせれば、次のElement(要素)が見つかると考えた。

下記がスクロールのソースコードである。