1

我有一个 HttpUnit 代码,我正在尝试访问谷歌的官方网站。这是我的代码:

/** 你需要启动的一切都在 com.meterware.httpunit 包中 **/ import com.meterware.httpunit.*;

/** 这是一个使用 HttpUnit 阅读和理解网页的简单示例。**/ 公共类示例 {

public static void main(String[] params) {
    try {

        WebConversation wc = new WebConversation();

        String url = "https://www.yahoo.com";
        WebRequest request = new GetMethodWebRequest(url);
        WebResponse response = wc.getResponse(request);

        // WebLink httpunitLink = response.getFirstMatchingLink(
        // WebLink.MATCH_CONTAINED_TEXT, "HTML" );
        // response = httpunitLink.click();
        System.out.println("The yahoo main page '" + url + "' contains "
                + response.getLinks().length + " links");
    } catch (Exception e) {
        System.err.println("Exception: " + e);
    }
}

}

我在运行代码时遇到以下异常。我使用 eclipse 作为 IDE。

org.mozilla.javascript.EcmaError: TypeError: Cannot read property "className" from undefined (httpunit#3) at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3229) at org.mozilla.javascript.ScriptRuntime.constructError (ScriptRuntime.java:3219) 在 org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3235) 在 org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3254) 在 org.mozilla.javascript.ScriptRuntime。 undefReadError(ScriptRuntime.java:3267) at org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1324) at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:2816) at script(httpunit:3) at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2251) 在 org.mozilla.javascript.InterpretedFunction。在 org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2758) 在 org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:340) 在 org.mozilla.javascript.InterpretedFunction 调用(InterpretedFunction.java:161) .exec(InterpretedFunction.java:172) 在 org.mozilla.javascript.Context.evaluateString(Context.java:1132) 在 com.meterware.httpunit.javascript.ScriptingEngineImpl.runScript(ScriptingEngineImpl.java:92) 在 com.meterware。 httpunit.scripting.ScriptableDelegate.runScript(ScriptableDelegate.java:88) 在 com.meterware.httpunit.parsing.NekoDOMParser.runScript(NekoDOMParser.java:151) 在 com.meterware.httpunit.parsing.ScriptFilter.getTranslatedScript(ScriptFilter.java: 150) 在 com.meterware.httpunit.parsing.ScriptFilter.endElement(ScriptFilter.java:131) 在 org.cyberneko.html.filters。DefaultFilter.endElement(DefaultFilter.java:249) at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:367) at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1015) at org.cyberneko .html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:888) 在 org.cyberneko.html.HTMLScanner$SpecialScanner.scan(HTMLScanner.java:2831) 在 org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:809) 在org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:478) at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:431) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) at com.meterware.httpunit.parsing.NekoHTMLParser.parse(NekoHTMLParser.java:48) at com.meterware.httpunit。HTMLPage.parse(HTMLPage.java:271) 在 com.meterware.httpunit.WebResponse.getReceivedPage(WebResponse.java:1301) 在 com.meterware.httpunit.WebResponse.getFrames(WebResponse.java:1285) 在 com.meterware.httpunit .WebResponse.getFrameRequests(WebResponse.java:1024) 在 com.meterware.httpunit.FrameHolder.updateFrames(FrameHolder.java:179) 在 com.meterware.httpunit.WebWindow.updateFrameContents(WebWindow.java:315) 在 com.meterware。 httpunit.WebClient.updateFrameContents(WebClient.java:526) 在 com.meterware.httpunit.WebWindow.updateWindow(WebWindow.java:201) 在 com.meterware.httpunit.WebWindow.getSubframeResponse(WebWindow.java:183) 在 com.meterware .httpunit.WebWindow.getResponse(WebWindow.java:158) 在 com.meterware.httpunit.WebClient.getResponse(WebClient.java:122) 在 Example.main(Example.java:14) 例外:com.meterware.httpunit.ScriptException: Script '//用于 3pas 中的 perf 信标 rtTop = Number(new Date());

    document.documentElement.className += ' jsenabled';

    if (!("ontouchstart" in document.documentElement)) {
        document.documentElement.className += " no-touch";
    }








    (function(){var k=13,d=4,j=0,a=document.documentElement,b=[a.className],f,c=navigator.plugins,g=k;if(c&&c.length){f=c["Shockwave Flash"];if(f&&f.description){j=parseInt(f.description.match(/\b(\d+)\.\d+\b/)[1],10)||0}}else{while(g--){try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+g);j=g;break}catch(h){}}}b.push("flash-"+j);while(j-->d){b.push("flash-gt"+j)}a.className=b.join(" ")})();
    (function(){var j=this,n=/^(on)?load/,b=/^on/,i="addEventListener",f="attachEvent",e="_oc",h="detachEvent",g="removeEventListener",l=j[i],m=j[g],p=j[f],a=j[h],k={},d=0;function c(r,s,q){if(!r||!s){return;}if(n.test(r)){if(!s[e]){var t=++d;s[e]=t;k[t]=s;}}else{if(p&&b.test(r)){p(r,s);}else{if(l){l(r,s,q);}}}}function o(r,s,q){if(!r||!s){return;}if(n.test(r)){var t=s[e];if(t){delete k[t];}}else{if(a&&b.test(r)){a(r,s);}else{if(m){m(r,s,q);}}}}j.OnloadCache={enable:function(){if(l){j[i]=c;j[g]=o;}if(p){j[f]=c;j[h]=o;}},disable:function(){if(l){j[i]=l;j[g]=m;}if(p){j[f]=p;j[h]=a;}},dispatch:function(){var r={type:"load"},q;for(q in k){if(k.hasOwnProperty(q)){k[q](r);}}},reset:function(){k={};}};})();

OnloadCache.enable();

        var setJSCookie = true;
(function () {
    var cookieName = "FBJSC=";
    var cookieValue = "1409123746";
    var cookieIndex = document.cookie.indexOf(cookieName);
    if(cookieIndex >= 0) {
        var oldValue = document.cookie.substr(cookieIndex + cookieName.length, cookieValue.length);
        if(cookieValue <= oldValue) {
            setJSCookie = false;
        }
    }

    if(setJSCookie) {
        document.cookie = cookieName + cookieValue;
    }
})();' failed: org.mozilla.javascript.EcmaError: TypeError: Cannot read property "className" from undefined (httpunit#3)

任何帮助将不胜感激。谢谢。enter code here

4

1 回答 1

0

作为 httpunit 提交者之一,我建议阅读常见问题解答:http: //httpunit.sourceforge.net/doc/faq.html

httpunit 的 JavaScript 支持是有限的。您得到的错误表明您遇到了比 httpunit 可以处理的更复杂的 JavaScript 代码。作为一种解决方法,您可能希望完全关闭 javascript(如果在您的用例中可能的话)。

以下来自 HttpUnit 的开发者常见问题解答:

HttpUnit 1.x 对 Javascript 的支持是有限的。有一个新的 Javascript 引擎正在开发中,但由于资源有限,开发几乎停滞不前。要解决您可能想要的问题

  • 尝试新的脚本引擎
  • 关闭 JavaScript
  • 如果你得到一个 org.mozilla.javascript.EcmAError ... undefined ... 找到缺少的 javascript 函数,实现它并为社区提供补丁,请参阅“6.我如何建议对 httpunit 进行修改?”
于 2014-09-21T13:02:22.903 回答