java爬虫htmlunit模拟浏览器登录

介绍

刚学到了一种超实用的java爬虫技术htmlunit,先记录一下。htmlunit其实就是一个没有界面的浏览器,操作很简单,就像自己在使用浏览器。本文介绍其简单的几个操作,仅初学了解htmlunit。第一是模拟登录网站,第二是获取网页html源码。

准备

下载htmlunit的jar包,点击进入官网下载,下载后,里面有十几个jar包,导入到自己的编译环境里。

案例

说明:31、35、39行是获取元素的方式,跟javascript很像。24,25行是你的账号密码,26行是登录页面网址。运行work函数可以获得对应页面的html源码。

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlButton;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;

import java.io.IOException;

public class Demo {
    WebClient webClient;
    public Demo(){
        webClient = new WebClient(BrowserVersion.CHROME);//新建一个模拟谷歌Chrome浏览器的浏览器客户端对象
        webClient.getOptions().setThrowExceptionOnScriptError(false);//当JS执行出错的时候是否抛出异常, 这里选择不需要
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);//当HTTP的状态非200时是否抛出异常, 这里选择不需要
        webClient.getOptions().setActiveXNative(false);
        webClient.getOptions().setCssEnabled(false);//是否启用CSS, 因为不需要展现页面, 所以不需要启用
        webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS。有些网站要开启!
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
        webClient.getOptions().setTimeout(30000);
    }
    public void login() { //登录
        String userName="************";  //你的账号和密码
        String password="************";
        String loginUrl="*****************"; //登录页面的网址
        try {
            final HtmlPage page = webClient.getPage(loginUrl);//打开登录页面
            System.out.println(page.getWebResponse().getContentAsString()); //输出一下登录页面看看
            //获取账号输入框结点,然后点击账号输入框,最后输入
            HtmlTextInput inputUserName= (HtmlTextInput) page.getElementsByName("********").get(0);
            inputUserName.click();
            inputUserName.setText(userName);

            HtmlPasswordInput inputPasswd= (HtmlPasswordInput) page.getElementsByName("*********").get(0);
            inputPasswd.click();
            inputPasswd.setText(password);

            HtmlButton btnLogin= (HtmlButton) page.getElementById("**************");
            btnLogin.click(); //点击登录按钮,返回值为登陆成功后跳到的页面
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //爬取某网页
    public void work(String url) {
        try {
            HtmlPage page = webClient.getPage(url);//打开网页
            String html=page.getWebResponse().getContentAsString(); //获取网页源代码html
            System.out.println("爬取成功,html代码如下:");
            System.out.println(html);
            /*
             * 这里可以做一些事情,从html中截取所需数据。具体方法可以使用正则表达式
             */
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args){
        Demo demo=new Demo();
        demo.login(); //如果网站必须登录才能进入,那就登录
        System.out.println("已登录:");
        demo.work("**********************");
    }
}

 

你可能感兴趣的:(java爬虫htmlunit模拟浏览器登录)