我正在尝试使用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();
}
}
答案 0 :(得分:1)
“执行”Javascript源代码不会执行任何操作。我希望你从result.getNewPage()
得到的回报很少。尝试更改示例以访问真实网站,并解释您希望看到的结果,然后我们可以尝试执行您的示例。
也就是说,有一件事可以帮助您将HtmlUnit视为您通过Java控制的浏览器。你没有在页面中“运行”Javascript,HtmlUnit运行它。你假装你是一个人类用户点击的东西,但你通过Java代码“点击”。
在您的示例中,您将导航page
中的DOM以查找用于触发Javascript的内容 - 可能是单击按钮或图像。调用click()
的结果将为您提供一个由Javascript所做的新页面。