seleniumのChromeブラウザに普段使ってる拡張機能を追加する

pythonでブラウザの操作を自動化しようとseleniumを使ってみました。起動されるChromeブラウザに拡張機能が入っていなくて困ったので、拡張機能を有効にして起動する方法について記載します。

環境

  • Windows10
  • python3.9
  • Chrome 89
  • VSCode

selenuimのインストール

selenuiumをインストールします。

PS > python -m pipenv install selenuium

Chromeを操作するためのChromeDriverをインストールします。使用しているChromeのバージョンに合わせたドライバを使う必要があります。Chromeの「ヘルプ → Google Chromeについて」でブラウザのバージョンを確認します。

Chromeのバージョンを入力してChromeDriverをインストールします。ChromeDriverのバージョンを確認してインストールする方がいいかもしれません。今回は「88.0.4324」用のChromeDriverで新しいものをインストールする場合のコマンドを記載します。

PS > python -m pipenv install chromedriver-binary~=88.0.4324

非ヘッドレスモードで起動することを確認します。chromedriver_binaryをimportすることでパスを通さなくてもChromeDriverが使えるようになります。venv環境を使っていてチーム開発をしている場合はこのような実装にしておくと共有しやすいと思います。

from selenium import webdriver
import chromedriver_binary
import time

driver = webdriver.Chrome()
driver.get('https://www.yahoo.co.jp/')

Chromeが無事に立ち上がったら成功です。この時に拡張機能やブックマークも空になっていることが確認できます。拡張機能が使えるようにしていきます。

Chrome拡張機能をパッケージ化する

pythonから操作するときに有効にしたい拡張機能をパッケージ化します。Chromeで「その他のツール → 拡張機能」を開くか「chrome://extensions」を開きます。デベロッパーモードをONにしてパッケージ化する拡張機能のIDを確認します。上部に表示されている「拡張機能をパッケージ化」ボタンを押して、拡張機能が格納されているフォルダを選択します。

Windowsの場合は、「C:\Users\<ユーザ名>\AppData\Local\Google\Chrome\User Data\Default\Extensions\<拡張機能のID>\<拡張機能のバージョン>」となります。拡張機能のバージョン名のフォルダを選択するとcrxファイルが作成されます。

今回は作成されたcrxファイルをプロジェクトフォルダ以下に「extensions」フォルダを作成して格納しました。拡張機能を追加してChromeを起動するためには以下のようにコードを記載します。

from selenium import webdriver
import chromedriver_binary

# Chromeを起動するためのオプションに拡張機能を追加する
chrome_options = webdriver.ChromeOptions()
chrome_options.add_extension('./extension/<作成した拡張機能パッケージ>.crx')

driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.yahoo.co.jp/')

Chromeのプロファイルを作成して読み込ませる

ここまでの情報だけだと、認証情報や拡張機能の設定が毎回初期化されてしまいます。自動操作時も拡張機能を有効にして実行したいのでプロファイルを読めるようにしていきます。プロジェクトにprofileフォルダを作成してプロジェクトフォルダ以下に設定を保存します。

from selenium import webdriver
import chromedriver_binary

chrome_options = webdriver.ChromeOptions()
chrome_options.add_extension('./extension/<作成した拡張機能パッケージ>.crx')

# Chromeを起動するためのオプションにプロファイルを追加する
chrome_options.add_argument('--user-data-dir=./profile')

driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.yahoo.co.jp/')

pythonから起動したChromeの設定を変更した場合はこのプロファイルに設定が保存されるので、次回以降も設定内容が引き継がれます。