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(要素)が見つかると考えた。
下記がスクロールのソースコードである。