我必须从网站下载大约 500 个文件。它可以工作,但有时网络无法正常工作并且下载无法完成。我手动取消它,但我想在我的脚本中执行它。
有什么方法可以使用 Java 中的 Selenium API 来做到这一点吗?
最佳答案
Selenium 下载不可取消,因为下载可以在后台进行(当前页面上没有可以与其交互的 javascript),也可以替换当前页面(根本没有 javascript) .
相反,您可以通过检查您要单击的链接而不是在 selenium 中单击它们来收集您想要下载的 URL。如果您随后使用常规 Java 请求来请求它们,您可以适本地处理它们(即添加超时)。您可能需要从 Selenium 收集 cookie 才能发出下载请求。
你可以这样获取cookie:
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
关于java - 如何使用 Selenium Webdriver 取消 Firefox 中的下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28479432/