Table of Contents
はじめに
selenium で Chrome を使っている人は多いと思いますが、誰しもがめんどくさいと思うのが
chromedriver と Chrome のバージョンを都度一致させること。
今回そのめんどくささを解消してくれる chromedriver-binary-auto というライブラリがある
ということで早速使ってみました。
内容
- まずは Chrome をインストール
-
Windows の場合
Google Chromeからインストール -
Ubuntu の場合
# リポジトリの追加$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
# 公開鍵の登録$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
# パッケージリストの更新$ sudo apt update
# インストール$ sudo apt install google-chrome-stable- chromedriver-binary-auto をインストール python-chromedriver-binaryに従う
# 初回のインストール$ pip install chromedriver-binary-auto
# アップデート# Chrome側でアップデートがあったときの対応$ pip install --upgrade --force-reinstall chromedriver-binary-auto- コードの使用例
from selenium import webdriverimport chromedriver_binary
driver = webdriver.Chrome()driver.get("http://www.python.org")よく使うオプション設定
ChromeOptions で、ブラウザの挙動を細かく指定できます。
PDFをダウンロードする
PDFのリンクを開くと、既定ではブラウザ内のビューアで表示されてしまい、ファイルが保存されません。ダウンロード先の指定と、ビューアを使わない設定を組み合わせます。
import os
from selenium import webdriver
options = webdriver.ChromeOptions()options.add_experimental_option( "prefs", { # ダウンロード先のフォルダを指定する "download.default_directory": os.path.join(os.getcwd(), "download"), # ブラウザ内でPDFを開かず、ダウンロードさせる "plugins.always_open_pdf_externally": True, },)
driver = webdriver.Chrome(options=options)driver.get("https://example.com/sample.pdf")ヘッドレスで動かす
画面を表示せずに実行します。サーバー上で動かす場合に必須です。
options.add_argument("--headless")options.add_argument("--disable-gpu")options.add_argument("--no-sandbox")options.add_argument("--disable-dev-shm-usage")トラブルシューティング
バージョン不整合エラーが発生した場合
Chrome が自動アップデートされた際に、以下のようなエラーが発生することがあります。
The chromedriver version (134.0.6998.90) detected in PATH at /path/to/chromedriver might not be compatible with the detected chrome version (138.0.7204.183); currently, chromedriver 138.0.7204.183 is recommended for chrome 138.*, so it is advised to delete the driver in PATH and retry解決方法: 手動でChromedriverを削除
エラーメッセージに表示されたパスのchromedriverファイルを手動で削除します。
# エラーメッセージのパスを確認して削除$ rm /path/to/env/lib/python3.10/site-packages/chromedriver_binary/chromedriverその後、Pythonコードを再実行すると、適切なバージョンのchromedriverが自動的にダウンロードされます。
