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

ここでは、ブラウザのサイズを設定することで解決する方法を説明する。

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

動作環境:

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

これらのサイトを参考にしました。

https://yuki.world/selenium-headless-chrome-not-interactable/#:~:text=%E9%80%9A%E5%B8%B8%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A8%E3%83%98%E3%83%83%E3%83%89%E3%83%AC%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%8C%E7%95%B0%E3%81%AA%E3%82%8B%20%E9%80%9A%E5%B8%B8%E3%81%AE%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AF%201200%20%2A%20710,%E3%83%98%E3%83%83%E3%83%89%E3%83%AC%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AF%20800%20%2A%20600%20%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E5%88%A4%E6%98%8E%E3%80%82

https://self-development.info/selenium-4%E3%81%A7headless%EF%BC%88%E3%83%98%E3%83%83%E3%83%89%E3%83%AC%E3%82%B9%EF%BC%89%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B/

https://blog.enjoyxstudy.com/entry/2020/11/03/000000

https://xn--eckl3qmbc2cv902cnwa746d81h183l.com/instructor-blog/210909how-to-change-window-size-with-python-selenium/

(1)正常動作する場合

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

下記Chromeのサイズは、1920×1080である。

上画面の左側の検索結果一覧の「(株)アドキャスト明大前支店」をクリックして、

下画面の中央に「(株)アドキャスト明大前支店」の詳細情報が表示された。

会社の詳細情報の「住所」を取得するためのソースである。

これを実行すると、find_element()でElement(要素)が見つかった。
このときのブラウザのサイズは、「driver.set_window_size(ブラウザのwidth, ブラウザのheight)」で1920x1080に設定した。

(2)エラーになる場合

ブラウザを表示させないヘッドレスモード(Headless Mode)で、Element(要素)を取得できないエラーが発生するので、原因を調べるため「通常表示」させた。

下記Chromeのサイズは、800×600である。

上の画面左側の検索結果一覧の「目黒世田谷不動産」をクリックして、

下の画面中央ではなく左側に「目黒世田谷不動産」の詳細情報が表示された。

会社の詳細情報の「住所」を取得するためのヘッドレスモードのソースである。

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

ブラウザのサイズを「driver.get_window_size()」で取得すると、800x600になっているので、ブラウザを通常表示させてみると、中央に表示するスペースがないため左側に表示された「会社の詳細情報」が、ブラウザの高さが小さいため「住所」が表示されていないことがわかった。
それで、ブラウザのサイズを「driver.set_window_size(ブラウザのwidth, ブラウザのheight)」で1920x1080に変更したら、Element(要素)が見つかり、正常に動作した。

また、これまでの説明とは別にSelenium4では、ヘッドレスモードの設定方法が変更になった。

ブラウザを同じサイズに設定しても、ヘッドレスモードと通常表示モードでは動作が異なることがあるが、現時点では原因不明である。