花了我整整一天,终于搞定了,爽到。

花了那么久时间主要原因一个是抓包姿势不对【firefox和chrome的抓包结果不一样让人很绝望啊;一个是工具选择不好【辣鸡jsoup

httpclient还是强啊,自动维持session和cookie的特性着实方便了不少。

目前还有两个待解决的问题,一是验证码要手动输入,二是rsa,pl,ul这几个参数必须首先登陆一次才能拿到(这跟用户名密码绑定的)验证码手动输入的问题不难,图片很好认,用现有的工具很好搞定。第二个就比较困难了,首先我找不到加密脚本的位置orz

/********************************************************************************************************************/

2018-2-23晚:成功解决验证码问题!,使用tess4j工具即可完成简单验证码的识别!据说还能通过训练强化tesseract的识别能力!太强大了.jpg

package just4tset4;
import java.util.*;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.io.*;
import java.util.*;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class ECNUTEST {public static String LOGIN_URL = "https://portal1.ecnu.edu.cn/cas/login";//登陆页面,提交页面public static String CODE_URL = "https://portal1.ecnu.edu.cn/cas/code";//验证码页面public static String TARGET_URL = "http://portal.ecnu.edu.cn/neusoftcas.jsp";//目标页面public static String UA = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0";//浏览器标识  public static String RSA = "A03D1C4A03E7D45D4A27E911562AA7BA5F3AA7D9CB96A5883CA"//加密过的用户名/密码+ "E95766F36AB689F36F226BB954FCD5341FF584B5500F9F9C0B8448B6896DB94D5"+ "BB6FC0E9698A57DSDFFSFFFFFFFFFFFFSFGDSDSVDCBCA6F333F73EB9982DE8FC"+ "81E7CA0A5327AAD47E588D8F21CB58BAC40A245BE2B36DEF0F61747369041DED879FBF3";public static List<NameValuePair> list=new ArrayList<NameValuePair>();//存放post请求的参数public static CookieStore store = new BasicCookieStore();//存储cookiepublic static void main(String[] args) throws Exception {//初始化浏览器 ,设置标识,建立cookiestore,默认重定向策略为全部请求都跟随重定向(本例中无影响HttpClient client = HttpClientBuilder.create().setUserAgent(UA).setRedirectStrategy(new LaxRedirectStrategy()).setDefaultCookieStore(store).build();  HttpGet con1 = new HttpGet(LOGIN_URL);//建立get请求HttpResponse res = client.execute(con1);//发送请求,得到响应Document doc = Jsoup.parse(EntityUtils.toString(res.getEntity()));//将响应实体转为document,利用jsoup解析//下载验证码图片HttpGet pic = new HttpGet(CODE_URL);HttpResponse res2 = client.execute(pic);OutputStream cout = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Simon\\Desktop\\emm\\code.jpg"));res2.getEntity().writeTo(cout);//写入文件输出流cout.close();String cap = OCRUtils.get("C:\\Users\\Simon\\Desktop\\emm\\code.jpg");Elements ele = doc.select("input");for (Element x:ele) {if (x.attr("name").equals("rsa"))x.attr("value",RSA);         if (x.attr("name").equals("ul")) x.attr("value","587");if (x.attr("name").equals("pl"))x.attr("value","8");if (x.attr("name").equals("code"))x.attr("value",cap);//排除空值表单属性 ,把该参数放进list里if (x.attr("name").length()>0&&!x.attr("name").equals("autoLogin"))list.add(new BasicNameValuePair(x.attr("name"),x.attr("value")));}HttpPost con3 = new HttpPost(LOGIN_URL);//新建post请求con3.setEntity(new UrlEncodedFormEntity(list));//设置请求体的参数HttpResponse res3 = client.execute(con3);//执行响应//System.out.println(store);//天坑注意!res3响应会重定向到登陆页面,这并不是我们想要的,必须再次创建get请求,目标是TARGET_URLHttpGet con4 =new HttpGet(TARGET_URL);con4.setHeader("Referer",LOGIN_URL);//设置一下请求头,表明一下自己从哪里来HttpResponse res4 = client.execute(con4);System.out.println(res4.getStatusLine().getStatusCode());//返回http状态码System.out.println(EntityUtils.toString(res4.getEntity()));//获取实体的字面值得用EntityUtils类的静态方法System.out.println(store);//查看cookie}
}

OCR工具类

package just4tset4;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.util.ImageHelper;
public class OCRUtils {public static String get(String path) throws Exception  {File pic = new File (path);//图片位置//图片二值化,转化为黑白图BufferedImage grayImage = ImageHelper.convertImageToBinary(ImageIO.read(pic));ImageIO.write(grayImage, "jpg", pic);ITesseract instance = new Tesseract();//新建实例instance.setLanguage("eng");//选择字库文件(只需要文件名,不需要后缀名)String result = instance.doOCR(pic);//开始识别//天坑注意!result自带两个空格! return result.substring(0,result.length()-2);}
}

一键模拟登陆华师大公共数据库!ver2.0相关推荐

  1. php模拟登陆正方教务管理系统(thinkPHP5.0)

    如果想书写一个爬虫,首先应该通过浏览器将你登陆时,本地与服务器之间的信息传递通过抓包的方式获得,然后通过编程语言去模拟这种信息传递. 首先在浏览器上登陆正方教务系统,用Fiddler进行抓包, 发现我 ...

  2. pytho简单爬虫_模拟登陆西电流量查询_实现一键查询自己的校园网流量

    闲来无事,由于校园内网络是限流量的,查询流量很是频繁,于是萌生了写一个本地脚本进行一键查询自己的剩余流量. 整个部分可以分为三个过程进行: 对登陆时http协议进行分析 利用python进行相关的模拟 ...

  3. 华师大副校长任友群:互联网+校园新挑战

    本文讲的是华师大副校长任友群:互联网+校园新挑战,7月3日,"智慧校园:腾讯QQ'互联网+'教育服务战略合作签约仪式"在北京腾讯汇成功举办.会上,腾讯QQ正式推出"互联网 ...

  4. 华师大数据科学考研_2020年华东师范大学行政管理专业考研报录比、参考书目、考研经验分享...

    一.考研选择该校的原因以及考虑到的因素 1.学校定位,对比本科学校.每个人考研都有一个非常重要的原因,就是去比本科更好的学校,提高出身问题.所以大家都想考985.211.我也不例外,因为我本科是211 ...

  5. 华师大数据科学考研_21考研择校 | 华东师范大学软件工程怎么样?

    本文转载自公众号"CS优化狮", 如需转载,请注明出处. 学校名气 华东师范大学,"985工程"."211工程"."双一流&quo ...

  6. 豆瓣网络爬虫-java网络爬虫[验证码模拟登陆]详细介绍

    目录 抓包介绍 解决验证码的思路 验证码地址拼接 爬虫实战 爬虫架构 model main 解析htmlparse 数据库操作程序db 近期,有人将本人博客,复制下来,直接上传到百度文库等平台. 本文 ...

  7. 网络爬虫模拟登陆获取数据并解析实战(二)

    本文为原创博客,仅供学习使用.未经本人允许禁止复制下来,上传到百度文库等平台. 目录 分析要获取的数据 程序的结构 构建封装数据的model 模拟登陆程序并解析数据 结果展示 分析要获取的数据 下面继 ...

  8. python的模拟登录原理_python---cookie模拟登陆和模拟session原理

    cookie模拟登陆: import tornado.web class IndexHandler(tornado.web.RequestHandler): def get(self): #self. ...

  9. 模拟登陆新版正方教务管理系统【可以获取学生基本/课表信息】

    写在前面 博主登陆现在还可以正常使用,但是后面登陆成功,获取信息啥的有问题 登陆还是按照学长的来,模拟登陆新版正方教务管理系统 开始 学校教务系统改版,我直接copy博主代码获取学籍那里一直是获取到的 ...

最新文章

  1. 剑指offer:面试题29. 顺时针打印矩阵
  2. 月薪30k~50k,这个领域的人才正在被疯抢!
  3. DNS Tunnel判定方法
  4. ADO.NET开发总结(学习笔记)
  5. [蓝桥杯2018初赛]第几个幸运数-数论+枚举
  6. 视频光端机常见故障问题及处理方法大全
  7. 遍历二叉树的全部方法(递归+非递归)
  8. Win7系统提示NVIDIA显示设置不可用怎么办
  9. Docker安装稳定版及指定版本
  10. Ubuntu查看有线网卡eth0和eth1分别对应网卡型号
  11. Kubernetes学习之污点
  12. 5分钟学会Pixel刷机
  13. 冷门但好用的 Python 库推荐一波
  14. 教父三部曲观后感总结
  15. 家乐福中国独立上市,是苏宁的一颗“定心丸”吗?
  16. 基于单片机的多功能定时器
  17. 剪不断理还乱--C#重载/重写/覆盖
  18. LVS均衡负载(一) LVS详解
  19. 备受关注的无人便利店代理前景如何?
  20. PMSM FOC控制 Matlab/Simulink仿真之反Park变换

热门文章

  1. ssm毕设项目iGame游戏交易平台nzln3(java+VUE+Mybatis+Maven+Mysql+sprnig)
  2. 苹果设计思维案例研究,困难期生存的关键
  3. 破解版XMind图文安装教程
  4. mui ajax 下拉,mui下拉菜单
  5. Pg extention pg_buffercache
  6. tweenMax代码未定义问题
  7. 对于人工智能的认识,我们需要更深入全面的理解
  8. Unity 的 Scroll View组件
  9. Python 的文件定位
  10. EKS日志收集方案-PLG(Promtail+Loki+Grafana)