Ubuntu22.04では普通にFirefoxでSeleniumを使えない

Snapというパッケージ管理ソフトによってサンドボックス化されたFirefoxが標準で入っているが、このFirefoxではSeleniumを扱うことができない(一応うまく設定するとできるらしいが面倒くさそう)
ビルド済みのtarをダウンロードしてきて手動でインストールしないとGeckodriverが使えないらしい。

追記1:
まずはmozillaのサイトからビルド済みバイナリをダウンロードしてきて公式の手順に従ってコマンドを叩きマニュアルインストールする。
webdriver-managerを使いたい場合既に入れているgeckodriverがある場合は削除しておく。
以下のコードを叩く。

# selenium 4
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.firefox import GeckoDriverManager

option = webdriver.FirefoxOptions()
option.binary_location = '/opt/firefox/firefox'
driver = webdriver.Firefox(options=option, service=FirefoxService(GeckoDriverManager().install()))
driver.get('http://google.com')

これできちんと動作した。
注意点: 公式のインストールでは/usr/bin/firefoxに/opt/firefox/firefoxのシンボリックリンクを作成している。しかし、この状態でfirefoxコマンドを叩くと/usr/bin/firefox経由で起動され、snapを入れろという警告が出て起動できない。よってseleniumに渡す実行ファイルのパスは/usr/bin/firefoxではダメでオリジナルの/opt/firefox/firefoxでなければならない。
この問題を解決するためにはsnapのゴミをすべて取り除いてめんどくさい設定をしなければならないように思われる。

追記2:
まず/usr/bin/firefoxを調べたところシェルスクリプトが置かれていた。テキストエディタで中身を見ると警告メッセージが書かれていたためこれの動作を無効化すればよいと判断しリネームしたところ、firefoxでcommand not foundになった。この状態でパスを/opt/firefoxに通してみたがうまくいかなかった。どこかにfirefoxコマンドを/usr/bin/firefoxにするようなゴミが残っていると判断した。
sudo apt remove firefoxでゴミがあることを確認して削除したところ、firefoxコマンドでcommand not foundが出たため正しく除去できたと考え、/opt/firefox/firefoxのシンボリックリンクを/usr/bin/firefoxに作成したところfirefoxコマンドが正常に動作するようになった。seleniumのバイナリ指定先を/usr/bin/firefoxに戻しても正常に動作した。

この記事が気に入ったらサポートをしてみませんか?