在htmlUnit中执行Javascript

时间:2011-11-25 11:03:23

标签: javascript htmlunit

我正在尝试使用htmlUnit执行javascript。执行javascript后,我想检查页面是否因javascript执行而发生了一些变化。即我想比较javascript执行前后的html页面......

我有什么想法可以做到这一点......

这是示例代码,解释了我真正打算做的事情......

public static void main(String[] args) {
    final WebClient webClient = new WebClient();

    HtmlPage page;
    try {
        page = webClient
                .getPage("http://www.somepage.com");
        System.out.println(page.asXml());
        System.out.println(page.getByXPath("//script"));

        BufferedInputStream buffer = null;
        // System.out.print("getWebSite " + urlValue + "\n");

        URL url = new URL(
                "http://www.somepage.com/someJS.js");
        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        buffer = new BufferedInputStream(urlc.getInputStream());

        StringBuilder builder = new StringBuilder();
        int byteRead;
        while ((byteRead = buffer.read()) != -1)
            builder.append((char) byteRead);

        buffer.close();

        ScriptResult result = page.executeJavaScript(builder.toString());
        Object jsResult = result.getJavaScriptResult();

        HtmlPage afterExecution = (HtmlPage) result.getNewPage();

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

    } catch (FailingHttpStatusCodeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

1 个答案:

答案 0 :(得分:1)

“执行”Javascript源代码不会执行任何操作。我希望你从result.getNewPage()得到的回报很少。尝试更改示例以访问真实网站,并解释您希望看到的结果,然后我们可以尝试执行您的示例。

也就是说,有一件事可以帮助您将HtmlUnit视为您通过Java控制的浏览器。你没有在页面中“运行”Javascript,HtmlUnit运行它。你假装你是一个人类用户点击的东西,但你通过Java代码“点击”。

在您的示例中,您将导航page中的DOM以查找用于触发Javascript的内容 - 可能是单击按钮或图像。调用click()的结果将为您提供一个由Javascript所做的新页面。