zoukankan      html  css  js  c++  java
  • htmlunit 简单操作

    首先我们新建一个Maven普通客户端项目,然后打开pom.xml

    引入htmlunit支持:

    <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit</artifactId>
        <version>2.26</version>
    </dependency>

    然后我们写一个测试类,来解析www.baidu.com 获取网页html以及网页文本,这里有点类似httpClient,但是底层执行过程默认多了一个js执行过程(当然htmlunit提供了关闭js解析设置); 

    package com.demo;
    import com.gargoylesoftware.htmlunit.BrowserVersion;
    import java.io.IOException;
    import java.net.MalformedURLException;
     
    import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
    import com.gargoylesoftware.htmlunit.WebClient;
    import com.gargoylesoftware.htmlunit.html.HtmlPage;
     
    public class HtmlUnitTest {
     
        public static void main(String[] args) {
           //模拟指定浏览器   使用代理
            WebClient webClient=new WebClient(BrowserVersion.FIREFOX_52,"202.106.16.36",3128); // 实例化Web客户端  
     webClient.getOptions().setCssEnabled(false); // 取消css支持
            webClient.getOptions().setJavaScriptEnabled(false); // 取消javascript支持
            try {
                HtmlPage page=webClient.getPage("http://www.baidu.com"); // 解析获取页面
             Thread.sleep(10000); // 休息10秒钟 等待htmlunit执行js
    
              HtmlForm form=page.getFormByName("myform"); // 得到搜索Form
                HtmlTextInput textField=form.getInputByName("q"); // 获取查询文本框
                HtmlSubmitInput button=form.getInputByName("submitButton"); // 获取提交按钮
                textField.setValueAttribute("java"); // 文本框“填入”数据
                HtmlPage page2=button.click(); // 模拟点击
    
                HtmlTable table=page.getHtmlElementById("table1");
                for(HtmlTableRow row:table.getRows()){ // 遍历所有行
                    for(HtmlTableCell cell:row.getCells()){  // 遍历所有列
                        System.out.print(cell.asText()+" ");
                    }
                    System.out.println();
                }
    
                HtmlDivision div=page.getHtmlElementById("navMenu");  // 查找指定id的html dom元素
                System.out.println(div.asXml());
                System.out.println("======================");
                DomNodeList<DomElement> aList=page.getElementsByTagName("a"); // 根据tag名称查询所有tag
                for(int i=0;i<aList.getLength();i++){
                    DomElement a=aList.get(i);
                    System.out.println(a.asXml());
                }
                System.out.println("======================");
                HtmlListItem item =(HtmlListItem) page.getByXPath("//div[@id='navMenu'][1]/ul/li").get(0); // xpath方式
                System.out.println(item.asXml());
    
                System.out.println("网页html:"+page.asXml()); // 获取Html
                System.out.println("====================");
                System.out.println("网页文本:"+page.asText()); // 获取文本
            } 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();
            }finally{
                webClient.close(); // 关闭客户端,释放内存
            }
        }
    }

    这里代理IP如何找 ,很多网站都有提供的,我们介绍一个,http://www.66ip.cn

  • 相关阅读:
    Java学习的第二十八天
    Java学习的第二十七天
    第五章 作用域闭包
    第4章提升
    第3章函数作用域和块级作用域
    Vant中List列表下拉加载更多
    获取当前时间
    js比较两个时间的大小
    边框引起页面抖动
    计算两个数的百分比,保留两位小数
  • 原文地址:https://www.cnblogs.com/iathanasy/p/8109794.html
Copyright © 2011-2022 走看看