在 htmlUnit 中执行 Javascript

发布于 2024-12-18 04:03:31 字数 1623 浏览 2 评论 0原文

我正在尝试使用 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();
    }

}

I am trying to execute javascript using htmlUnit. After executing the javascript, I want to check if the page had some changes due to javascript execution. i.e I want to compare the html page before and after javascript execution...

Any ideas how I can do it...

Here's the sample code explaining what I actually intent to do...

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();
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白衬杉格子梦 2024-12-25 04:03:31

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

也就是说,可能对您有帮助的一件事是将 HtmlUnit 视为您通过 Java 控制的浏览器。您不会在页面中“运行”Javascript,而是 HtmlUnit 运行它。您假装您是一个正在点击事物的人类用户,但您是通过 Java 代码进行“点击”的。

在您的示例中,您将导航 page 中的 DOM 以查找用于触发 Javascript 的内容 - 也许单击按钮或图像。调用 click() 的结果将为您提供一个由 Javascript 执行的操作生成的新页面。

"Executing" the Javascript source won't do anything. I expect you get very little back from result.getNewPage(). Try changing the example to hit a real site, and explain what result you expect to see, then we can try executing your example.

That said, one thing that might help you is to think of HtmlUnit as a browser you control via Java. You don't "run" the Javascript in a page, HtmlUnit runs it. You pretend you are a human user clicking on things, but you do the "clicking" via Java code.

In your example, you would navigate the DOM in your page to find something that you use to trigger the Javascript -- perhaps clicking a button or an image. The result of calling click() will give you a new page resulting from whatever the Javascript did.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文