HtmlUnit入门一

摘要:
Htmlunit是一个开源的java页面分析工具。阅读页面后,您可以有效地使用htmlunit分析页面上的内容。使用htmlunit抓取网页可以分为以下步骤:1。定义WebClient客户端。让我们来看一个示例:packagecom.fuwh;importcom.gargoylesoftware.htmlunit.WebClient;importcom.gargoylesoftware.htmlunit.html.HtmlPage;PublicclassDemo01{publicstaticvoidmain{WebClientwebClient=null;try{webClient=newWebClient();//定义默认的WebClientHtmlPagepage=webClient.getPage;//从指定的URL获取HtmlPageSystem.out.println;//将HtmlPage转换为字符串并打印出来}catch{/TODO:handleexception.printStackTrace();}最后{webClient.close();//close客户端}在上面的示例中,我们创建了一个默认的WebClient实例,它使用WebClient#getBrowserVersion()方法。您可以看到默认创建的浏览器是Chrome版本。HtmlUnit还为查找指定元素提供了丰富的支持。

htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。

项目可以模拟浏览器运行,被誉为java浏览器的开源实现。是一个没有界面的浏览器。

采用的是Rhinojs引擎。模拟js运行。

使用htmlunit抓取网页大概可以分为以下几个步骤:

1、定义一个WebClient客户端。

  就相当于定义了一个没有界面的浏览器。

2、使用WebClient客户端从指定URL获取HtmlPage。

  HtmlPage中包含目标URL页面中的所有信息。

3、从HtmlPage中获取我们需要的指定元素。

下面就来看一个实例:

package com.fuwh;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Demo01 {

    public static void main(String[] args) {
        
        WebClient webClient=null;
        try {
             webClient= new WebClient();    //定义一个默认的WebClient
            HtmlPage page=webClient.getPage("https://www.cnblogs.com/");    //从指定URL获取HtmlPage
            System.out.println(page.asText());    //将HtmlPage转换成字符串打印出来
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            webClient.close();    //关闭客户端
        }
    }
}

上面的实例中,我们创建的是一个默认的WebClient实例,使WebClient#getBrowserVersion()方法,可以看到,

默认创建的是Chrome版本的浏览器。

当然,我们也可以在创建的时候指定浏览器的版本。

例子:

package com.fuwh;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Demo01 {

    public static void main(String[] args) {
        
        WebClient webClient=null;
        try {
             webClient= new WebClient(BrowserVersion.FIREFOX_45);    //定义一个WebClient
            HtmlPage page=webClient.getPage("https://www.cnblogs.com/");    //从指定URL获取HtmlPage
            System.out.println(page.asText());    //将HtmlPage转换成字符串打印出来
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            webClient.close();    //关闭客户端
        }
    }
}

在BrowserVersion中,定义了很多种浏览器的版本。

在获得一个HtmlPage之后,相对于把整个页面打出来,我们还是更希望能够找出我们想要的元素。

HtmlUnit对于查找指定元素也提供了丰富的支持。

支持使用DOM,CSS和XPath(推荐)的方式。

使用DOM方式

package com.fuwh;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Demo01 {

    public static void main(String[] args) {
        
        WebClient webClient=null;
        try {
             webClient= new WebClient(BrowserVersion.FIREFOX_45);    //定义一个WebClient
            final HtmlPage page=webClient.getPage("https://www.cnblogs.com/");    //从指定URL获取HtmlPage
            
            /**
             * DomElement 的子类:HtmlElement
             * HtmlElemnt也有很多子类,基本上涵盖了所有的Html元素
             * 例如:HtmlDivision,HtmlInput
             */
            System.out.println("=============================================");
            //通过id获取指定DOM元素
            HtmlDivision htmlDiv=(HtmlDivision) page.getElementById("header");
            System.out.println(htmlDiv.asXml());

            System.out.println("=============================================");
            //通过tagName来获取元素集合
            DomNodeList<DomElement> nodeList=page.getElementsByTagName("a");
            for (DomElement domElement : nodeList) {
                HtmlAnchor htmlAnchor=(HtmlAnchor) domElement;
                System.out.println("标题:"+htmlAnchor.asText()+"   -->   地址:"+htmlAnchor.getAttribute("href"));
            }
            
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            webClient.close();    //关闭客户端
        }
    }
}

使用CSS方式

package com.fuwh;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Demo02 {

    public static void main(String[] args) {
        
        WebClient webClient=null;
        try {
             webClient= new WebClient(BrowserVersion.FIREFOX_45);    //定义一个WebClient
            final HtmlPage page=webClient.getPage("https://www.cnblogs.com/");    //从指定URL获取HtmlPage
            
            HtmlDivision htmlDiv =page.querySelector("div");//获取第一个div
            System.out.println(htmlDiv.asXml());
            
            System.out.println("====================================");
            
            HtmlDivision htmlDiv2=page.querySelector("div#footer_bottom");//也可以指定多个选择器,通过‘,’隔开
            System.out.println(htmlDiv2.asXml());
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            webClient.close();    //关闭客户端
        }
    }
}

使用XPath方式

package com.fuwh;

import java.util.List;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Demo03 {

    public static void main(String[] args) {
        
        WebClient webClient=null;
        try {
             webClient= new WebClient(BrowserVersion.FIREFOX_45);    //定义一个WebClient
            final HtmlPage page=webClient.getPage("https://www.cnblogs.com/");    //从指定URL获取HtmlPage
            
            List<HtmlDivision> divList=page.getByXPath("//div[@id='cnblogs_a1']");
            for (HtmlDivision htmlDivision : divList) {
                System.out.println("***********************************************8");
                System.out.println(htmlDivision.asXml());
            }
            
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            webClient.close();    //关闭客户端
        }
    }
}

免责声明:文章转载自《HtmlUnit入门一》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇phpstudy 升级(更换) mysql 版本Linux下安装Python3.x和第三方库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Http自动跳转Https的接口测试实践

日前,需要做一个接口测试,对象是一个web系统,登录的时候需要用SSL连接,登录进入系统后自动转成普通的Http连接。 这种类型的web网站很常见,既保证了登录时的安全,也避免了整个系统使用SSL带来的系统性能下降的问题。 首先,我们把整个访问过程分解成3个过程: 访问http接口:http://***.com/?; 跳转到Https,登录用ssl连...