简体   繁体   中英

NicelyResynchronizingAjaxController does not work as expected

I need to get data from this Web site . Since it has AJAX calls I decided to use HtmlUnit for parsing.

This is my code:

public class MainPage {
final static String baseURI = "http://web1.seattle.gov/courts/cpi/CaseList.aspx";
final static WebClient webClient = new WebClient(BrowserVersion.CHROME);    

static HtmlPage currentPage = null;

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

        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getOptions().setThrowExceptionOnScriptError(false);

        final HtmlPage mainPage = webClient.getPage(baseURI);
        final HtmlForm searchForm = mainPage.getFormByName("form1");

        searchForm.getInputByName("rtbCaseNo").setValueAttribute("203123729");                      
        HtmlPage resultPage = searchForm.getInputByName("btnSrchByCaseNo").click();

        webClient.waitForBackgroundJavaScript(50000);                               
        System.out.println(resultPage.asText());    

    } catch (FailingHttpStatusCodeException | IOException e) {
        e.printStackTrace();
    } 
    finally {
        webClient.closeAllWindows();
    }
}

}

Firstly, when I click submit button, it seems no AJAX call at all, I don't see anything like:

INFO: Re-synchronized call to http://web1.seattle.gov/courts/cpi/CastList.aspx

Secondly, I've got some exceptions from HtmlUnit:

    INFO: Caught script exception
======= EXCEPTION START ========
EcmaError: lineNumber=[729] column=[0] lineSource=[null] name=[TypeError] sourceName=[http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=wAKJQuapfi2h0tvgddshu6GwSBoo0uJ-Q4zq1fpZG1ZOiNZgZZNomCn_OChvdWzXkxwIbSpMmitsYmDHmDpi-_Muj2-QmYqFjgrU54gChUB4h0YeDFGq7JyV0GIClurbdmC9pRNWwqRbk5gkFzybU7XnF9F4YUtiRPHHsC0TgYUJHhHR0&t=ffffffffdca80a43] message=[TypeError: Cannot read property "disabled" from undefined (http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=wAKJQuapfi2h0tvgddshu6GwSBoo0uJ-Q4zq1fpZG1ZOiNZgZZNomCn_OChvdWzXkxwIbSpMmitsYmDHmDpi-_Muj2-QmYqFjgrU54gChUB4h0YeDFGq7JyV0GIClurbdmC9pRNWwqRbk5gkFzybU7XnF9F4YUtiRPHHsC0TgYUJHhHR0&t=ffffffffdca80a43#729)]
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot read property "disabled" from undefined (http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=wAKJQuapfi2h0tvgddshu6GwSBoo0uJ-Q4zq1fpZG1ZOiNZgZZNomCn_OChvdWzXkxwIbSpMmitsYmDHmDpi-_Muj2-QmYqFjgrU54gChUB4h0YeDFGq7JyV0GIClurbdmC9pRNWwqRbk5gkFzybU7XnF9F4YUtiRPHHsC0TgYUJHhHR0&t=ffffffffdca80a43#729)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:684)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:616)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:591)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:985)
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventListeners(EventListenersContainer.java:177)
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:237)
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:804)
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:738)
    at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:869)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:874)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.doClickFireClickEvent(HtmlElement.java:1311)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1253)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1205)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1160)
    at MainPage.main(MainPage.java:29)
Caused by: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot read property "disabled" from undefined (http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=wAKJQuapfi2h0tvgddshu6GwSBoo0uJ-Q4zq1fpZG1ZOiNZgZZNomCn_OChvdWzXkxwIbSpMmitsYmDHmDpi-_Muj2-QmYqFjgrU54gChUB4h0YeDFGq7JyV0GIClurbdmC9pRNWwqRbk5gkFzybU7XnF9F4YUtiRPHHsC0TgYUJHhHR0&t=ffffffffdca80a43#729)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3603)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3587)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3608)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3624)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3634)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getObjectPropNoWarn(ScriptRuntime.java:1488)
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1233)
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)
    at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:309)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:103)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$4.doRun(JavaScriptEngine.java:609)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
    ... 18 more
Enclosed exception: 
net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot read property "disabled" from undefined (http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=wAKJQuapfi2h0tvgddshu6GwSBoo0uJ-Q4zq1fpZG1ZOiNZgZZNomCn_OChvdWzXkxwIbSpMmitsYmDHmDpi-_Muj2-QmYqFjgrU54gChUB4h0YeDFGq7JyV0GIClurbdmC9pRNWwqRbk5gkFzybU7XnF9F4YUtiRPHHsC0TgYUJHhHR0&t=ffffffffdca80a43#729)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3603)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3587)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3608)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3624)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3634)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getObjectPropNoWarn(ScriptRuntime.java:1488)
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1233)
    at script.Sys$WebForms$PageRequestManager$_onFormElementActive(http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=wAKJQuapfi2h0tvgddshu6GwSBoo0uJ-Q4zq1fpZG1ZOiNZgZZNomCn_OChvdWzXkxwIbSpMmitsYmDHmDpi-_Muj2-QmYqFjgrU54gChUB4h0YeDFGq7JyV0GIClurbdmC9pRNWwqRbk5gkFzybU7XnF9F4YUtiRPHHsC0TgYUJHhHR0&t=ffffffffdca80a43:729)
    at script.Sys$WebForms$PageRequestManager$_onFormElementClick(http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=wAKJQuapfi2h0tvgddshu6GwSBoo0uJ-Q4zq1fpZG1ZOiNZgZZNomCn_OChvdWzXkxwIbSpMmitsYmDHmDpi-_Muj2-QmYqFjgrU54gChUB4h0YeDFGq7JyV0GIClurbdmC9pRNWwqRbk5gkFzybU7XnF9F4YUtiRPHHsC0TgYUJHhHR0&t=ffffffffdca80a43:751)
    at script(http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=GzSW1c3NKsncPwlvGy3qGT-vozDnuoTbJRITSlPr6OEXzpdb1saFCmLwjRyqYfH5pta6HhEtCCU0x1VKNwmwJGlYwl2L_LdE-PxNHQjfNmEnmdhuyKvS5W28hsds4a5GmaIHjebqkMQ1yQVwZheqwC9K9wwuMr2kLfxJsg2&t=ffffffffdca80a43:47)
    at script(http://web1.seattle.gov/courts/CPI/ScriptResource.axd?d=GzSW1c3NKsncPwlvGy3qGT-vozDnuoTbJRITSlPr6OEXzpdb1saFCmLwjRyqYfH5pta6HhEtCCU0x1VKNwmwJGlYwl2L_LdE-PxNHQjfNmEnmdhuyKvS5W28hsds4a5GmaIHjebqkMQ1yQVwZheqwC9K9wwuMr2kLfxJsg2&t=ffffffffdca80a43:2948)
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)
    at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:309)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:103)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$4.doRun(JavaScriptEngine.java:609)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:616)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:591)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:985)
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventListeners(EventListenersContainer.java:177)
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:237)
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:804)
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:738)
    at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:869)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:874)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.doClickFireClickEvent(HtmlElement.java:1311)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1253)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1205)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1160)
    at MainPage.main(MainPage.java:29)
== CALLING JAVASCRIPT ==

  function (e) {
      return handler.call(element, new Sys.UI.DomEvent(e));
  }

======= EXCEPTION END ========

So I guess, because of those exceptions while loading JS caused issue with JS running on client site or something.

Any ideas?

just set BrowserVersio to firefox and remove NicelyResynchronizingAjaxController. let the webClient.waitForBackgroundJavaScript(50000); before and after getting new HtmlPage.

http://htmlunit.sourceforge.net/faq.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM