当前位置: 首页 > 知识库问答 >
问题:

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

钱华晖
2023-03-14

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

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

共有1个答案

华温书
2023-03-14

在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();
 类似资料:
  • 问题内容: 我正在将Selenium 2.43.0与Python 2.7.5一起使用。在某一时刻,测试单击一个按钮,该按钮会将表单信息发送到服务器。如果请求成功,服务器将响应 1)成功的消息 2)合并了表格信息的PDF 我不在乎测试PDF,我的测试只是在寻找成功的消息。但是,PDF是服务器响应的包响应的一部分,我作为测试人员无法更改。 直到最近,使用Chromedriver从来都不是问题,因为Ch

  • 我不关心测试PDF,我的测试只是寻找一个成功的消息。然而,PDF是来自服务器的包响应的一部分,我作为测试人员不能更改。 直到最近,使用Chromedriver时,这从来都不是一个问题,因为Chrome会自动将pdfs下载到默认文件夹中。 然而,几天前,我的一个测试环境开始弹出一个单独的窗口,其中有一个pdf的“打印”屏幕,这使我的测试脱轨。 Selenium 2.43.0,Python 2.7.5

  • 我正在使用chromedriver和selenium从应用程序下载文件。但当点击应用程序中的下载按钮时,它给出的错误是“” Chromedriver版本:2.21硒版本:2.53.0 初始化chrome驱动和更改下载位置的代码: 错误是: 有人能帮我吗?我可以手动从Chrome下载文件。

  • 问题内容: 我一直在运行以下代码,以便从网站下载文件: 有了它,它将文件下载到中。与它不起作用。 我正在使用puppeteer版本在macOS Sierra(MacBook Pro)上运行此程序,该版本将Chromium版本拉入目录并使用并进行设置。 知道怎么了吗? 预先感谢您的时间和帮助, 问题答案: 此页面通过创建逗号分隔的字符串并通过设置数据类型来强制浏览器下载csv,从而下载csv chr

  • 我正在使用Selenium和Chrome来模拟点击一个下载PDF文件的按钮。一切工作如预期,Chrome显示下载成功,点击Chrome上的文件打开并充分显示文件。但是,当我试图从文件管理器或任何其他应用程序(包括作为超级用户的)访问该文件时,下载的文件并不存在。这是硒/铬故意做的吗?有什么办法可以绕过这一点吗? 我在Xubuntu 20.04.2 LTS上运行Python 3.8.5。Seleni

  • 我正在寻找一种使用chromedriver将不同文件保存到python中不同位置的方法。下面的代码将chrome设置为下载到文件夹路径,而不首先弹出下载位置对话框。单击并将一个文件下载到文件夹_路径(我跳过了粘贴这部分代码,因为我没有问题)后,我想将另一个文件下载到新的文件夹_路径。但是下面的代码给了我AttributeError:“WebDriver”对象没有属性“Chrome”。如果我可以在同