
私はSeleniumを使ってヘッドレスでChromiumを実行しています。
たくさんのセッションを実行すると、たくさんのtmpファイルが/tmp
drwx------ 3 nick nick 4.0K Jul 28 05:00 .org.chromium.Chromium.OpPRkQ
drwx------ 3 nick nick 4.0K Jul 29 00:00 .org.chromium.Chromium.tAwQZu
drwx------ 3 nick nick 4.0K Jul 29 00:00 .org.chromium.Chromium.JiqQZu
drwx------ 3 nick nick 4.0K Jul 29 00:00 .org.chromium.Chromium.7Vce75
drwx------ 3 nick nick 4.0K Jul 29 00:00 .org.chromium.Chromium.r5ITam
drwx------ 3 nick nick 4.0K Jul 29 00:00 .org.chromium.Chromium.eWgdRV
drwx------ 3 nick nick 4.0K Jul 29 00:00 .org.chromium.Chromium.8TITam
drwx------ 3 nick nick 4.0K Jul 29 05:00 .org.chromium.Chromium.aeuzcU
drwx------ 3 nick nick 4.0K Jul 29 05:00 .org.chromium.Chromium.cBHew4
/tmp
これらのディレクトリに別のパスを選択するために設定できる Google Chrome コマンドライン スイッチとは何ですか?クラウド上のルート ディスクのディスク領域があまりないため、使用できません。
Chrome プロセスのシャットダウン時にこれらのディレクトリを自動的に削除する方法はありますか?
見るhttps://peter.sh/experiments/chromium-command-line-switches/
答え1
わあ、これを見つけるのに長い時間がかかりました:
これを実行するコマンドライン引数はありません。ただし、環境変数は可能です。
関連する chromedriver コードは次のとおりです。
https://chromium.googlesource.com/chromium/chromium/+/master/base/file_util_posix.cc
#if !defined(OS_MACOSX)
bool GetTempDir(FilePath* path) {
const char* tmp = getenv("TMPDIR");
if (tmp)
*path = FilePath(tmp);
else
#if defined(OS_ANDROID)
return PathService::Get(base::DIR_CACHE, path);
#else
*path = FilePath("/tmp");
#endif
return true;
}
したがって、Linux の場合は、Chrome セッションで TMPDIR 環境変数を設定するだけでこれを実行できます。
したがって、Selenium では、次のようにする必要があります。
ChromeDriverService chromeDriverService = new ChromeDriverService.Builder()
.usingDriverExecutable(new File("driver_linux/chromedriver"))
.usingAnyFreePort()
.withEnvironment(ImmutableMap.of("TMPDIR", "/some/other/tmp/dir")).build();