当我在无头模式下多次下载文件(比如说"a.png"(时,它会在下载的文件夹中复制该文件(比如"a.pnng"one_answers"a(1(.png"(。
但是
当我在无头模式下多次下载文件(说"a.png"(时,它不会在下载的文件夹中复制该文件,而是使用最新文件(检查日期时间(更新,并且只存在一个文件。
知道为什么会有这种不同的行为,并对此表示赞赏的解决方案
我试图测试在每次下载中,下载文件夹中的计数应该增加1。
可在以下位置找到测试脚本:https://gist.github.com/Anilkumar-Shrestha/a81b7b7a4381db54ae8bb9ab9bdf75b4
原因
基于你的实验,也基于我的经验:
Chrome和无头Chrome的行为可能不同(原因有很多(。我还没有找到明确的文档,但chromedriver会话启动期间提供的一些Chrome浏览器选项和偏好可能会被无头浏览器忽略,或者可能导致不同的行为(比如下载(。至少你可能会发现一些关于stackoverflow或github问题的相关问题。这可能会证实我的假设。
- 无头铬+忽略证书错误
- 硒无头铬错误";引导程序';s JavaScript需要jQuery">
- Selenium Java-moveToElement不适用于headless,但适用于chrome
- 将图像转换为base64字符串的应用程序在浏览器上显示不同的结果';在有头和无头模式下运行时的控制台。有人知道为什么吗
- 等等
我看到的主要原因是Chrome基于Chromium,并提供了大量的调整和自定义。但在无头模式下,似乎推出了纯Chromium浏览器(而不是Chrome(。
如何处理这种行为
我假设您可以使用java访问文件系统(基于您的代码示例(。
1如果你只想验证文件内容,你可以在验证后删除下载的文件。
2如果你需要保留所有文件,我建议你把新下载的文件移到另一个目录,然后根据你的喜好重命名。因此,您将控制所有文件名的唯一性。
您可以使用apachecommons-lib来管理文件:https://zetcode.com/java/fileutils/.
如果并行运行测试,请尝试将带有下载步骤的测试保留在一个线程中,或者每个浏览器使用唯一的下载目录,或者为下载操作实现同步。