我无法让Selenium和Chrome(Canary)下载文件。我正在使用Java和Chrome 59/60(因为我的测试既适用于Windows又适用于Linux),并且正在尝试从网页开始下载文件。
当我从selenium中不设置headless模式时,chrome窗口会打开并下载文件。
当我设置--headless标志时,chrome窗口不会打开,下载也不会开始。
在GUI模式下,点击后开始下载;在Headless模式下不会下载。如何解决?
OT
我使用的是Chrome Canary,版本为v.60,带有--headless功能。非常方便,在没有GUI的服务器上运行grabber。 但是,出于同样的原因……我觉得在没有GUI的服务器上下载Chrome是毫无意义的。除了主要问题之外……我想知道你们开发者是否认为,在Linux服务器上安装Chrome只是为了以Headless模式启动它这个做法可以接受。
更新: 如果有人看到这篇文章,并且知道解决方法,请告诉我:/搜索结果很少,我已经尝试了所有的解决方法。
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模式下,点击后开始下载;在Headless模式下不会下载。如何解决?
OT
我使用的是Chrome Canary,版本为v.60,带有--headless功能。非常方便,在没有GUI的服务器上运行grabber。 但是,出于同样的原因……我觉得在没有GUI的服务器上下载Chrome是毫无意义的。除了主要问题之外……我想知道你们开发者是否认为,在Linux服务器上安装Chrome只是为了以Headless模式启动它这个做法可以接受。
更新: 如果有人看到这篇文章,并且知道解决方法,请告诉我:/搜索结果很少,我已经尝试了所有的解决方法。