arm64のUbuntuでPython+Seleniumを動かす方法

Oracle Cloud Infrastructure (OCI) でSeleniumを動かしたときのメモ

arm64ということもあり色々ハマったが、適切にやればすぐできる

環境

シェイプ: VM.Standard.A1.Flex

イメージ: Canonical-Ubuntu-22.04-aarch64-2022.08.10-0

やり方

sudo apt update
sudo apt upgrade

はやっておいた後、

sudo apt install python3-selenium

するだけ。これだけでchromium関連のものとpipにseleniumがインストールされるっぽい。そのため自分で

pip install selenium

chromiumのインストールをする必要はない。ただしインストールされるseleniumのバージョンは、執筆時点では最新版ではなく4.0.0a1だったため注意が必要かもしれない。

Pythonのコード側の注意

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--headless')
# または options.headless = True
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--remote-debugging-port=9022')
driver = webdriver.Chrome(options=options)

とする必要がある。上3つのoptionが必要そうなことは調べればすぐ分かると思うが、一番下は気付くのに時間がかかった。SSH接続越しに利用するときは必要っぽい。ポート開放も必要かも? ここが上手くいってないと

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed.
  (unknown error: DevToolsActivePort file doesn't exist)

のようなエラーが出るはず。chromedriverなどのパスの指定や、start-maximized、disable-infobars、--disable-extensionsのオプション指定の必要はなかった。これらの対策をしてもエラーが出るときは Issues · SeleniumHQ/selenium · GitHub で解決策を探すのもありかも

その他

chromium関連のバージョンを合わせたいときに

pip install chromedriver-binary=***

を使ってみたがこれは上手くいかず、

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
(The process started from chrome location {binaryのパス} is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

のようになってしまう(パスは忘れた)。このbinaryのパスでchromeを起動すると分かるが、上手く起動できずクラッシュしてしまう。軽くググってみても原因は分からなかった(このライブラリのGitHubのIssueにもなかった)。arm64であることが影響しているのだろうか?

その他2

元々私はここ(arm64のubuntuにchromium, chromedriverを入れる方法 | さらいふ)を参考にインストールを進めようとしていた。しかし、最新版のビルドが終わってなかったため少し古めの(バージョン90だったと思う)をインストールしたところバージョンのズレが生まれ苦しむことになった(ここを参考にする前にすでにsudo apt install python3-seleniumを実行していたり他の方法でchromiumを入れようとしていたりなどでバージョンがごちゃごちゃになっていた気がする)。もしそうなってしまった場合は

apt search chromium

chromium関連のパッケージを探し、

chromium-browser/jammy,now upgradable to 1:85.0.4183.83-0ubuntu2 arm64
chromium-chromedriver/jammy,now upgradable to 1:85.0.4183.83-0ubuntu2 arm64

のような表示があって(うろ覚え)upgradableなバージョンが一致していれば

sudo apt update
sudo apt upgrade

でバージョンが一致すると思う。私はこれやったら一致してプログラムが動くようになった。