欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浅谈HtmlUnit

程序员文章站 2022-05-05 14:48:06
...

最近学习了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 模拟点击、动态获取信息