java - 使用 ChromeDriver 和 headless 模式下载 Java、Selenium 文件

标签 java google-chrome selenium selenium-chromedriver headless-browser

由于我仍然不清楚如何在 ChromeDriver - selenium [Java] 中使用 --headless 模式下载文件,请在此处添加如何执行此操作的示例,我尝试这样做(文件下载没有 --headless 选项也能正常工作:

ChromeOptions lChromeOptions = new ChromeOptions();
HashMap<String, Object> lChromePrefs = new HashMap<String, Object>();
lChromePrefs.put("profile.default_content_settings.popups", 0);
lChromePrefs.put("download.default_directory", _PATH_TO_DOWNLOAD_DIR);
lChromePrefs.put("browser.set_download_behavior", "{ behavior: 'allow' , downloadPath: '"+_PATH_TO_DOWNLOAD_DIR+"'}");

lChromeOptions.addArguments("--headless");
lChromeOptions.addArguments("--disable-gpu");
lChromeOptions.setExperimentalOption("prefs", lChromePrefs);
WebDriver lWebDriver = new ChromeDriver(lChromeOptions);

据我所知,从 Chrome v60+ 开始,通过设置 Browser.setDownloadBehaviour(true, _DIRECTORY) 应该可以在 headless 模式下下载文件,但我找不到 ChromeDriver 是否已经支持它的信息只有我使用错误的 chrome 首选项作为参数

ChromeDriver 版本:2.34 Selenium + WebDriver 版本:3.8.1

最佳答案

在 Java 中这样使用:

System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
         ChromeOptions options = new ChromeOptions();
                options.addArguments("--test-type");
                options.addArguments("--headless");
                options.addArguments("--disable-extensions"); //to disable browser extension popup

                ChromeDriverService driverService = ChromeDriverService.createDefaultService();
                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", "//home//vaibhav//Desktop");
                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);
        driver.get("http://www.seleniumhq.org/download/");
        driver.findElement(By.linkText("32 bit Windows IE")).click();

关于java - 使用 ChromeDriver 和 headless 模式下载 Java、Selenium 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48049359/

相关文章:

selenium - 将 Selenium Server 和 ChromeDriver 作为 Windows 服务运行

java - 由于日期而导致 Android 数据库 SQLite 出错

java - 最终jar中src/main下的Maven包资源文件夹

javascript - Emscripten 生成的代码的 Chrome 分析器中人类可读的函数名称

javascript - 您可以单步执行在 chrome 开发工具(控制台)中创建的函数吗?

python - OSX 10.11 上的 Headless Selenium + Xvfb + Chrome

java - EditText 将字符串保存为整数然后将其乘以 3 不起作用?

java - 仅双击时增加文本值问题

java - 用显式等待替换隐式等待(selenium webdriver 和 java)

java - Selenium 错误: "org.openqa.selenium.SessionNotCreatedException: session not created from tab crashed" after update electron engine to 9. 0.3