PythonでWebスクレイピングを行う時に、seleniumを使えばGoogle Chromeブラウザを自動操作できるので単純にrequestsだけで出来ない操作ができるようになります。ここではChromeを自動操作する時に必要なchromedriverのインストールとパスの設定までを説明します。
こんにちは。wat(@watlablog)です。
chromedriverは他のパッケージと異なり少々設定がやっかいです。ここではchromedriverのインストールから実際に使えるようにパスを通すという設定までを説明します!
当ブログで紹介している内容はWebスクレイピングの一例に過ぎません。僕はPython特化型学習サービス「PyQ(パイキュー)」で基礎を覚えました。体系的にPythonプログラミングやWebスクレイピングを覚えたい方は是非「PyQでPython学習!実際に登録してみた感想と気になる料金」の記事をご覧下さい。
chromedriverのインストール方法
pipでインストールする
chromedriver自体のインストールはpipを使えば簡単にダウンロードしてインストールすることが出来ます。以下のコマンドをコマンドプロンプトに入力することでインストールを開始することが出来ます。
1 |
python -m pip install chromedriver-binary |
pipでバージョンを指定してインストールする
seleniumを使ってGoogle Chromeを自動操作する場合、Chromeブラウザとchromedriverのバージョンを合わせておく必要があります。
もし古いバージョンのChromeを使わなければいけない状況の場合は、pipでバージョンを指定してインストールする方が確実でしょう。
ちなみに、PyPIのページでchromedriverの最新バージョンを確認することが出来ます。
現在最新のバージョンはトップページにでかでかと書いてあります。
その他のインストール可能なバージョンは「Release history」から調べることが出来ますので、自分のChromeブラウザと同じバージョンがどれか調べ、以下のバージョン指定インストールコマンドでインストールを開始しましょう。
1 |
python -m pip install chromedriver-binary==76.0.3809.68.0 |
chromedriverのパスを通すコード
テストコードでまずは動作確認をする
今回テストするのは以下のコードです。このコードはwebdriverとしてChromeを準備し、Google ChromeでGoogleを開きます。そして5秒間待機した後にブラウザを閉じるという簡単なプログラムです。
seleniumはブラウザを自動操作するためのパッケージですので、まだインストールしていない場合は「python -m pip install selenium」でインストールしておきましょう。
1 2 3 4 5 6 7 |
import time # スリープを使うために必要 from selenium import webdriver # Webブラウザを自動操作する(python -m pip install selenium) driver = webdriver.Chrome() # Chromeを準備 driver.get('https://www.google.com/') # Googleを開く time.sleep(5) # 5秒間待機 driver.quit() # ブラウザを閉じる |
パスを通さなかった時のエラー
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が開くと思います。
1 2 3 4 5 6 7 8 |
import time # スリープを使うために必要 from selenium import webdriver # Webブラウザを自動操作する(python -m pip install selenium) import chromedriver_binary # パスを通すためのコード driver = webdriver.Chrome() # Chromeを準備 driver.get('https://www.google.com/') # Googleを開く time.sleep(5) # 5秒間待機 driver.quit() # ブラウザを閉じる |
ネットを色々調べると、webdriver.Chrome()の引数にchromedriverの実行ファイルまでのパスを調べて入力しておけば良いという解決策が多いと思いますが、pipでインストールし、公式ページの例に書いてあるimport文による解決策の方が最も簡単なのではないでしょうか?
この方法はimportしたはいいけど、chromedriver_binaryを直接コードで呼び出さないので、PyCharm等のIDE上ではグレー表示されてしまいます。この部分が少々気持ち悪い所でしょうか。
【解決策2】もっと良い方法がある:auto
なんと、pip install時に「pip install chromedriver-binary-auto」とするだけでこれらのエラーをパス指定無しで解決できるとのこと。知らなかった。
大変有益な情報はPython解説の猫ことまにゃPyさんが教えて下さいました。感謝!
まとめ
seleniumでブラウザを自動操作するために、chromedriver_binaryのインストールとパスを通す方法を紹介しました。
パスを通していないことが原因のエラーはネットで色々情報が出ていますが、今回のimport文によるパス通しが最もシンプルなのではないでしょうか。
→各人の環境によらない。実行ファイルまでのパスを調べなくても良い、といったメリットがあります。
ようやくGoogleを自動で立ち上げるプログラムまで出来るようになりました!次回からはこれまでの技術と併用してみよう!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!
Pythonの初学者です。
Chromedriverを使いスクレーピングの学習をしております。
上記のコードを入力後に
WebDriverException: Message: unknown error: Failed to create a Chrome process.
が出て次に進めません。
ご教授頂けると大変助かります。
環境はWin10でAnaconda3(jupyter notebook)を使用しております。
よろしくお願いします。
ご訪問ありがとうございます!
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権限があるかどうか?)
一度ご利用のユーザアカウント(コントロールパネル→ユーザーアカウント)を調べてみてはいかがでしょうか?
ダイレクトな解決策とならないかもしれず、曖昧な提案申し訳ございません!
早速のご返答ありがとうございます。
ご指摘いただいたユーザーアカウントにて権限を変更し無事に動作いたしました。
どうにもならなく困っていましたので大変助かりました。
ありがとうございました。
ご返信ありがとうございます!
解決したようで何よりです。
今後も何かお困りの際はコメントかTwitterでご質問下さい。
ありがとうございます。
今後ともよろしくお願いいたします。
Pathが通ってないというエラーが出て困っていました。import chromedriver_binaryを追加するとうまく行きました。ありがとうございます。
はじめまして。
ブラウザの立ち上げコマンドでエラーが出ていましたが、
こちらの記事を参考にさせていただいたところ、無事にブラウザが立ち上がりました。
ありがとうございます。
ご訪問ありがとうございます。
そしてご報告もありがとうございました。
今後ともよろしくお願いします!