htmlunit有强大DOM模拟操作功能 包括给Input设置数据,模拟按钮点击等;
我们现在来用htmlunit模拟本站博客搜索功能;
比如我们要让htmlunit 填入查询关键字 然后点击 “搜索”,然后返回查询页面内容;
我们审查元素,可以看到form的name input的name htmlunit可以通过name得到dom然后来实现模拟;
我们给下参考代码:
package com.open1111; import java.io.IOException; import java.net.MalformedURLException; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; public class HtmlUnitTest5 { public static void main(String[] args) { WebClient webClient=new WebClient(BrowserVersion.FIREFOX_52); // 实例化Web客户端 try { HtmlPage page=webClient.getPage("http://blog.java1234.com/index.html"); // 解析获取页面 HtmlForm form=page.getFormByName("myform"); // 得到搜索Form HtmlTextInput textField=form.getInputByName("q"); // 获取查询文本框 HtmlSubmitInput button=form.getInputByName("submitButton"); // 获取提交按钮 textField.setValueAttribute("java"); // 文本框“填入”数据 HtmlPage page2=button.click(); // 模拟点击 System.out.println(page2.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(); }finally{ webClient.close(); // 关闭客户端,释放内存 } } }
运行输出:
其实就是搜索结果页面的源码: