🐍

[Python] Windows 上で Firefox (+ Selenium) の ディスクアクセスを抑える

2022/03/31に公開

はじめに

筆者は、Windows11上でFirefoxをSeleniumで自動操作することがあります。
裏でその操作を立ち上げていると、System(プロセスID=4)のディスクアクセスが100%になってしまい、PCがまともに操作できないことがしばしばありました。
タスクマネージャーなどで確認すると、Sytemプロセスがディスクアクセスをしているとなっていた。
そのため、アクセスされているファイルがFirefoxのプロファイルにもかかわらず、OS側の問題と思い込んでいました。

最近、ようやくFirefoxの問題だと気が付き、幾つか試したところディスクキャッシュをオフにすることでディスクアクセスを抑えられる事が分かりました。

環境

Windows
エディション	Windows 11 Pro
バージョン	21H2
OS ビルド	22000.556
エクスペリエンス	Windows 機能エクスペリエンス パック 1000.22000.556.0
システムの種類	64 ビット オペレーティング システム、x64 ベース プロセッサ
Python
Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)]
Firefox
Firefox 98.0.2 (64 ビット)
Selenium
selenium           4.1.0
Geckodriver
'moz:geckodriverVersion': '0.30.0'

対策: Firefoxのディスクキャッシュをオフにする

手動で変更する

Firefoxのディスクキャッシュを手動でオフにするには、以下の操作を行います。

  1. アドレスバーに about:config を入力する
  2. 検索バーに browser.cache.disk.enable を入力する
  3. その値を false にする
  4. Firefoxを再起動する

SeleniumでディスクキャッシュをオフにしてFirefoxを起動させる

Seleniumで自動操作する場合は、プロファイルを指定して起動する必要があります。
例えば、以下のようにします。

python
import os.path

from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
from selenium.webdriver.firefox.options import Options as FirefoxOptions

options = FirefoxOptions()
options.add_argument('-safe-mode')
options.set_preference("browser.cache.disk.enable", False)
service = FirefoxService(executable_path="geckodriver.exe", log_path=os.path.devnull)
driver = webdriver.Firefox(service=service, options=options)

driver.get("https://www.google.com/")

最後に

しばらくディスクキャッシュをオフにして使ってみましたが、明らかにディスクアクセスが減り快適になっています。
何故か、メモリ使用量も前より下がっているようです。
自分の環境だけかもしれませんが。

もともとメモリが心許ない環境なのでディスクアクセスが増える事もあるのですが、これは仕方がない気がします。
また、Windows11側の問題もある気がします。

Discussion