多次下载同一文件时,无头模式和非无头模式具有不同的行为

Headless mode and non headless mode have different behavior when downloading same file multiple times

虽然我在非无头模式下多次下载文件(说“a.png”)然后它会在下载的文件夹中复制该文件(例如“a.png”和“ a(1).png").

但是

虽然我在 Headless 模式下多次下载文件(说“a.png”)然后它不会在下载的文件夹中复制该文件,而是使用最新文件更新(检查日期时间)并且只有一个文件存在。

知道为什么会出现这种不同的行为并感谢对此的解决方案

我试图测试在每次下载中,下载文件夹中的计数应该增加 1。

可以在以下位置找到测试脚本:https://gist.github.com/Anilkumar-Shrestha/a81b7b7a4381db54ae8bb9ab9bdf75b4

原因

根据你的实验,也根据我的经验:

Chrome 和 Headless Chrome 可能表现不同(出于多种原因)。我没有找到明确的文档,但在 chromedriver 会话启动期间提供的一些 Chrome 浏览器选项和首选项可能会被无头浏览器忽略,或者可能导致不同的行为(比如你的下载情况)。至少您可能会在 Whosebug 或 github 问题上找到几个相关问题。这可能会证实我的假设。

  • Headless chrome + ignore-certificate-errors
  • Selenium headless chrome error "Bootstrap's JavaScript requires jQuery"
  • Selenium Java - moveToElement does not work in headless but works in chrome
  • App that converts image to base64 string displays different results on browser's console when run in headed and headless mode. Does anyone know why?
  • 等等

我看到的主要原因是Chrome基于Chromium并提供了很多调整和定制。但在 headless 模式下,似乎启动了纯 Chromium 浏览器(不是 Chrome)。

如何处理这种行为

我假设您可以使用 java 访问文件系统(基于您的代码示例)。

1 如果您只想验证文件内容,您可以随时在验证后删除下载的文件。

2 如果您需要保留所有文件,我建议您将新下载的文件移动到另一个目录并根据需要重命名。所以你会控制所有的文件名都是唯一的。

您可以使用 apache commons lib 来管理文件: https://zetcode.com/java/fileutils/.

如果您 运行 并行测试,请尝试将测试与下载步骤保持在单个线程中,或者为每个浏览器使用唯一的下载目录,或者为下载操作实施同步。