普通网友 2017-04-25 02:47 采纳率: 100%
浏览 2052
已结题

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

移动登陆地址: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条回答 默认 最新

  • _1_1_7_ 2017-04-25 03:01
    关注

    会报错,校验到密码了

     四月 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();
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝