😺

[Python]Selenium + Chrome でブラウザを自動操作

2021/05/03に公開

前提

すでにPythonの環境が整っていることを前提とします。

環境

  • Python 3.6
  • selneium 1.14.1

インストール方法

ライブラリインストール

#condaの場合
$ conda install -c conda-forge selenium
$ conda install -c conda-forge python-chromedriver-binary
#pipの場合
$ pip install selenium
$ pip install python-chromedriver-binary

Chrome Canary

以下からインストール
https://www.google.com/intl/ja/chrome/canary/

設定のサンプル

import chromedriver_binary
from selenium import webdriver

options = webdriver.ChromeOptions()

# chromeの実行ファイルが格納されているパスを指定する。標準のChromeの使用であれば特に設定は必要ないが、Canaryを指定したい場合は必要な項目
# Macの場合こんな感じみたい。Windowsの場合はショートカットやショートカットのリンク先のパスを指定すればOK
# 指定しない場合はこの行自体なくてよい。以下の要領で適宜指定。
options.binary_location = '/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome'

#headlessの指定をする場合、以下が必要
options.add_argument('--headless')

#ダウンロードフォルダを変更する設定
#特にしなくてもいい設定が混じっていると思うのでうまくやってください。(丸投げ)
prefs = {}
prefs['download.default_directory'] = download_path
prefs['download.directory_upgrade'] = True
prefs['download.extensions_to_open'] = ''
prefs['download.prompt_for_download'] = False
prefs['safebrowsing.enabled'] = True
options.add_experimental_option("prefs", prefs)

#chromeのドライバをconda, pip 以外でダウンロードすると、パスが通っていないため、
#自分でパスを通す必要がある
#driver_path = 'path/to/chromedriver'
#driver = webdriver.Chrome(chromedriver_path, options=options)
driver = webdriver.Chrome(options=options)

# Google検索画面にアクセス
driver.get('https://www.google.co.jp/')

# ブラウザーを終了
driver.quit()

webdriverとブラウザのバージョンが合わないとき

こんなエラーが出ます

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 79

この時のブラウザのバージョンは78でした。ブラウザとdriverの対応バージョンを合わせる必要があります。

【解決方法その1]】ブラウザのバージョンを上げる

もし、chrome自体が、最新のバージョンになっていないなら上げるべきでしょう。

【解決方法その2】インストーするwebdriverのバージョンを変える

自分が使いたいchromeのバージョンに合わせた、python-chromedriver-binaryをインストールする。

(例)chromeバージョン78に合わせたいなら。。。

それぞれのパッケージ管理ソフトに合わせた、公式サイトからこれまでのリリースの履歴を確認して、よさげなパッケージをインストールします。

仮想環境で分けたりしていない場合は、ダウングレードもしくはアップグレードになるので複数のバージョンを両立できないことに気を付けましょう

それぞれ履歴から探した結果これが良さそうだということでインストールします。

condaの場合

参考URL https://anaconda.org/conda-forge/python-chromedriver-binary/files

$ conda install -c conda-forge python-chromedriver-binary==78.0.3904.70.0

pipの場合

参考URL https://pypi.org/project/chromedriver-binary/#history

$ pip install python-chromedriver-binary==78.0.3904.70.0

chromedriverを手動でダウンロードしたとき

condaやpipなどのパッケージ管理ツールを使わずに、ドライバをダウンロードしたときは、そのパスを指定してやる必要があるので気を付けましょう。

以下の例では、ダウンロードフォルダに入れちゃってますが、chromedriverを使うプロジェクトのどこかのフォルダにでも入れておくとよいでしょう。

import chromedriver_binary
from selenium import webdriver

driver = webdriver.Chrome('ドライバのパス')

#windowsの例
# driver = webdriver.Chrome('C:\\Users\\username\\Downloads\\chromedriver\\chromedriver.exe')

Discussion