在无头模式下通过RemoteWebDriver和chrome下载文件



你好,我想问一下,是否可以通过RemoteWebDriver和无头模式在selenium节点上下载文件ex.(.csv/.pdf(?下面的代码适用于无头模式,但我无法将WebDriverServices传递给RemoteWebDriver。。。。

chromePrefs.put("download.prompt_for_download", false);
​chromePrefs.put("download.directory_upgrade", true);
​chromePrefs.put("safebrowsing.enabled", false);
​chromePrefs.put("profile.default_content_settings.popups", 0);
​chromePrefs.put("safebrowsing.disable_download_protection", true);
​chromePrefs.put("download.default_directory", downloadFilepath);
​ChromeOptions options = new ChromeOptions();
​options.setExperimentalOption("prefs", chromePrefs);
​if (platform.startsWith("local")) {
​options.addArguments("--start-maximized");
​} else {
​options.addArguments("--headless", "--disable-gpu", "--window-size=1024,768","--ignore-certificate-errors","--disable-extensions","--no-sandbox","--disable-dev-shm-usage");
​}
​caps = DesiredCapabilities.chrome();
​caps.setCapability(ChromeOptions.CAPABILITY, options);
​caps.setPlatform(getPlatform(platform));
​caps.setCapability(ACCEPT_SSL_CERTS, true);
​caps.setCapability(ACCEPT_INSECURE_CERTS, true);
​LoggingPreferences logPrefs = new LoggingPreferences();
​logPrefs.enable(LogType.BROWSER, Level.ALL);
​caps.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
​options.merge(caps);
​ChromeDriverService driverService = ChromeDriverService.createDefaultService();
driver = new ChromeDriver(driverService, caps);
​System.out.println(downloadFilepath);
​Map< String, Object > commandParams = new HashMap<String, Object>();
​commandParams.put("cmd", "Page.setDownloadBehavior");
​Map < String, Object > params = new HashMap<String, Object>();
​params.put("behavior", "allow");
​params.put("downloadPath", downloadFilepath);
​commandParams.put("params", params);
​ObjectMapper objectMapper = new ObjectMapper();
​HttpClient httpClient = HttpClientBuilder.create().build();
​try {
​String command = objectMapper.writeValueAsString(commandParams);
​String u = driverService.getUrl().toString() + "/session/" + 
driver.getSessionId() + "/chromium/send_command";
​System.out.println("U: " + u);
​HttpPost request = new HttpPost(u);
​request.addHeader("content-type", "application/json");
​request.setEntity(new StringEntity(command));
​httpClient.execute(request);
​} catch (Exception e) { }

解决方案:

只需在运行selenium节点的机器上创建共享文件夹,或者在网络路径上访问并设置下载路径的属性

String downloadFilepath = "\localhostfolderfordownload";
​chromePrefs.put("download.default_directory", downloadFilepath); 

相关内容

最新更新