大神求救 htmlunit 爬虫抓取中国移动数据的问题。 20C

移动登陆地址:https://sn.ac.10086.cn/login

以下是我的测试代码。 根据元素获取图片保存到本地,然后scanner输入验证码之后模拟提交。但是 如果说 验证码输入的位数不对,还会给我返回 验证码必须为4位
如果按照我下载保存的验证码 去输入没有任何提示了,打印的页面还是 登陆页面。
所以 小弟不知道是因为验证码输入错了。 还是因为这种方法不行?求指教

    String phoneNo = "18220834780";
    String passwords = "xxx";
    String validateCodes = null;
    // 5、模拟用户登录
    final WebClient webClient = new WebClient();
    // 1.获取某个待测页面
    final HtmlPage page = webClient.getPage("https://sn.ac.10086.cn/login");

    System.out.println(page.getTitleText() + "---------------------");

    HtmlForm form = page.getForms().get(0);

    HtmlTextInput username = (HtmlTextInput) form.getInputByName("userName");
    System.out.println(username);

    HtmlPasswordInput password = (HtmlPasswordInput) form.getInputByName("password");
    System.out.println(password);
    HtmlTextInput verifyCode = (HtmlTextInput) form.getInputByName("verifyCode");
    username.setValueAttribute(phoneNo);
    password.setValueAttribute(passwords);

    DomNodeList<DomNode> iList = page.querySelectorAll(".loginPageBtn2013");
    HtmlImage valiCodeImg = (HtmlImage) page.getElementById("verifyImg");
    ImageReader imageReader = valiCodeImg.getImageReader();
    BufferedImage bufferedImage = imageReader.read(0);

    BufferedImage inputbig = new BufferedImage(256, 256, BufferedImage.TYPE_INT_BGR);
    Graphics2D g = (Graphics2D) inputbig.getGraphics();
    g.drawImage(bufferedImage, 0, 0, 100, 100, null); // 画图
    g.dispose();
    inputbig.flush();

    File file2 = new File("e:/"); // 此目录保存缩小后的关键图
    if (file2.exists()) {
        System.out.println("多级目录已经存在不需要创建!!");
    } else {
        // 如果要创建的多级目录不存在才需要创建。
        file2.mkdirs();
    }
    String name = "asasdas.png";
    String fname = name.substring(0, name.lastIndexOf("."));// 新名字
    ImageIO.write(inputbig, "jpg", new File("e:/" + fname + ".jpg")); // 将其保存在C:/imageSort/targetPIC/下
    System.out.println("请输入验证码");
    Scanner scanner = new Scanner(System.in);

    verifyCode.setValueAttribute(scanner.next());
    HtmlPage retPage = ((DomElement) iList.get(0)).click();
    System.out.println(retPage.asXml());

1个回答

会报错,校验到密码了

 四月 25, 2017 11:00:34 上午 com.gargoylesoftware.htmlunit.javascript.host.Window jsxFunction_confirm
警告: window.confirm("尊敬的客户,由于您的服务密码过于简单,为有效保护您个人信息安全,请您先修改服务密码!") no confirm handler installed, simulating the OK button
四月 25, 2017 11:00:34 上午 com.gargoylesoftware.htmlunit.WebClient openWindow
严重: Error loading content into window
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)

验证码应该是通过了,我改了一些:

        File path = new File("d:/login"); // 此目录保存缩小后的关键图
        if (!path.isDirectory())
            path.mkdirs();

        ImageIO.write(inputbig, "png", new File(path,"code.png")); // 将其保存在C:/imageSort/targetPIC/下
        System.out.println("请输入验证码");
        Scanner scanner = new Scanner(System.in);

        verifyCode.setValueAttribute(scanner.next());
        HtmlPage retPage = ((HtmlElement) iList.get(0)).click();
        System.out.println(retPage.asXml());
        scanner.close();
caoheike
caoheike 回复_1_1_7_: 我看了下 初始化密码的话 页面有消息框,验证码错误的情况下 也回这样提示,并且。如果不用默认的密码他直接登录之后又返回到首页了
接近 3 年之前 回复
u011606457
_1_1_7_ 还有就是注意版本的问题,我用的是htmlunit-2.9
接近 3 年之前 回复
caoheike
caoheike 还有 我没有输出 密码校验结果
接近 3 年之前 回复
caoheike
caoheike 谢谢 大牛 可以提供下 联系方式吗?交流下
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问