最近学习了HtmlUnit,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用
HtmlUnit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。是一个没有界面的浏览器,运行速度迅速。是junit的扩展之一。
个人理解HtmlUnit 就是一个动态地java页面解析器,HttpClient是一个静态的java页面解析器,HtmlUnit 的解析速度稍慢些,二者优势互补。
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.26</version>
</dependency>
/**
* @author ys
* @version 2.0
* @date 2020/6/3 10:03
* @desc 模拟百度搜索
*/
public class HtmlUnitTest6 {
public static void main(String[] args) {
WebClient webClient = new WebClient(BrowserVersion.CHROME,"118.78.196.143",8118); // 实例化Web客户端
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
try {
HtmlPage page = webClient.getPage("https://www.baidu.com/"); // 解析获取页面
HtmlForm form = page.getFormByName("f"); // 获取搜索Form
HtmlInput textField = form.getInputByName("wd"); // 获取查询文本框
HtmlSubmitInput button = (HtmlSubmitInput) page.getElementById("su"); // 获取提交按钮
textField.setValueAttribute("java"); // 文本框“填入”数据
HtmlPage resultPage = button.click(); // 模拟点击 获取查询结果页面
System.out.println(resultPage.asXml());
System.out.println("❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤");
} catch (FailingHttpStatusCodeException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
webClient.close(); // 关闭客户端,释放内存
}
}
}
webClient.getOptions().setJavaScriptEnabled(true);//运行js脚本执行
webClient.setAjaxController(new NicelyResynchronizingAjaxController());//设置支持AJAX
webClient.getOptions().setCssEnabled(false);//忽略css
webClient.getOptions().setUseInsecureSSL(true);//ssl安全访问
webClient.getOptions().setThrowExceptionOnScriptError(false); //解析js出错时不抛异常
webClient.getOptions().setTimeout(10000); //超时时间 ms
如有错误恳请指正,如有侵权请联系我删除
参考文章: 关于htmlunit运行时报各种错的坑
使用 HtmlUnit + Xpath 模拟点击、动态获取信息