【发布时间】:2015-02-12 14:03:18
【问题描述】:
我必须从网站下载大约 500 个文件。它可以工作,但有时该网络无法正常工作并且下载没有完成。我手动取消它,但我想在我的脚本中执行它。
有什么方法可以用 Java 中的 Selenium API 来实现吗?
【问题讨论】:
标签: java selenium selenium-webdriver
我必须从网站下载大约 500 个文件。它可以工作,但有时该网络无法正常工作并且下载没有完成。我手动取消它,但我想在我的脚本中执行它。
有什么方法可以用 Java 中的 Selenium API 来实现吗?
【问题讨论】:
标签: java selenium selenium-webdriver
Selenium 下载不可取消,因为下载既可以在后台进行(当前页面上没有可以与之交互的 javascript),也可以替换当前页面(根本没有 javascript) .
相反,您可以通过检查您将要点击的链接而不是在 selenium 中点击它们来收集您希望下载的 URL。如果您随后使用常规 Java 请求请求它们,则可以适当地处理它们(即添加超时)。您可能需要从 Selenium 收集 cookie 才能发出下载请求。
你可以这样获取cookies:
webdriver.manage().getCookies()
您可以像这样获取链接的 URL:
webdriver.findElement(...).getAttribute("href");
您可能必须将其从相对 URL 转换为绝对 URL。
然后您可以像这样在 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
【讨论】: