我正在尝试使用 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/