Apple siliconの乗ったMacを用いてpython+SeleniumでChromeを制御するコードを使っていたのですが、突然遅くなりましてデバッグしました。解決法がわかったので書きます。
なおこちらのエントリーの方も同じ問題に遭遇しているようでした。自分は違うやり方で解決しましたが参考になる場合はこちらもぜひ:
Seleniumのアーキテクチャの確認
まずpython+SeleniumでChromeを立ち上げ、Seleniumが想定しているアーキテクチャを確認します。Chromeが立ち上がったら左上のメニューバーから"Google Chrome"→"Google Chromeについて"を開くと次のような画面が表示されます:
x86_64 translated
と表示されています。自分のMacのアーキテクチャはuname -m
というコマンドを実行すると表示できますが、Apple Siliconなら(現状は)arm64
と表示されるはずです。x86_64
はarm64
とは違うので、arm64
のChromeDriverをダウンロードして指定する必要があります。
試したdriver
今回3種類のdriverを試しました。
1. (失敗) ChromeDriverManagerを用いてInstall
pythonでSeleniumを用いる場合、以下のようにChromeDriverManagerを用いてinstallして使うと簡単です:
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
ただしこのやり方ではx86_64
のままでした。
2. (失敗) driver配布ページからStable版のdriverをダウンロード
このページからStable版のchromedriverをダウンロードし、次のように指定して使用しました:
driver_path = '/path/to/chromedriver-mac-arm64-128/chromedriver'
options = webdriver.ChromeOptions()
chrome_service = webdriver.ChromeService(executable_path=driver_path)
driver = webdriver.Chrome(options=options, service=chrome_service)
なお、2024/09/15現在でのStableのVersionは128.0.6613.137でした。この方法でもx86_64
のままでした
3. (成功) driver配布ページからBeta版のdriverとbinaryをダウンロード
同じページからStable版のchromedriver、およびbinaryをダウンロードし、次のように指定して使用しました:
driver_path = '/path/to/chromedriver-mac-arm64-129/chromedriver'
binary_path = '/path/to/chrome-mac-arm64-129/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing'
options = webdriver.ChromeOptions()
options.binary_location = binary_path
chrome_service = webdriver.ChromeService(executable_path=driver_path)
driver = webdriver.Chrome(options=options, service=chrome_service)
なおbinaryについては次のコマンドを走らせるなどして実行可能にする必要があります:
xattr -cr "/path/to/chrome-mac-arm64-129/Google Chrome for Testing.app"
なお、2024/09/15現在でのBetaのVersionは129.0.6668.42でした。こちらの方法を用いることでarm64
用のchromeが動くようになりました。めでたしめでたし。
(余談)根本原因
Version 128.0.6613.137においてmac-arm64
用として配布されているdriverが実はx86_64
用のものであることが原因のようです。Google groupsでも同様の問題を報告している方がいました:
お役に立てば幸いです。