caoheike
caoheike
2017-04-25 02:47

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

20
  • 爬虫
  • 中国移动
  • 数据

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

为你推荐

换一换