• 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();
            }
  • 相关阅读:
    无缘无故Spring MVC报错空指针异常
    无缘无故Spring MVC报错空指针异常
    无缘无故Spring MVC报错空指针异常
    SpringMVC整合Shiro
    SpringMVC整合Shiro
    SpringMVC整合Shiro
    (数据挖掘)大数据Flume+kafka+zookeeper+Strom/Spark/Fink......
    (数据分析)大数据Flume+kafka+zookeeper+Strom/Spark/Fink......
    java中的堆、栈和方法区
    mvn clean -U -e -B -X的作用+如何在eclipse中使用mvn clean -U -e -B -X?
  • 原文地址:https://www.cnblogs.com/tomcattd/p/2850662.html
Copyright © 2020-2023  润新知