javascript - 在 htmlUnit 中执行 Javascript

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

}

最佳答案

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

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

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

关于javascript - 在 htmlUnit 中执行 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8268143/

相关文章:

javascript - 如何对非导出函数进行单元测试?

java - HtmlUnit中如何通过Xpath获取元素

java - 使用 HtmlUnit 下载非 html 文件

javascript - vue/vuetify 动态修改 v-text-field 属性

javascript - 访问被 CORS 策略阻止的 Web list

java - HtmlUnit 修改传出请求吗?如何?

java - 如何将 SOCKS 与 HtmlUnit 一起使用?

firefox - 如何检测 Selenium 何时加载浏览器的错误页面

javascript - 如果使用 "async/await"而不是 "then and catch",此代码会是什么样子?

javascript - 如何创建带有“下一步”按钮和自动查找文件夹的 HTML 模板演示栏?