在無頭/無沙箱模式下選擇 tmp 目錄的 chrome 命令列參數是什麼?

在無頭/無沙箱模式下選擇 tmp 目錄的 chrome 命令列參數是什麼?

我正在用 Selenium 運行無頭鉻。

當我運行一堆會話時,我最終會得到一堆 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 環境變數即可執行此操作。

所以在硒中,你必須這樣做:

ChromeDriverService chromeDriverService = new ChromeDriverService.Builder()
         .usingDriverExecutable(new File("driver_linux/chromedriver"))
         .usingAnyFreePort()
         .withEnvironment(ImmutableMap.of("TMPDIR", "/some/other/tmp/dir")).build();

相關內容