Oracle Cloud Infrastructure (OCI) でSeleniumを動かしたときのメモ
arm64ということもあり色々ハマったが、適切にやればすぐできる
環境
イメージ: 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
でバージョンが一致すると思う。私はこれやったら一致してプログラムが動くようになった。