🦊

Ubuntu上のSnap版Firefoxをgeckodriver(0.31.0)(Selenium)で動かす時の注意

2022/06/23に公開

はじめに

環境をUbuntuに移行してSeleniumでFirefoxを動かそうとしたら以下のエラーに遭遇しました。

ProfileMissing

Linuxを使い慣れていないせいもあってしばらく原因が分かりませんでした。
geckodriverのリリースノートに注意書きが書いてあるので、注意深い人は問題ないと思いますが、同じトラブルで時間を取られる人が減るように記事にしておきます。

環境

Python 3.10.4 (main, Apr 2 2022, 09:04:19) [GCC 11.2.0]
selenium 4.2.0
geckodriver 0.31.0 (b617170ef491 2022-04-06 11:57 +0000)
Firefix 101.0.1(64 bit) Mozilla Firefox Snap for Ubuntu

対策

mozilla/geckodriverの0.31.0のリリースノートに原因が書いてあります。

Known problems
    Firefox running in Linux Sandbox (e.g. Snap package):

    Using geckodriver to launch Firefox inside a sandbox -- for example
    a Firefox distribution using Snap or Flatpak -- can fail with a
    "Profile not found" error if the sandbox restricts Firefox's ability
    to access the system temporary directory. geckodriver uses the
    temporary directory to store Firefox profiles created during the run.

    This issue can be worked around by setting the TMPDIR environment
    variable to a location that both Firefox and geckodriver have
    read/write access to e.g.:

    % mkdir $HOME/tmp
    % TMPDIR=$HOME/tmp geckodriver

    Alternatively, geckodriver may be used with a Firefox install that
    is not packaged inside a sandboxed e.g. from mozilla.org.

要は、$TMPDIRで指定されたディレクトリにgeckodriverがアクセスできれば良いという事です。
つまり以下のようなコマンドを実行すれば動くようになります。

mkdir $HOME/tmp
export TMPDIR=$HOME/tmp
chmod 777 $TMPDIR

Discussion