Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Selenium Webdriver取消firefox中的下载?_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 如何使用Selenium Webdriver取消firefox中的下载?

Java 如何使用Selenium Webdriver取消firefox中的下载?,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我必须从一个网站上下载大约500个文件。它可以工作,但有时网络不能很好地工作,下载也不能完成。我手动取消它,但我想在脚本中执行它 Java中的Selenium API有什么方法可以做到这一点吗?Selenium下载是不可取消的,因为下载可以在后台进行(当前页面上没有可以与之交互的javascript),也可以替换当前页面(根本没有javascript) 相反,您可以通过检查将要单击的链接而不是在selenium中单击来收集您希望下载的URL。如果然后使用常规Java请求请求它们,则可以适当地处理

我必须从一个网站上下载大约500个文件。它可以工作,但有时网络不能很好地工作,下载也不能完成。我手动取消它,但我想在脚本中执行它


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

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

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

你可以得到这样的饼干:

webdriver.manage().getCookies()
webdriver.findElement(...).getAttribute("href");
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

您可以获取如下链接的URL:

webdriver.manage().getCookies()
webdriver.findElement(...).getAttribute("href");
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
您可能需要将其从相对URL转换为绝对URL

然后,您可以用Java发出如下请求:

webdriver.manage().getCookies()
webdriver.findElement(...).getAttribute("href");
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