簡體   English   中英

使用 ChromeDriver 和無頭模式下載 Java、Selenium 中的文件

[英]Download files in Java, Selenium using ChromeDriver and headless mode

由於我仍然不清楚如何在 ChromeDriver - selenium [Java] 中使用 --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 首選項作為 arguments

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();

根據 chrome 驅動程序的官方發布頁面,已針對此問題引入了修復程序。 任何高於 77 的 chrome 驅動程序版本都可以在無頭模式下下載文件。

options.addArguments("--headless");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM