🤖

chrome拡張をseleniumのブラウザに取り込む

2023/08/26に公開

はじめに

第三者のchrome拡張を使ったwebサイトのend2endのテスト環境を作ってみたところ、
手作業をけっこう減らせたのでこの記事にまとめておきます。

環境

  • macOS:m2
  • Python 3.10.6
  • selenium 4.11.2

実行方法

git clone https://github.com/GoogleChrome/chrome-extensions-samples.git
mkdir sample; cp ./chrome-extensions-samples/functional-samples/tutorial.hello-world/* ./sample/

openssl genpkey -algorithm RSA -out my-extension.pem
openssl pkcs8 -topk8  -inform PEM -outform PEM -in my-extension.pem -out my-extension_pkcs8.pem -nocrypt
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
    --pack-extension=./sample \
    --pack-extension-key=./my-extension_pkcs8.pem

python main.py

説明

https://github.com/GoogleChrome にChrome拡張のサンプル集があるのでそこからdownloadした後に、最も簡単なhello worldのサンプルをコピーしてきます。

git clone https://github.com/GoogleChrome/chrome-extensions-samples.git
mkdir sample; cp ./chrome-extensions-samples/functional-samples/tutorial.hello-world/* ./sample/

次に、.crxファイルを作成します。(.crxファイルはブラウザからでも作れるので、この作業を置き換えることは可能)

openssl genpkey -algorithm RSA -out my-extension.pem
openssl pkcs8 -topk8  -inform PEM -outform PEM -in my-extension.pem -out my-extension_pkcs8.pem -nocrypt
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
    --pack-extension=./sample \
    --pack-extension-key=./my-extension_pkcs8.pem

pythonでseleniumにやらせたい処理を実行

python main.py

main.py

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chrome.options import Options

service = ChromeService(executable_path="/opt/homebrew/bin//chromedriver")
options = Options()
#options.add_argument('--headless')
options.add_extension("./sample.crx")

driver = webdriver.Chrome(service=service,options=options)

# seleniumにやらせたい処理を書く

time.sleep(10)

options.add_extension("./sample.crx")が .crxファイルを読み込む処理です。

手作業

うまくいけば、拡張機能をclickしたときに、hello worldとpop upが表示されます。

※拡張機能をclickするという操作をseleniumから実行する方法は見つけられませんでした。

最後に

・おおむねやりたいことはできたのでよし
・chatGPTに.crxファイルの作成方法を聞いたらすぐ解決してくれた 便利
・拡張機能をclickするテストは手作業でやらないといけない状況なのでやや不便

GitHubで編集を提案

Discussion