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

标签 java selenium selenium-webdriver

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

有什么方法可以使用 Java 中的 Selenium API 来做到这一点吗?

最佳答案

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

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

你可以这样获取cookie:

webdriver.manage().getCookies()

参见the documentation .

您可以获取如下链接的 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/

相关文章:

java - 如何在 Java 中将字节数组转换为长整数?

java - 在java中,如何在线程中获取文件名

java - 如何通过Selenium访问框架内的嵌套html

javascript - 如何与多个用户一起运行 Protractor 套件

python - 有没有办法在 Python 中运行 selenium 时隐藏浏览器?

java - CarbonCopy 到 Gmail 地址似乎不起作用

java - 检测在 selenium java 中下载的文件

javascript - Jmeter + selenium api - Java 脚本未处理错误

java - Jenkins 上的 Selenium webDriver/Maven java 测试无法与 firefox 通信

java - JNDI 失败,出现 javax.naming.NameNotFoundException :Name [jdbc/Database] is not bound in this Context when deploying Spring Boot2 Tomcat 9 NO EMBEDDED