我在一个主题中的问题。 /我使用的是JDK + NetBeans /。所以,我从http://sourceforge.net/projects/htmlunit/files/htmlunit/下载HtmlUnit 2.9-2.14之间的任何版本,没有人不能使用这个功能。例如我的代码(java):
.....
import com.gargoylesoftware.htmlunit.AlertHandler;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.ScriptPreProcessor;
import com.gargoylesoftware.htmlunit.ScriptResult;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine;
.....
.....
public static void main(String[] args) throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);
HtmlPage page = webClient.getPage("file:///D:/WebRoot/tmp2/test.html");
webClient.closeAllWindows();
}
和test.html:
<html>
<head>
</head>
<body>
<script>
VKVolumeDown();
alert("Hello");
</script>
</body>
</html>
...我得到了脚本异常:
INFO:捕获脚本异常 ======= EXCEPTION START ======== EcmaError:lineNumber = [82] column = [0] lineSource = [] name = [ReferenceError] sourceName = [文件中的脚本:/ D:/WebRoot/tmp2/test.html from(7,11)to(24,12) )] message = [ReferenceError:“VKVolumeDown”未定义。 (文件中的脚本:/ D:/WebRoot/tmp2/test.html from(7,11)to(24,12)#82)] com.gargoylesoftware.htmlunit.ScriptException:ReferenceError:未定义“VKVolumeDown”。 (文件中的脚本:/ D:/WebRoot/tmp2/test.html from(7,11)to(24,12)#82) 在com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine $ HtmlUnitContextAction.run(JavaScriptEngine.java:689) at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620)
.....
并且“警告(”你好“);”不执行:(。但是为什么我使用“webClient.getOptions()。setThrowExceptionOnScriptError(false);”选项???和函数调用异常“VKVolumeDown()”必须被忽略!?这让我很困惑。帮助我请,这对我来说非常重要。谢谢。
答案 0 :(得分:2)
感谢您的快速反应,Mosty Mostacho。据我了解:在JavaScript代码中,类似构造“try {} catch(err){}”不会在HtmlUnit工具中发布。我的GENERAL任务是遍历所有JavaScript代码(从开始到结束)并在可能的情况下执行所有构造。我在try {} catch(err){}块中看到包含每个JavaScript构造的变体,但它不是那么优雅。也许谁提出任何变种?
答案 1 :(得分:0)
那里抛出了一个JavaScript异常。这意味着HTML代码中有一些HTMLUnit(Rhino)不喜欢的东西。您首先应该明白,不抛出异常不会修复JS代码中的错误(如果有的话)。因此,如果该问题不允许您执行操作,隐藏或显示操作,则仍然不允许您执行操作。
话虽如此,setThrowExceptionOnScriptError
方法确定您是否希望getPage
将JS代码中检测到的不可避免的异常转发给您的应用程序。换句话说,如果你想抛出异常,那么你很可能需要在你的应用程序中包含getPage
方法的try-catch-finally块。
解决方案:修复您的JS代码。