当前位置: 首页 > 工具软件 > HtmlUnit > 使用案例 >

浅谈HtmlUnit

陈季
2023-12-01

最近学习了HtmlUnit,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用



一 HtmlUnit简介

   HtmlUnit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。是一个没有界面的浏览器,运行速度迅速。是junit的扩展之一。
   个人理解HtmlUnit 就是一个动态地java页面解析器,HttpClient是一个静态的java页面解析器,HtmlUnit 的解析速度稍慢些,二者优势互补。

二 模拟百度搜索

  1. 需要的包
<dependency>
    <groupId>net.sourceforge.htmlunit</groupId>
    <artifactId>htmlunit</artifactId>
    <version>2.26</version>
</dependency>
  1. 代码演示
/**
 * @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(); // 关闭客户端,释放内存
        }
    }
}
  1. 其他补充
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 模拟点击、动态获取信息

 类似资料: