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

3

我需要从一个网站下载大约500个文件。虽然已经可以下载,但有时网站运行不稳定,导致下载无法完成。我通常要手动取消下载,但我希望能在我的脚本中实现。

有没有使用Java中Selenium API实现自动取消下载的方法?

1个回答

0

Selenium下载不可取消,因为下载可以在后台进行(当前页面上没有JavaScript可以与其交互),或者它可以替换当前页面(此时完全没有JavaScript)。

相反,您可以通过检查您即将点击但不要在selenium中点击的链接来收集要下载的URL。然后,使用常规Java请求请求它们,您可以适当地处理它们(例如添加超时)。您可能需要从Selenium中收集cookies以便进行下载请求。

您可以这样获取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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接