我正在尝试使用HTMLUnit转储某个站点的全部内容,但是当我尝试在某个(相当内在的)站点中执行此操作时,我得到一个空文件(本身不是空文件,但它有一个空头标记,一个空身体标记,就是这样。)
这是我的代码:
BufferedWriter writer = new BufferedWriter(new FileWriter(fullOutputPath));
HtmlPage page;
final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8);
webClient.setCssEnabled(false);
webClient.setPopupBlockerEnabled(true);
webClient.setRedirectEnabled(true);
webClient.setThrowExceptionOnScriptError(false);
webClient.setThrowExceptionOnFailingStatusCode(false);
webClient.setUseInsecureSSL(true);
webClient.setJavaScriptEnabled(true);
page = webClient.getPage(url);
dumpString += page.asXml();
writer.write(dumpString);
writer.close();
webClient.closeAllWindows();
有些人说我需要在我的代码中引入暂停,因为该页面需要一段时间才能在Google Chrome中加载,但是我设置了很长的停顿时间并且无法正常工作。
先谢谢。
答案 0 :(得分:0)
只是一些想法......
使用wget
检索该网址会返回一个非平凡的HTML文件。同样使用webClient.setJavaScriptEnabled(false)
运行代码。所以这肯定与页面中的Javascript有关。
启用Javascript后,我从日志中看到一堆Javascript作业正在排队,我看到相应的错误如下:
EcmaError: lineNumber=[49] column=[0] lineSource=[<no source>] name=[TypeError] sourceName=[https://www.abcdin.cl/js/jquery/jquery-1.4.2.min.js] message=[TypeError: Cannot read property "nodeType" from undefined (https://www.abcdin.cl/js/jquery/jquery-1.4.2.min.js#49)]
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot read property "nodeType" from undefined (https://www.abcdin.cl/js/jquery/jquery-1.4.2.min.js#49)
at
com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:601)
也许这些工作是为了填充你的HTML?所以当它们失败时,生成的HTML是空的?
错误看起来很奇怪,因为HtmlUnit通常没有JQuery的问题。我怀疑问题在于代码调用JQuery库的特定行。