HtmlUnit的学习笔记

 官方网址:http://htmlunit.sourceforge.net/

 有时候你需要模拟浏览器,HtmlUnit 就是个不错的选择

 像 网页中js 中的内容,如果你想用爬虫爬取的话,用Jsoup 就不怎么行了,但是HtmlUnit 就是个不错的选择

 (1) HtmlUnit模拟表单提交

  下面的代码是模拟在百度里搜索 "root"  得到的page2 就是百度搜索"root" 的结果

package com.xinsearch;

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 Test {
    public static void main(String[] args) {
    
        try {
            WebClient client=new WebClient(BrowserVersion.FIREFOX_10);
            HtmlPage page=client.getPage("http://www.baidu.com/");
            HtmlForm form = page.getFormByName("f");
            HtmlTextInput text= form.getInputByName("wd");
            HtmlSubmitInput submit = form.getInputByValue("百度一下");
            text.setValueAttribute("root");
            HtmlPage page2=submit.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();
        }
        
        
    }
}

结果就不列出了
(2) 得到元素的方法有很多 下面写的是根据 Attribute 的方法 

  List<HtmlElement> body=page.getDocumentElement().getElementsByAttribute("div", "class", "item");

  

    try {
        WebClient webClient=new WebClient(BrowserVersion.FIREFOX_10);
        //这一步是创建一个模拟浏览器,使用浏览器版本为FIREFOX10.0,可以更改,如果
        //使用这个浏览器不能解决问题的时候,可以更换CHROME or IE
                URL url;
                
                    url = new URL("http://www.baidu.com");
            
        //创建一个url连接
                HtmlPage page = webClient.getPage(url);
        //使用模拟浏览器对这个链接发送请求
        HtmlInput input=(HtmlInput)page.getDocumentElement().getElementsByAttribute("input", "id",     "kw").get(0);
        //获取输入框
                input.setAttribute("value", "哪儿买");
        //然后设置输入框的属性值
                HtmlInput active=(HtmlInput) page.getDocumentElement().getElementsByAttribute("input","id","su").get(0);
        //获取你需要操纵的那个按钮
                HtmlPage result=active.click();
        //然后触发按钮上绑定的javascript事件,得到一个新的页面,这个页面就是从服务器//响应得到的
                System.out.println(result.asXml());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
原文地址:https://www.cnblogs.com/tomcattd/p/2850662.html