我必须从网站下载大约500个文件。它工作但有时网络不能正常工作,下载没有完成。我手动取消它但我想在我的脚本中执行它。
有没有办法用Java中的Selenium API做到这一点?
答案 0 :(得分:0)
Selenium下载不可取消,因为下载可以在后台进行(当前页面上没有可以与之交互的javascript),也可以替换当前页面(根本不会有javascript)
相反,您可以通过检查您要点击的链接而不是在selenium中点击它们来收集您要下载的网址。如果您随后使用常规Java请求请求它们,则可以适当地处理它们(即添加超时)。您可能需要从Selenium收集cookie才能发出下载请求。
您可以获得以下Cookie:
webdriver.manage().getCookies()
您可以获取以下链接的网址:
webdriver.findElement(...).getAttribute("href");
您可能需要将其从相对网址转换为绝对网址。
然后您可以使用Java生成请求:
URL url = new URL(...);
URLConnection request = url.openConnection();
StringBuilder cookies = new StringBuilder();
for (Cookie cookie : webdriver.manage().getCookies()) {
if (cookies.length() > 0) {
cookies.append("; ");
}
cookies.append(cookie.getName())
.append("=")
.append(cookie.getValue());
}
request.setRequestProperty("Cookie", cookies.toString());
request.setConnectionTimeout(...);
request.setReadTimeout(...);
request.connect();
request.getInputStream(); // do stuff with the data from the input stream