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