【问题标题】:Download files in Java, Selenium using ChromeDriver and headless mode使用 ChromeDriver 和无头模式下载 Java、Selenium 文件
【发布时间】:2018-06-11 11:22:19
【问题描述】:

由于我仍然不清楚如何在 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) 应该可以在无头模式下下载文件,但我找不到 ChromeDriver 是否已经支持它或者只是我使用错误的 chrome 首选项作为参数的信息

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

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

    • 以上代码,适用于 PDF 文件,但不适用于无头模式下的 .cfm 文件。
    • 嗨,在我的情况下,当我单击一个按钮时,下载(csv 文件)发生在一个新选项卡中。这段代码对我不起作用。有什么解决办法吗?
    • 大家好!有人在最新版本发布后找到了解决方案吗? chromedriver 83 + selenium-java 4.0.0-alpha6 ?
    【解决方案2】:

    根据 chrome 驱动程序的官方发布页面,已针对此问题引入了修复程序。任何高于 77 的 chrome 驱动程序版本都可以在无头模式下下载文件。

    options.addArguments("--headless");
    

    【讨论】:

    • 你错了!它不适用于当前版本 88、89 等
    猜你喜欢
    • 2017-11-27
    • 1970-01-01
    • 2019-09-07
    • 2014-12-31
    • 1970-01-01
    • 2022-09-23
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多