PythonでChromeDriverによりSelenium操作

PythonでChromeDriverによりSelenium操作 プログラミング

「プログラムでブラウザの操作を自動化したい」
「Pythonでブラウザを操作したい」
「PythonでSeleniumを利用したい」

このように考えている方に向けた記事となります。
そして、ある程度の知識とスキルがある方向けの記事とも言えます。
そのため、「Selenium(セレニウム)とは」、「Seleniumの使い方」という説明はしません。

本記事の内容

  • Seleniumのインストール
  • WebDriverの説明
  • WebDriver(ChromeDriver)のインストール
  • PythonでChromeDriver経由してSeleniumを利用する

Pythonの開発環境は、すでに整っている前提で説明を進めます。
それでは、まずはSeleniumのインストールの説明です。

Seleniumのインストール

Pythonのバージョンは、2系でも3系でも関係ありません。
両方、大丈夫です。
ただ、3系に早く切り替えたほうがいいみたいですね。

Seleniumのインストールに話を戻します。
以下がインストール用のコマンドです。

pip install selenium

「何これ?」と思う方は、Anacondaのインストールからおススメします。

おそらく、インストールは何事もなかったかのように成功するはずです。
簡単でしたね。

WebDriverの説明

WebDriverについての説明をします。
極力、簡単に説明します。

ついてきてください。
面倒なら、次の「 WebDriver(ChromeDriver)のインストール」へどうぞ。

WebDriverの説明を開始します。

Python単体では、ブラウザを操作できません。
ブラウザを操作できるのは、Seleniumです。
このままでは、Pythonはブラウザを操作できません。

そこで、WebDriverが救世主として現れます。
PythonとSeleniumの間に立ってくれます。

Python—WebDriver—Selenium

間に立って、Pythonの指示をSeleniumに送ります。
WebDriver経由で送られた指示により、Seleniumはブラウザを動かします。
そして、その動かした結果をWebDriverを通じてPythonに戻します。

つまり、WebDriverはPythonとSeleniumの間に入る仲介業者ということです。
不動産の賃貸業者と思えば、大丈夫かと思います。

そのWebDriverは、それぞれブラウザの数だけ存在しています。

  • ChromeDriver
  • FirefoxDriver
  • EdgeDriver
  • InternetExplorerDriver
  • OperaDriver
  • SafariDriver

名前だけみれば、どのブラウザのモノかはわかりますね。
そして、今回はいくつかある仲介業者からChromeDriverを選択しています。

理由は簡単です。
最も多く利用されているからです。
一番人気ということですね。

WebDriver(ChromeDriver)のインストール

一番人気のWebDriverであるChromeDriverのインストールを説明します。
インストール方法には、2つの方法が用意されています。

  • バイナリのダウンロード
  • pipでインストール

バイナリのダウンロード

以下にアクセスします。
ChromeDriver – WebDriver for Chrome

ChromeDriverのダウンロードサイト

利用中のChromeのバージョンを確認。

Chromeのバージョン確認

83ですね。
よって、「ChromeDriver 83.0.4103.39」リンクをクリック。

ChromeDriverのダウンロードサイト詳細

OSに合ったChromeDriverをダウンロードします。
ダウンロード後、解凍します。

実行ファイルが確認できると思います。
Windowsであれば、「chromedriver.exe」です。

このバイナリの実行ファイルをPythonから利用する方法は2つあります。

  • 環境変数のPATHにバイナリのパスを追加する
  • プログラム中にバイナリのパスを指定する

個人的には、環境変数に追加をしたくないのでプログラム中で指定します。
環境変数は、字のごとく環境に依存するので管理が大変になりがちです。

pipでインストール

ChromeDriverをPythonでのみ利用するなら、こちらのインストールがおススメです。
普通は、こちらの方が多いかもしれません。

pip install chromedriver-binary

ただし、上記のままだとChromeのバージョンと合わない可能性が高いです。
バージョン指定がないと、最新バージョンをダウンロードするようになっているからです。

Successfully built chromedriver-binary
Installing collected packages: chromedriver-binary
Successfully installed chromedriver-binary-84.0.4147.30.0

逆のパターンなら、問題はありません。
逆とは、ChromeのバージョンがChromeDriverのバージョンより大きい場合です。
実際、ChromeDriverとChromeのバージョンが合わなくても動いているのは確認済みです。

そうじゃないと、Chromeのバージョンが上がるにつれて、ChromeDriverも更新しないといけません。Chromeなんて自動でバージョンアップするので、面倒極まりないですよね。

しかし、今回はChromeのバージョンがChromeDriverのバージョンより小さいです。
このケースでのトラブルが、頻繁に報告されています。
そのため、ChromeDriverのバージョンを指定してインストールしなければなりません。

よって、Chromeのバージョンを設定してインストールコマンドを実行します。
まずは、同じChromeとバージョンを指定。

pip install chromedriver-binary==83.0.4103.97

なんと、エラー!!
バージョンが見つからないと。

ChromeDriverのpipでのインストールにおけるエラー画面

選択可能なバージョンをご丁寧に教えてくれています。
Chromeのバージョンより大きくなく最も新しいのは、「83.0.4103.39」です。
これは、バイナリのバージョンと同じですね。

では、バージョンを改めてインストール実行。

pip install chromedriver-binary==83.0.4103.39

結果は以下。

Successfully built chromedriver-binary
Installing collected packages: chromedriver-binary
Successfully installed chromedriver-binary-83.0.4103.39.0

指定したバージョンのChromeDriverをインストールできました。
インストールは以上です。

PythonでChromeDriver経由してSeleniumを利用する

インストール方法が2種類ありました。
そして、さらに環境変数の取り扱いの有無により、対応が分かれました。
よって、合計3種類のプログラムの書き方が存在します。

書き方と言っても、WebDriverを呼び出す箇所となります。
呼び出して以降は、もちろん書き方の違いはありません。

バイナリのダウンロード

環境変数のPATHを追加するパターンとしないパターンがありました。
それぞれを実行して、問題なければブラウザ(Chrome)が自動的に立ち上がります。

環境変数のPATHに追加あり

from selenium import

webdriverdriver = webdriver.Chrome()

環境変数のPATHに追加なし

from selenium import webdriver

driver = webdriver.Chrome("C:\chromedriver.exe")

バイナリの実行ファイルのパス指定が必要です。
例は、Cドライブ(Windows)の直下にバイナリファイルを設置した場合です。

pipでインストール

from selenium import webdriver
import chromedriver_binary

driver = webdriver.Chrome()

「import chromedriver_binary」を追記しています。

まとめ

以上により、PythonでChromeDriver経由してブラウザを立ち上げることができました。
そして、Seleniumを使ってガシガシとブラウザ操作の自動化が可能です。

自動化するのは、スクレイピングがメインになると思います。
また、ECサイトでの自動購入も対象にはなるのでしょう。
そういった処理に関しては、別途機会があればまとめていきます。

追記 2021年4月24日
本記事の内容より、さらにわかりやすくSeleniumのインストールをまとめました。

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