在htmlUnit中执行Javascript
我正在尝试使用htmlUnit执行javascript。在执行javascript之后,我想检查页面是否由于javascript的执行而发生了一些变化。i、 我想比较javascript执行前后的html页面 你知道我该怎么做吗 下面是示例代码,解释了我实际打算做什么在htmlUnit中执行Javascript,javascript,htmlunit,Javascript,Htmlunit,我正在尝试使用htmlUnit执行javascript。在执行javascript之后,我想检查页面是否由于javascript的执行而发生了一些变化。i、 我想比较javascript执行前后的html页面 你知道我该怎么做吗 下面是示例代码,解释了我实际打算做什么 public static void main(String[] args) { final WebClient webClient = new WebClient(); HtmlPage page; t
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代码进行“点击”
在您的示例中,您将在
页面
中导航DOM,以查找用于触发Javascript的内容——可能是单击按钮或图像。调用click()
的结果将为您提供一个新页面,该页面由Javascript所做的任何操作生成。htmlUnit是问题还是比较?嗨,Rodney,谢谢您的回复。是的,我知道htmlUnit是一个无头java浏览器,我必须调用click()事件和其他事件来执行javascript。我基本上想做的是:网站中通常包含很多使用标签的Javascript。我想知道这个javascripts是否被页面实际使用。因此,给定一个页面,我想检查它是否使用了它包含的所有Java脚本。用htmlUnit可以做到这一点吗?我是否使用了正确的工具?如果有更好的方法,请告诉我。谢谢,Irfan和任何浏览器一样,HtmlUnit将执行它找到的任何内容,然后等待用户交互触发Javascript。我不知道HtmlUnit本身会让您通过编程测试是否触发了某些特定的代码位(我似乎记得是通过调试器这样做的,虽然这很难看),但HtmlUnit使用的JS库中可能有一些钩子。也许不是。也许Firebug JS调试器可以帮助您?