【ChromeDriverManager】スクレイピングすると「NameError: name ‘driver’ is not defined. Did you mean: ‘webdriver’?」が出る

Python

最近、スクレイピングを勉強し始めたshinです!

今日はPythonのスクレイピングにおいて特定のエラーに直面した経験を共有したいと思います。

特に「Pythonスクレイピング&クローリング データ収集マスタリングハンドブック」という本を参考にしている方は、同じエラーに遭遇する可能性があります。

発生した問題

ChoromeDriverManagerを使ってスクレイピングの環境を設定していた際、以下のエラーメッセージが出現しました。

NameError: name 'driver' is not defined. Did you mean: 'webdriver'?

原因

このエラーは、通常、driverという変数や名前が定義されていない場合に発生します。本の指示に従ってコードを記述していたので、何かコードが抜けているか、または誤った箇所があったのかもしれないと思って、色々調べてましたが全然解決できませんでした。

そうしたら、Amazonのレビューにも同じことが書いてあってそれを元に書くと解決しました!

解決策

解決策は以下の手順になります。

解決手順

  1. 一番上の定義するところに次のコードを入力する
    from selenium.webdriver.chrome.service import Service
  2. 真ん中あたりの以下のコードを書き換える
    # driver = webdriver.Chrome(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

以上の手順を実行することで、無事コードを動かすことが出来ました。

補足

その後も色々調べていたんですが、もっと短いコードで書けることが分かりましたのでそれも共有しておきます。

以下のサイトが勉強になりました!

【Selenium】ChromeDriver自動更新で楽する方法【Python】

Seleniumバージョン4.6以上の方なら少ないコードを減らすことができます。

ちなみにSeleniumのバージョンを調べる方法は以下のコマンドを実行します。

pip show selenium

Name: selenium
Version: 4.12.0
Summary:
Home-page: https://www.selenium.dev
Author:
Author-email:
License: Apache 2.0
Location: d:\python\scraping\.scraping\lib\site-packages
Requires: certifi, trio, trio-websocket, urllib3
Required-by:

自分の場合は「4.12.0」でした。

Selenimuコード

じゃあ実際にどんなコードなのかというと、次のようになります。

from selenium import webdriver

driver = webdriver.Chrome()

ですので、本に書かれているコードを書き直すと次のようになります。

from selenium import webdriver
# from selenium.webdriver.chrome import service as fs → こいつをコメントアウト

# ChromeDriverManagerを使用した場合
# driver = webdriver.Chrome(ChromeDriverManager().install()) → こいつをコメントアウト
driver = webdriver.Chrome()

若干、文字数が減ってすっきりしました!

まとめ

スクレイピングは非常に強力なツールですが、エラーに遭遇することもしばしば。

しかし、エラーメッセージをじっくりと読み、その原因と解決策を一つ一つ確認することで、多くの問題は解決できます。

今回の経験が、皆さんのスクレイピングの冒険を少しでもスムーズに進める手助けとなれば幸いです。

以上です。ありがとうございました。

コメント

タイトルとURLをコピーしました