【Python】スクレイピングで要素のIDやNAMEが取得できないときの原因と対処法(Seleniumのバージョン違い)

目次

はじめに

PythonでSeleniumを使ってWebスクレイピングのプログラムを作成し、依頼者のパソコンで動作確認を行ったところ、要素の取得部分でエラーが発生しました。
具体的には、.find_element_by_id()などのメソッドでエラーが出てしまい、正常に動作しませんでした。

本記事では、その原因と対応方法について、実際の経験をもとにまとめました。

原因:Seleniumのバージョンが異なる

結論から申し上げますと、私の開発環境では「Selenium 3」を使用していたのに対し、依頼者の環境では「Selenium 4」がインストールされていたため、バージョン間の構文の違いが原因でエラーが発生していました

Selenium 4では、要素を取得するための記述方法が大きく変更されています。Selenium 3で使用されていたfind_element_by_id()find_element_by_name()などのメソッドは、Selenium 4では非推奨(もしくは廃止)となっています。

Seleniumのバージョンを確認する方法

まずは、使用しているSeleniumのバージョンを確認します。

  1. コマンドプロンプトまたはターミナルを開きます。
  2. Pythonインタプリタを起動します(pythonまたはpython3と入力)。
  3. 以下のコードを実行します。
import selenium
print(selenium.__version__)

これで、インストールされているSeleniumのバージョンが確認できます。

Selenium 3とSelenium 4の構文の違い

以下に、バージョンによる要素取得の記述の違いを示します。

IDで要素を取得する場合

  • Selenium 3の場合: pythonコピーする編集するdriver.find_element_by_id("xxxx")
  • Selenium 4の場合: pythonコピーする編集するfrom selenium.webdriver.common.by import By driver.find_element(By.ID, "xxxx")

NAMEで要素を取得する場合

  • Selenium 3の場合: pythonコピーする編集するdriver.find_element_by_name("xxxx")
  • Selenium 4の場合: pythonコピーする編集するfrom selenium.webdriver.common.by import By driver.find_element(By.NAME, "xxxx")

Selenium 4では、.find_element_by_xxx()形式のメソッドはすべて廃止され、代わりにByクラスを使った新しい構文が採用されています。構文の違いに気付かず旧式の書き方をしてしまうと、正常に動作しなくなります。

補足:他の属性による要素取得

IDやNAME以外にも、クラス名、CSSセレクタ、XPathなどを使用して要素を取得する方法があります。Selenium 4ではこれらもすべてByを使って記述します。

例:

driver.find_element(By.CLASS_NAME, "xxx")
driver.find_element(By.XPATH, "//div[@id='xxx']")

詳細は公式ドキュメントや最新のライブラリ仕様をご確認いただくのが確実です。

おわりに

Seleniumを使ったスクレイピングでは、バージョンの違いが思わぬエラーの原因になることがあります。動作環境を確認し、バージョンに合った構文で記述することが重要です。

本記事が同じようなエラーでお困りの方の参考になれば幸いです。
最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次