没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下。。。。
     为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以用上,哈哈!
     公司内部系统,登录没有验证码,如果是有验证码的系统还得找破解方法
     定时器是用的spring的,没用spring的可以自己写个定时器
     用到的组件:httpclient-4.2.5.jar,httpcore-4.2.4.jar,jsoup-1.7.2.jar
     jsoup官方下载地址:http://jsoup.org/download
     httpclient官方下载地址:http://hc.apache.org/downloads.cgi
     废话不多说,贴上我的代码

 @Component
public class Login extends BaseJobs { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
/**
* 获取当月第一天
*
* @return
*/
public String getFirstDayOfMonth() {
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
return sdf.format(lastDate.getTime()); } /**
* 计算当月最后一天
* @return
*/
public String getLastDayOfMonth() { Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号
lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天
return sdf.format(lastDate.getTime()); } //测试
public static void main(String args[]) throws Exception {
Login l = new Login();
l.login();
} private static CookieStore cs = new BasicCookieStore(); //利用spring定时器 每天早上10点一刻抓取并发邮件
@Scheduled(cron = "0 15 10 ? * *")
public void login() throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient(); // 创建一个本地上下文信息
HttpContext localContext = new BasicHttpContext();
// 在本地上下问中绑定一个本地存储
localContext.setAttribute(ClientContext.COOKIE_STORE, cs);
// 目标地址
HttpPost httppost = new HttpPost(
"http://***/userLogin.do");
// 传参
StringEntity reqEntity = new StringEntity(
"userName=jianancun&password=123456&randNum=565656");
// 设置类型
reqEntity.setContentType("application/x-www-form-urlencoded");
// 设置请求的数据
httppost.setEntity(reqEntity);
// 执行
HttpResponse response = httpclient.execute(httppost);
//取得所有头内容
Header[] headers = response.getAllHeaders();
for (Header h : headers) {
String name = h.getName();
String value = h.getValue();
System.out.println("header : " + h.getName() + ":" + h.getValue());
if ("Set-Cookie".equalsIgnoreCase(name)) {
String[] strs = value.split(";");
for (String str : strs) {
String[] cookies = str.split("=");
//输出cookie名称及标题
// System.out.println("=============== : " + cookies[0] + ":" + cookies[1]);
cs.addCookie(new BasicClientCookie(cookies[0], cookies[1]));
}
cs.addCookie(new BasicClientCookie("userId", "8888"));
cs.addCookie(new BasicClientCookie("userName", "jiannancun"));
cs.addCookie(new BasicClientCookie("state", "0"));
cs.addCookie(new BasicClientCookie("iAdmin", "0"));
cs.addCookie(new BasicClientCookie("depCode", "0"));
}
}
HttpEntity entity = response.getEntity();
// 显示结果
BufferedReader reader = new BufferedReader(new InputStreamReader(
entity.getContent(), "UTF-8"));
String line = null;
//返回是否登录成功的内容 忽略
while ((line = reader.readLine()) != null) {
// System.out.println(line);
} //可以添加多个用户
String jlc[] ={URLEncoder.encode("贱男春"),"jiannancun@*.cn","888888"};
List<String[]> list = new ArrayList<String[]>();
list.add(jlc); for(String []u:list){
//查询本月考勤内容
String logPath = "http://**.cn/timeCard.jsp?nickName="+u[0]+"&eplTimeCard="
+u[2]+"&begDate="+getFirstDayOfMonth()+"&endDate="+getLastDayOfMonth();
String content= getContent(logPath);
Document doc = Jsoup.parse(content);
Elements tds = doc.select("table td");
int i =0;
//返回的内容
String html =""; ;
for (Element td : tds) {
//取前25行内容 前25行内容显示的是昨天和今天的考勤记录
if(i<25){
html+=td.text().replace(u[2],URLDecoder.decode(u[0]))+"<br>" ;
} else break; i++;
}
Map<String,Object> map = new HashMap<String,Object>();
map.put("mailTo",u[1]);
map.put("mailTitle","考勤提醒");
map.put("messageBody",html);
//发送邮件
//sendMail(map);
}
}
/**
* Function: 请求地址并返回页面内容
* @author JNC
* @param url
* @return
* @throws Exception
*/
private String getContent(String url) throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
String cookieStr = "";
List<Cookie> list = cs.getCookies();
for (Cookie cookie : list) {
cookieStr += cookie.getName() + "=" + cookie.getValue() + ";";
}
// 请求目标地址并带上cookie
HttpGet httpget = new HttpGet(url);
httpget.setHeader("Cookie", cookieStr);
// 执行
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
String resultStr ="";
BufferedReader reader = new BufferedReader(new InputStreamReader(
entity.getContent(), "UTF-8"));
String line = null;
while ((line = reader.readLine()) != null) {
resultStr+=line;
}
return resultStr;
}
}

原文地址:http://www.liutime.com/javainfo/2150/

Java模拟登录系统抓取内容【转载】的更多相关文章

  1. Java模拟新浪微博登陆抓取数据

    前言:  兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以今天有时间就整理整理,浅谈一二. 首先:  要想登陆新浪微博需要 ...

  2. PHP Curl模拟登录并抓取数据

    使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据.具体实现的流程如下(个人总结): 1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息: ...

  3. PHP获取cookie、Token、模拟登录、抓取数据、解析生成json

    本文介绍使用PHP获取cookie,获取Token.以及模拟登录.然后抓取数据.最后解析生成json的的过程. 0. 设置Cookie路径 set_time_limit(0); //使用的cookie ...

  4. Java模拟登陆新浪微博抓取数据【转载】

    package com.shiyimm.crawler.weibo; import java.io.FileNotFoundException; import java.io.FileReader; ...

  5. CURL的模拟登录和抓取页面

    <?php $curl = curl_init();// 初始化 // 准备提交的表单数据之账号和密码.(这个是根据表单选项来的) $data = "_username=6049892 ...

  6. java抓取网页数据,登录之后抓取数据。

    最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一 ...

  7. php爬虫入门 - 登录抓取内容

    PHP 写爬虫 说实话我也想用Python的,毕竟人家招牌.无奈我Python还停留在看语法的阶段,实在太惭愧,鞭笞一下自己加油学习.这里用php的CURL库进行页面抓取. 同事使用的系统需要先登录, ...

  8. PHP爬虫入门--简单的登录抓取内容

    给同事写一个小工具,抓取月报表然后统计加工.第一反应是做一个爬虫把需要的表和图抓下来,这样就不用再自己去连数据库然后组织表格生成图片之类的. 以上为背景 PHP 写爬虫 说实话我也想用Python的, ...

  9. 使用HttpClient 4.3.4 自动登录并抓取中国联通用户基本信息和账单数据,GET/POST/Cookie

    一.什么是HttpClient? HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 ...

随机推荐

  1. 她让我懂得了怎样学习Flash

    原文:http://www.asv5.cn/blog/article.asp?id=169 最近忙着寻找两样丢失了很久的东西,都是她帮我找回来的,第一样叫做自信,第二样叫做梦想.也正因为有了她,我才从 ...

  2. 【转】ACE开发环境搭建

    Windows平台 1)        下载ACE源码 ACE官方网址:http://www.cs.wustl.edu/~schmidt/ACE.html ACE下载地址:http://downloa ...

  3. linux常用命令之--文件打包与压缩命令

    linux的文件打包与压缩命令 1.压缩与解压命令 compress:用于压缩指定的文件,后缀为.z 其命令格式如下: compress [-d] 文件名 常用参数: -d:解压被压缩的文件(.z为后 ...

  4. Tableau学习笔记之一

    书本:Tableau数据可视化实战,Ashutosh Nandeshwar著 学习时主要采用Tableau Desktop 9.0,由于该软件是商业软件,价格不菲,故只能试用,期限为14天,可以通过修 ...

  5. Cloudera的安装

    To enable these parts of the tutorial, choose one of the following options: To use Cloudera Express ...

  6. 去除下载电影和电视剧文件名中的多余字符[python实现]

    讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样),,搞得文件名好长,可以使用下面的Python代码,自行修改即可. #!\usr\bin\env python # -*- coding: u ...

  7. CSAPP(2):程序的汇编表示(Linux版)

    程序员学习汇编代码的需求随着时间的推移发生了变化,开始时只要求程序员能直接用汇编语言编写程序,现在则要求他们能够阅读和理解编译器产生的代码. 下面是针对32位机器 数据格式 Intel用术语“字”(w ...

  8. bzoj 3275 Number(最小割)

    [题意] 给定n个数,要求选出一些数满足 1.存在c,a*a+b*b=c*c 2.gcd(a,b)=1  使得和最大. [思路] 二分图的最大权独立集(可以这么叫么QAQ 先拆点,对于不满足条件的两个 ...

  9. sf空间配置

    1.创建VHost     记住Homepage,打开VHost DNS标签页,创建Virtual Host,如下图: 2.Wcp上传文件     用户名是"sf用户名,sf项目名" ...

  10. OpenCV中IplImage和Mat间的相互转换

    OpenCV中做图像处理经常用到IplImage和Mat间的相互转换. 首先,cv::Mat是opencv2.0中的数据类型:IplImage是opencv1.0中的类型,两种类型并不相同. 1. I ...