You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Laravel Dusk/Selenium中ChromeDriver临时文件存储位置及清理配置

问题原因

你配置--user-data-dir不生效,是因为/tmp/.com.google.Chrome.*格式的目录是Chrome/ChromeDriver运行时自动生成的临时副本,用来存运行时缓存、LocalStorage、进程锁文件,不受--user-data-dir参数控制,默认读取系统TMPDIR环境变量指定的路径生成。测试进程异常退出、Chrome未正常触发清理钩子时,这些目录就会残留堆积占满磁盘。
另外你贴的代码里--user-data-dir参数值多套了一层转义双引号,会导致Chrome参数解析失败,这也是之前配置不生效的原因之一。

方案1:自定义临时文件存储位置

Chrome生成这类临时目录时优先读取当前进程的TMPDIR环境变量,不需要额外加Chrome启动参数,只要在启动Dusk前指定环境变量即可:

  • 提前创建自定义临时目录并配置权限:
mkdir -p /your/laravel/path/storage/tmp/chrome-runtime
chmod 755 /your/laravel/path/storage/tmp/chrome-runtime
  • 修改Dusk初始化代码,在创建Chrome实例前设置环境变量,同时修正--user-data-dir的参数写法:
// 指定Chrome临时文件生成路径
putenv('TMPDIR=' . storage_path('tmp/chrome-runtime'));

$options = (new ChromeOptions())->addArguments([
  '--disable-gpu',
  '--headless',
  '--window-size=1920,1080',
  '--ignore-certificate-errors',
  '--whitelisted-ips=',
  // 去掉多余的引号,避免参数解析失败
  '--user-data-dir=' . storage_path('tmp/chrome-user-data')
]);
$browser = DesiredCapabilities::chrome();
$browser->setCapability(ChromeOptions::CAPABILITY, $options);

配置后所有.com.google.Chrome.*临时目录都会生成到你指定的storage/tmp/chrome-runtime路径下,不会再写到系统默认/tmp目录。

方案2:配置自动清理规则

可以根据自己的使用场景选对应的清理方式,避免临时文件堆积:

  • 测试钩子清理:在Dusk测试基类的tearDown()方法里加清理逻辑,测试跑完自动删除本次运行生成的临时文件:
protected function tearDown(): void
{
    parent::tearDown();

    $tmpBase = getenv('TMPDIR') ?: sys_get_temp_dir();
    // 匹配所有Chrome生成的临时目录
    foreach (glob($tmpBase . '/.com.google.Chrome.*') as $tmpDir) {
        if (!is_dir($tmpDir)) continue;
        // 递归删除目录内文件
        array_map(
            fn($item) => is_dir($item) ? rmdir($item) : unlink($item),
            glob($tmpDir . '/*')
        );
        rmdir($tmpDir);
    }
}
  • 系统定时任务清理:如果不想修改测试代码,可以在Ubuntu上配置crontab定时任务,定期清理过期的Chrome临时文件。执行crontab -e加入以下规则,每小时清理一次超过1小时未修改的残留文件:
0 * * * * find /tmp -name ".com.google.Chrome.*" -type d -mmin +60 -exec rm -rf {} \;

如果用了自定义临时目录,把命令里的/tmp替换成你自己配置的临时目录路径即可。

补充:Chrome 115+版本可以额外添加启动参数--disable-features=MediaRouter,TranslateUI,关闭不必要的内置功能,减少运行时生成的临时缓存体积。

内容的提问来源于stack exchange,提问作者furukama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:48:34