RSeleniumが変なエラー吐いて落ちた! <- docker内の dev/shm の容量不足が原因だった件


鼻歌まじりにWEBクロールしていて、突如の悪魔の囁き...

Selenium message:unknown error: session deleted because of page crash from unknown error: 
cannot determine loading status

げ、なんだよこれ。

変な書き方してたかな...とまずは自分を疑いコードを見直すも、
どこもおかしい所は無い。

【追記 2019/7/11】

まずは解決策

docker run -it --shm-size=1024m ...

/dev/shm の容量が足りないこと、dockerのデフォルトが64MBであることが原因なので、
docker runの時に指定してあげるとどのホストOSでも動くと思います。(Macで確認)

Linux hostであれば下記の解決策、
"-v /dev/shm:/dev/shm" コンテナ内からホスト側の/dev/shm にマウントしてしまうのが一番メモリのムダが無いです。

以下は以前のバージョンです:

...えー...
てわけでエラーメッセージでググります:

これだ!
SO先生偉い!

unknown error: session deleted because of page crash from unknown error: cannot determine loading status from tab crashed with ChromeDriver Selenium

原因としては
「dockerコンテナ内で起動すると、/dev/shm が凄く小さいので溢れて落ちることがある」
のだそうで。

ここでDebanjanBさんより示されている対策は3つ:

ホストの /dev/shm を使う - docker run に以下を追加

-v /dev/shm:/dev/shm

/dev/shm を大きくしてリマウント: コンテナ内から

sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm

chrome_optionsに以下のどちらかを追加:

# sandboxを無効に (あれ?すでにやってるけど)
chrome_options.add_argument('--no-sandbox')   

# shm を無効に (遅くなるとのこと)
chrome_options.add_argument('--disable-dev-shm-usage')

自分は -v /dev/shm:/dev/shm を足して起動する方法で解決しました!
(Linuxホストじゃないと使えないかも?)

逆に二番目はエラーで実行出来ませんでした。
3番めは試していません。

もし同じエラーで困った方が居たら参考になれば幸いです。