使用htmlUnit模拟登陆网站(有验证码和无验证码)

最近在学习模拟登陆,本来想使用httpClient抓取数据,但是奈何不会。在机缘巧合下看到了HtmlUnit废话不多说。

上代码。

需要的jar包:使用htmlUnit模拟登陆网站(有验证码和无验证码)

主要的jar包是htmlUnit.jar,可在官网下载。

public class Test{

  public static void main(String[] args) throws Exception {  
  HtmlPage page = Test.lezhuan1();
  String asXml = page.asXml();
  System.out.println(asXml);
  }
  //某网站  需要验证码
  public static HtmlPage pceggs() throws Exception{
  //设置浏览器内核
         WebClient webClient = new WebClient(BrowserVersion.CHROME);
         webClient.getOptions().setThrowExceptionOnScriptError(false);
         //设置证书
         webClient.getOptions().setUseInsecureSSL(true);
         //是否启用js
         webClient.getOptions().setJavaScriptEnabled(true);
         //是否启用css
         webClient.getOptions().setCssEnabled(true);
         //设置Ajax控制器
         webClient.setAjaxController(new NicelyResynchronizingAjaxController());
         //获取页面  
         HtmlPage page = webClient.getPage("http://www.pceggs.com/nologin.aspx");//登陆页面
         HtmlInput username = (HtmlInput) page.getElementById("txt_UserName");//账号输入框的id
         HtmlInput password = (HtmlInput) page.getElementById("txt_PWD");//密码输入框的id
         HtmlInput code=(HtmlInput) page.getElementById("txt_VerifyCode");//验证码输入栏的id
        HtmlInput login=(HtmlInput) page.getElementById("Login_Submit");
               //验证码图片存储 参数:验证码的图片id
        HtmlImage vaCode=(HtmlImage) page.getElementById("valiCode");
        File file=new File("yzm.png");
        //保存图片到项目根目录下
        vaCode.saveAs(file);
        Scanner scanner=new Scanner(System.in);
        //查看你项目下的yzm.png 手动输入
        String codes=scanner.nextLine();
        username.setAttribute("value","你的账号");;
        password.setAttribute("value","你的密码");
        code.setAttribute("value", codes);
        page=login.click();
        // page 就是返回结果,如果需要html形式 page.asXML 如果是需要Text 则使用 page.asText
        return page;
  }
  //无需验证码
  public static HtmlPage lezhuan1() throws Exception {
  //设置浏览器内核
         WebClient webClient = new WebClient(BrowserVersion.CHROME);
         //设置证书
         webClient.getOptions().setUseInsecureSSL(true);
         //是否启用js
         webClient.getOptions().setJavaScriptEnabled(true);
         //是否启用css
         webClient.getOptions().setCssEnabled(true);
         //设置Ajax控制器
         webClient.setAjaxController(new NicelyResynchronizingAjaxController());
         //获取页面  
         HtmlPage page = webClient.getPage("http://www.lezhuan1.com/login.html");
         HtmlInput username = (HtmlInput) page.getElementById("tbUserAccount");
         HtmlInput password = (HtmlInput) page.getElementById("tbUserPwd");
         HtmlAnchor btn=page.getFirstByXPath("//li/a[@class='LoginBtn']");
         username.setAttribute("value","你的账号");;
         password.setAttribute("value","密码");
         //这个网站比较的特殊它的登陆按钮是一张图片,所以需要找到它的li 标签下的a 标签  class为LoginBtn识别
         page=btn.click();
        return page;
  }


}

maven依赖:

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