我一直致力于在 Java 中使用 Selenium WebDriver 和 ChromeDriver 来自动下载文件。我的代码工作正常,直到我更新到 ChromeDriver 版本 117+,代码工作正常,直到 Chrome 116.0.5845.141,问题似乎从 Chrome 116.0.5845.188 开始。现在,浏览器似乎强制显示“另存为”对话框,即使我已经设置了 Chrome 首选项来避免它。
这是我的 Java 代码片段:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.HashMap;
public class FileDownloadHeadless {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setCapability("os", "Windows");
options.setCapability("os_version", "10");
options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
options.setCapability(CapabilityType.ForSeleniumServer.ENSURING_CLEAN_SESSION, true);
options.setCapability("chrome.switches", Arrays.asList("--incognito"));
options.setCapability(ChromeOptions.CAPABILITY, options);
options.addArguments("--headless");
options.addArguments("--disable-gpu");
HashMap<String, Object> chromePrefs = new HashMap<>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", "C:\\local_files");
chromePrefs.put("download.prompt_for_download", false);
chromePrefs.put("profile.content_settings.exceptions.automatic_downloads.*.setting", 1);
chromePrefs.put("profile.default_content_setting_values.automatic_downloads", 1);
options.setExperimentalOption("prefs", chromePrefs);
WebDriver driver = new ChromeDriver(options);
driver.get("http://my_site.com/download");
driver.findElement(By.id("id_button_download")).click();
Thread.sleep(5000);
driver.quit();
}
}
尽管进行了这些设置,“另存为”对话框仍然出现,并且它扰乱了自动化流程。我尝试了 Chrome 首选项的各种组合,但似乎没有一个可以绕过版本 117 中引入的新行为。
有其他人在 ChromeDriver 版本 117+ 或更高版本中遇到过此问题吗?如果是这样,您是如何解决此更新的?任何见解将不胜感激。
按照@NhanTT的建议删除“--incognito”模式,确实有效!但我想知道该模式为何以及如何实际影响文件下载选项。如果有人有另一种解决方案可以解决该问题,同时保持隐身模式,我将不胜感激。
感谢您的时间和帮助。