【发布时间】:2020-03-31 12:12:31
【问题描述】:
我有一个网页,当我单击一个按钮时,它会打开另一个选项卡,然后在其中几秒钟后下载一个 csv 文件。我试图无头地自动执行此操作,但我无法这样做。我正在使用下面的代码。但我认为以下解决方案适用于在同一窗口中进行下载。我该如何调整它以适应我的情况?
如果我通过注释掉行 options.addArguments("--headless"); 正常运行此代码(非无头),则代码可以正常工作并且文件会被下载;
System.setProperty("webdriver.chrome.driver", webdriverpath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("--test-type");
options.addArguments("--headless");
options.addArguments("--disable-extensions");
ChromeDriverService driverService = ChromeDriverService.createDefaultService();
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
options.setExperimentalOption("prefs", chromePrefs);
ChromeDriver driver = new ChromeDriver(driverService, options);
Map<String, Object> commandParams = new HashMap<>();
commandParams.put("cmd", "Page.setDownloadBehavior");
Map<String, String> params = new HashMap<>();
params.put("behavior", "allow");
params.put("downloadPath", downloadFilepath);
commandParams.put("params", params);
ObjectMapper objectMapper = new ObjectMapper();
HttpClient httpClient = HttpClientBuilder.create().build();
String command = objectMapper.writeValueAsString(commandParams);
String u = driverService.getUrl().toString() + "/session/" + driver.getSessionId() + "/chromium/send_command";
HttpPost request = new HttpPost(u);
request.addHeader("content-type", "application/json");
request.setEntity(new StringEntity(command));
httpClient.execute(request);
//OPEN URL
//Click Button
【问题讨论】:
-
请编辑问题,以便它准确显示您尝试过的内容并说明失败的方式。另外,尝试使用常规的非无头 Chrome 运行它,并观察您是否可以自己查看问题所在。最后,请确保您的代码不会简单地等待足够长的时间来进行下载。
-
不,它不等待。执行完成。但是文件不会被保存。
-
我的意思是不等待可能是问题所在。
-
它正在等待。如果我们不小心下载文件,通常不会保存文件。 (人们说它是硒的“特征”)上面的解决方法应该可以解决这个问题。不幸的是,在我的情况下它不起作用,我认为这是因为我的下载发生在我点击下载按钮后新打开的标签中。
-
希望您使用的是最新版本的 chrome 和 chrome 驱动程序。 Chrome 77 支持无头模式下载chromedriver.chromium.org/downloads
标签: java selenium google-chrome download headless