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