小编典典

HTMLUnit不等待Javascript

ajax

我有一个基于GWT的页面,我想使用HtmlUnit为它创建一个HTML快照。该页面使用产品上的Ajax /
JavaScript信息进行加载,因此大约1秒钟会出现一条正在加载…消息,然后显示内容。

问题是HtmlUnit似乎无法捕获信息,而我得到的只是“正在加载…”范围。

以下是HtmlUnit的实验代码,我在其中尝试给它足够的时间来等待数据加载,但是它似乎并没有改变任何内容,而且我仍然无法捕获GWT
javascript加载的数据。

        WebClient webClient = new WebClient();
        webClient.setJavaScriptEnabled(true);
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());

        WebRequest request = new WebRequest(new URL("<my_url>"));
        HtmlPage page = webClient.getPage(request);

        int i = webClient.waitForBackgroundJavaScript(1000);

        while (i > 0)
        {
            i = webClient.waitForBackgroundJavaScript(1000);

            if (i == 0)
            {
                break;
            }
            synchronized (page) 
            {
                System.out.println("wait");
                page.wait(500);
            }
        }

        webClient.getAjaxController().processSynchron(page, request, false);

        System.out.println(page.asXml());

有任何想法吗…?


阅读 341

收藏
2020-07-26

共1个答案

小编典典

感谢您的回应。实际上,我应该早点报告我自己找到了解决方案。显然,使用FF初始化WebClient时:

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);

它似乎正在工作。当使用默认构造函数初始化WebClient时,默认情况下使用IE7,我想FF对Ajax具有更好的支持,并且是推荐使用的仿真器。

2020-07-26