在有人告诉我这里已经存在这个问题之前,我必须说我已经尝试过我发现的每一个例子。
我尝试下载的网址有一种“音频/ wav”,嵌入在视频标签中,或者至少这是我在运行Chrome元素检查器时看到的。
问题是,URL(我不能在这里发布)不是指向.wav文件,也不指向任何内容,而是指向ASP页面,它似乎生成音频。
到目前为止一直很好,这里的问题是我无法真正下载音频。
基本上我的webclient创建如下:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38); // Also tried Chrome here.
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setPopupBlockerEnabled(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page = (HtmlPage)webClient.getPage(URL);
我尝试创建一个链接到包含音频文件的页面的锚元素:
HtmlElement createdElement = (HtmlElement) page.createElement("a");
createdElement.setAttribute("id", "link_som");
createdElement.setAttribute("href", "../sound.asp?app=audio");
page.appendChild(createdElement);
HtmlAnchor anc =(HtmlAnchor) page.getElementById("link_som", true); //tried this just to make sure it was returning the right anchor
InputStream inputStream = anc.click().getWebResponse().getContentAsStream();
//Writing the inputStream to a file generates a file which has 0 KB.
还尝试运行通过HtmlUnit链接到新URL的javascript:
ScriptResult resultado = page.executeJavaScript("window.open('../sound.asp?app=audio');");
webClient.waitForBackgroundJavaScript(5000);
HtmlPage paginaRes = (HtmlPage)resultado.getNewPage();
InputStream inputStream =paginaRes.getWebResponse().getContentAsStream(); //Here the inputStream also generates a 0 KB file
有趣的是,在我试过的所有情况下,如果我将inputStream写入控制台,它将返回主页面源,例如:
int binary = 0;
while ((binary = inputStream.read()) != -1)
{
System.out.print((char)binary); //prints the old page source, and in some other tests, prints nothing.
}
Ps。:手动打开chrome上的URL时,它有一个嵌入式播放器,在FireFox上,它要求Quicktime。
答案 0 :(得分:0)
我可以使用htmlunit来获取音频元素 仅供参考,我的版本是2.15
答案 1 :(得分:-1)
我已经解决了很久,然后只是为了让别人知道。 解决方案是放弃HTMLUnit并使用Selenium和phamtomJS。