如何使用Selenium Webdriver取消在Firefox中的下载?

时间:2015-02-12 14:03:18

标签: java selenium selenium-webdriver

我必须从网站下载大约500个文件。它工作但有时网络不能正常工作,下载没有完成。我手动取消它但我想在我的脚本中执行它。

有没有办法用Java中的Selenium API做到这一点?

1 个答案:

答案 0 :(得分:0)

Selenium下载不可取消,因为下载可以在后台进行(当前页面上没有可以与之交互的javascript),也可以替换当前页面(根本不会有javascript)

相反,您可以通过检查您要点击的链接而不是在selenium中点击它们来收集您要下载的网址。如果您随后使用常规Java请求请求它们,则可以适当地处理它们(即添加超时)。您可能需要从Selenium收集cookie才能发出下载请求。

您可以获得以下Cookie:

webdriver.manage().getCookies()

请参阅the documentation

您可以获取以下链接的网址:

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