当前位置: 首页 > 知识库问答 >
问题:

HtmlUnit异常

浦德明
2023-03-14

我很难理解这个HTMLUnit异常的含义。当我在网页上的链接上调用click()时,就会发生这种情况。

Exception class=[net.sourceforge.htmlunit.corejs.javascript.WrappedException]
com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot read property "offsetWidth" from null (http://webapps6.doc.state.nc.us/opi/scripts/DHTMLmessages.js#95) (javascript url#297)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:534)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:432)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:407)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:965)
at com.gargoylesoftware.htmlunit.html.HtmlAnchor.doClickAction(HtmlAnchor.java:87)
at com.gargoylesoftware.htmlunit.html.HtmlAnchor.doClickAction(HtmlAnchor.java:121)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1329)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1288)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1257)
at testapp.TestApp.main(TestApp.java:61)
Caused by: net.sourceforge.htmlunit.corejs.javascript.WrappedException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot read property "offsetWidth" from null (http://webapps6.doc.state.nc.us.js#95) (javascript url#297)
at net.sourceforge.htmlunit.corejs.javascript.Context.throwAsScriptRuntimeEx(Context.java:1802)
at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:196)
at net.sourceforge.htmlunit.corejs.javascript.FunctionObject.call(FunctionObject.java:479)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1701)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:854)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:429)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:267)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3183)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:175)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$5.doRun(JavaScriptEngine.java:423)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:528)
... 11 more

共有3个答案

米迪
2023-03-14

Htmlunit通常不能很好地处理js代码。如果你想点击一个链接,最好使用HTMLUnitAPI来查找元素,例如。

    page.getHtmlElementById("some_div_id");
    page.getByXPath("//div");
娄振
2023-03-14

JS再次出现HtmlUnit问题。您需要更正JS代码,因为它很可能包含错误。如果您没有JS代码,那么HtmlUnit将无法解决此问题。看看我在这里提供的答案。

闻人吕恭
2023-03-14

当您单击并此链接调用另一个页面时,htmlUnit在导航期间可能会对异常非常冗长。如果您单击浏览器并打开控制台,可能会看到这些错误、缺少链接或图像、调用脚本时的错误...

这些都是HtmlUnit不必要的Javascript问题。

就像我在这里说的HtmlUnit不创建HtmlPage对象,您可以设置或修改htmlUnit以防止不必要的日志。您还可以设置log4j并禁用一些异常。

因此,我们使用这些选项来保持html导航,而不会在我们使用的第一个错误/问题上停止:

webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);

您还可以实现空类来阻止htmlUnity在控制台上详细描述css/javaScript错误,包括:

webClient.setCssErrorHandler(new SilentCssErrorHandler());    
webClient.setJavaScriptErrorListener(new JavaScriptErrorListener(){});

小样本测试用例:

@Test
public void TestCall() throws FailingHttpStatusCodeException, MalformedURLException, IOException {      
    WebClient webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setUseInsecureSSL(true); //ignore ssl certificate
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    String url = "https://www.wearvr.com/#game_id=game_4";
    HtmlPage myPage = webClient.getPage(url);
    webClient.waitForBackgroundJavaScriptStartingBefore(200);
    webClient.waitForBackgroundJavaScript(20000);
    //do stuff on page ex: myPage.getElementById("main")
    //myPage.asXml() <- tags and elements
    System.out.println(myPage.asText());

} 

此外,您可以在此处看到更多关闭HtmlUnit警告的信息

 类似资料:
  • 我不知道如何解决这个问题。。。你能帮帮我吗? 我得到这个exeption: 我的代码是: 导入com.gargoylesoftware.htmlunit.WebClient; WebClient wb=new WebClient();}

  • HtmlUnit 是 JUnit 的扩展测试框架之一。HtmlUnit 将返回文档模拟成 HTML,这样您便可以直接处理这些文档了。HtmlUnit 使用例如 table、form 等标识符将测试文档作为 HTML 来处理。它同样需要遵循 JUnit 测试框架结构的 Java™ 测试程序。

  • 但当我执行这段代码时,我面临以下异常。 它似乎喜欢它的一个配置,伊索。我从站点下载了jar并将其添加到我的refrenced库中。我使用的IDE是Eclipse。HtmlUnit版本为htmlunit-2.13.jar

  • Nutch Htmlunit Plugin 重要说明: 当前项目基于Nutch 1.X系列已停止更新维护,转向Nutch 2.x系列版本的新项目:http://www.oschina.net/p/nutch-ajax 项目简介 基于Apache Nutch 1.8和Htmlunit组件,实现对于AJAX加载类型页面的完整页面内容抓取解析。 According to the implementati

  • 我正在尝试使用HTMLUnit(第一次)从特定页面中提取数据。具体来说,我目前正在尝试按ID(搜索框)抓取超文本标记语言元素。 但我遇到了: 在使用page.asXML()进行进一步检查时,该页面似乎没有正确加载,这就是它找不到项目的原因?我不确定为什么它没有为HTMLUnit加载。无需登录,您可以通过在浏览器中输入页面来自行查看页面。 非常感谢对调试此类HTMLUnit问题的任何帮助。

  • 问题内容: 当我加载页面时,HtmlUnit引发异常并使测试崩溃 ReferenceError:未定义“ x”。(net.sourceforge.htmlunit.corejs.javascript.EcmaError) 如果我使用Firefox驱动程序,则不会引发任何异常。 或为HtmlUnit驱动程序禁用JavaScript 我无法更改测试页上的代码并解决问题,因此我需要忽略它,或者以任何方式