zoukankan      html  css  js  c++  java
  • htmlunit 模拟登录 无验证码

    1.模拟登录csdn,最开始的时候使用的是httpclient,网上的所有模拟登录csdn的版本都是找到lt/execution/event_id.连同用户名及密码

    一起发送即可,但是目前的csdn的登录参数可不止这三个,fkid怎么解决?我抓包时发现fkid是登录时其value才被赋值,奈何找了半天找不到调用的函数,猜测是由js动态生成的,于是转而使用

    htmlunit

     1 public static void main(String[] args) throws Exception {
     2         WebClient client = new WebClient(BrowserVersion.CHROME);
     3         
     4         //允许js
     5         client.getOptions().setJavaScriptEnabled(true);
     6         
     7         //禁用css
     8         client.getOptions().setCssEnabled(false);
     9         
    10         //超时
    11         client.getOptions().setTimeout(5000);
    12         
    13         //js执行超时
    14         client.setJavaScriptTimeout(10000*3);
    15         
    16         //允许重定向
    17         client.getOptions().setRedirectEnabled(true);
    18         
    19         
    20         //必须设置js异常抛出禁止
    21         client.getOptions().setThrowExceptionOnScriptError(false);
    22         
    23         //设置忽略证书
    24         client.getOptions().setUseInsecureSSL(false);
    25         
    26         //设置ajax
    27         client.setAjaxController(new NicelyResynchronizingAjaxController());
    28         
    29         //设置cookie
    30         client.getCookieManager().setCookiesEnabled(true);
    31         
    32         //打开网址
    33         HtmlPage page = client.getPage("https://passport.csdn.net/account/login");
    34         
    35         //等待js加载完全
    36         client.waitForBackgroundJavaScriptStartingBefore(20000);
    37         
    38         HtmlForm form = (HtmlForm) page.getElementById("fm1");
    39         HtmlTextInput username =  form.getInputByName("username");
    40         HtmlPasswordInput password =  form.getInputByName("password");
    41         username.setValueAttribute("18361078119");
    42         password.setValueAttribute("01046818wyc");
    43         
    44         //定位登录按钮(xpath)
    45         HtmlButtonInput button  = (HtmlButtonInput) page.getByXPath("//input[(@class='logging')]").get(0);
    46          
    47         HtmlPage retPage = button.click();
    48        // 等待JS驱动dom完成获得还原后的网页  
    49        client.waitForBackgroundJavaScript(1000);  
    50        //输出url
    51        System.out.println(retPage.getUrl().toString());   
    52        //输出网页的内容
    53        System.out.println(retPage.asXml());
    54 
    55         client.close();
    56         
    57     }
  • 相关阅读:
    MyBatis学习总结——MyBatis快速入门
    Java网络socket编程详解
    java中导出EXCEL表格
    利用反射将xml转换为List<Object>
    Java中将xml转为List<实体类>
    JavaWeb | 之 | 角色管理的表结构设计和原理
    fastjson把对象转化成json避免$ref
    JSON解析(DATE)对象数据
    jstl中<c:forEach>的用法
    请求转发与请求重定向的区别
  • 原文地址:https://www.cnblogs.com/tele-share/p/9445419.html
Copyright © 2011-2022 走看看