在 headless / no-sandbox-mode 中选择 tmp 目录的 chrome 命令行参数是什么?

在 headless / no-sandbox-mode 中选择 tmp 目录的 chrome 命令行参数是什么?

我正在使用 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

我可以设置哪个 Google Chrome 命令行开关来为这些目录选择不同的路径?我无法使用,/tmp因为根磁盘在云端没有太多磁盘空间。

有没有办法在关闭 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();

相关内容