【发布时间】:2017-11-27 01:09:31
【问题描述】:
我无法让 Selenium 和 Chrome (Canary) 下载文件。 我正在使用 Java 和 Chrome 59/60(因为我的测试同时适用于 Windows 和 Linux)并且我正在尝试从网页开始下载文件。
当我从 selenium 中不设置无头模式时,chrome 窗口打开并下载文件。
当我设置--headless 标志时,chrome 窗口不会打开,下载也不会开始。
public static void chromeDownload() throws IOException, InterruptedException{
ChromeOptions options = new ChromeOptions();
String downloadFilepath = "";
if (ValidateOS.isWindows()){
System.out.println("This is a Windows system.");
System.setProperty("webdriver.chrome.driver", "resources\\driver\\chromedriver.exe");
options.setBinary("C:\\Users\\Juri\\AppData\\Local\\Google\\Chrome SxS\\Application\\chrome.exe");
downloadFilepath = "C:\\";
} else if (ValidateOS.isUnix()){
System.out.println("This is a Unix system.");
System.setProperty("webdriver.chrome.driver", "resources/driver/chromedriver");
options.setBinary("/usr/bin/google-chrome");
downloadFilepath = "/home/juri/";
}
// Manage the download
HashMap<String, Object> chromePrefs = new HashMap<>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
// Save Chrome Options
HashMap<String, Object> chromeOptionsMap = new HashMap<>();
options.setExperimentalOption("prefs", chromePrefs);
options.addArguments("--headless --disable-gpu");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(cap);
driver.get("http://localhost/my-test-page.html");
driver.findElement(By.id("download")).click();
Thread.sleep(5000); // wait 5 seconds for a small file to download.. yes.. I know...
driver.quit();
}
点击时,在 GUI 模式下开始下载。在无头模式下,它不会。
如何解决?
OT
我正在使用 Chrome Canary,它在 v.60 中带有 --headless 功能。在没有 gui 的服务器上运行抓取器非常方便。 但是,出于同样的原因.. 我发现在没有 GUI 的服务器上下载 Chrome 毫无用处。 除了主要问题。我想知道你们,开发者,是否认为在 Linux 服务器上安装 chrome 只是为了在无头模式下启动它是可以的。
更新: 如果有人会读到这篇文章,我仍在寻找解决方案:/ 搜索结果有一些,我都试过了
【问题讨论】:
-
最近有人问了一个类似的问题,得到了回答,stackoverflow.com/questions/45631715/…。显然,无头 chrome 会阻止下载,除非它已通过开发工具中的设置获得批准
-
@kshishoo 嗨!我很高兴有人注意到我的问题。新问题正是我现在正在寻找的几个星期。我将再次尝试处理这个项目,我的项目已经完成,但我在测试服务器上安装了一个 Ubuntu GUI 让它工作。如果无头在这个解决方法中工作,那太棒了!
-
这个案子有更新吗?我找到了Javabugs.chromium.org/p/chromium/issues/detail?id=696481#c93的代码解决方案,我还没有测试过。无论如何,我正在寻找一个更短的解决方案。
标签: java google-chrome selenium download