Python/ChromeDriverインストールとパスの通し方

  • このエントリーをはてなブックマークに追加

PythonでWebスクレイピングを行う時に、seleniumを使えばGoogle Chromeブラウザを自動操作できるので単純にrequestsだけで出来ない操作ができるようになります。ここではChromeを自動操作する時に必要なchromedriverのインストールとパスの設定までを説明します。

こんにちは。wat(@watlablog)です。
chromedriverは他のパッケージと異なり少々設定がやっかいです。ここではchromedriverのインストールから実際に使えるようにパスを通すという設定までを説明します

当ブログで紹介している内容はWebスクレイピングの一例に過ぎません。僕はPython特化型学習サービス「PyQ(パイキュー)」で基礎を覚えました。体系的にPythonプログラミングやWebスクレイピングを覚えたい方は是非「PyQでPython学習!実際に登録してみた感想と気になる料金」の記事をご覧下さい。

chromedriverのインストール方法

pipでインストールする

chromedriver自体のインストールはpipを使えば簡単にダウンロードしてインストールすることが出来ます。以下のコマンドをコマンドプロンプトに入力することでインストールを開始することが出来ます。

pipでバージョンを指定してインストールする

seleniumを使ってGoogle Chromeを自動操作する場合、Chromeブラウザとchromedriverのバージョンを合わせておく必要があります。

もし古いバージョンのChromeを使わなければいけない状況の場合は、pipでバージョンを指定してインストールする方が確実でしょう。

ちなみに、PyPIのページでchromedriverの最新バージョンを確認することが出来ます。

PyPI:chromedriver-binaryのページ

現在最新のバージョンはトップページにでかでかと書いてあります。

chromedriver-binaryのバージョン確認

その他のインストール可能なバージョンは「Release history」から調べることが出来ますので、自分のChromeブラウザと同じバージョンがどれか調べ、以下のバージョン指定インストールコマンドでインストールを開始しましょう。

chromedriverのパスを通すコード

テストコードでまずは動作確認をする

今回テストするのは以下のコードです。このコードはwebdriverとしてChromeを準備し、Google ChromeでGoogleを開きます。そして5秒間待機した後にブラウザを閉じるという簡単なプログラムです。

seleniumはブラウザを自動操作するためのパッケージですので、まだインストールしていない場合は「python -m pip install selenium」でインストールしておきましょう。

パスを通さなかった時のエラー

chromedriverを無事インストール出来たとしても、いざseleniumを使ってプログラムの動作テストをしてみると以下のエラーに悩まされる人も多くいると思います。

selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

これはchromedriverの実行ファイルまでのパスを通して下さいというエラーメッセージです。

【解決策1】import文を1つ書くだけでパスを通せる

実はPyPIのchromedriver-binary公式ページExampleに答えが書いてあるのですが、「import chromedriver_binary」さえ書いておけば解決します。

以下のコードを実行すると、先ほどのエラーは発生しないでGoogleが開くと思います。

ネットを色々調べると、webdriver.Chrome()の引数にchromedriverの実行ファイルまでのパスを調べて入力しておけば良いという解決策が多いと思いますが、pipでインストールし、公式ページの例に書いてあるimport文による解決策の方が最も簡単なのではないでしょうか?

この方法はimportしたはいいけど、chromedriver_binaryを直接コードで呼び出さないので、PyCharm等のIDE上ではグレー表示されてしまいます。この部分が少々気持ち悪い所でしょうか。

PyCharmの画面例

【解決策2】もっと良い方法がある:auto

なんと、pip install時に「pip install chromedriver-binary-auto」とするだけでこれらのエラーをパス指定無しで解決できるとのこと。知らなかった。

大変有益な情報はPython解説の猫ことまにゃPyさんが教えて下さいました。感謝!

まとめ

seleniumでブラウザを自動操作するために、chromedriver_binaryのインストールとパスを通す方法を紹介しました。

パスを通していないことが原因のエラーはネットで色々情報が出ていますが、今回のimport文によるパス通しが最もシンプルなのではないでしょうか。
→各人の環境によらない。実行ファイルまでのパスを調べなくても良い、といったメリットがあります。

ようやくGoogleを自動で立ち上げるプログラムまで出来るようになりました!次回からはこれまでの技術と併用してみよう!

Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメント

  1. Hiro より:

    Pythonの初学者です。
    Chromedriverを使いスクレーピングの学習をしております。
    上記のコードを入力後に
    WebDriverException: Message: unknown error: Failed to create a Chrome process.
    が出て次に進めません。
    ご教授頂けると大変助かります。
    環境はWin10でAnaconda3(jupyter notebook)を使用しております。
    よろしくお願いします。

    1. wat より:

      ご訪問ありがとうございます!
      Chromeのバージョンを変更したりしても僕の環境ではそのようなエラーが出ないので推測になりますが、もしかするとPCの環境によるものかも知れません。
      こちら「https://stackoverflow.com/questions/59614264/selenium-common-exceptions-webdriverexception-message-unknown-error-failed-to」のページに同様のエラーの方がいらっしゃいました。
      「However most possibly you are executing your test as an administrator」や「Solution Execute your test as a non-administrator / non-root user.」とあるように、ユーザ種類も関係しているかも知れません。
      こちら「https://tutorialmore.com/questions-1496239.htm」のページにも管理者権限の話がありました。
      (WindowsのログインユーザがAdministrator権限があるかどうか?)

      一度ご利用のユーザアカウント(コントロールパネル→ユーザーアカウント)を調べてみてはいかがでしょうか?
      ダイレクトな解決策とならないかもしれず、曖昧な提案申し訳ございません!

      1. Hiro より:

        早速のご返答ありがとうございます。
        ご指摘いただいたユーザーアカウントにて権限を変更し無事に動作いたしました。
        どうにもならなく困っていましたので大変助かりました。
        ありがとうございました。

        1. wat より:

          ご返信ありがとうございます!
          解決したようで何よりです。
          今後も何かお困りの際はコメントかTwitterでご質問下さい。

  2. Hiro より:

    ありがとうございます。
    今後ともよろしくお願いいたします。

  3. minomonchan より:

    Pathが通ってないというエラーが出て困っていました。import chromedriver_binaryを追加するとうまく行きました。ありがとうございます。

  4. Frio より:

    はじめまして。
    ブラウザの立ち上げコマンドでエラーが出ていましたが、
    こちらの記事を参考にさせていただいたところ、無事にブラウザが立ち上がりました。
    ありがとうございます。

    1. wat より:

      ご訪問ありがとうございます。
      そしてご報告もありがとうございました。
      今後ともよろしくお願いします!

wat へ返信する コメントをキャンセル

*