- 浏览: 155274 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
梁梓程:
GitHub里面的那个sand的代码可以换成java的吗?
浅入浅出游戏粒子系统 -
aa276174247:
楼主好人,求源码研究, 670205373@qq.com
基于java Red5服务器客户端视频聊天室搭起来了 -
07shou:
楼主,小弟最近在学习视频播放,有很多问题,不知可以发份代码学习 ...
基于java Red5服务器客户端视频聊天室搭起来了 -
star245:
能共享出来代码吗,liwen337@163.com
基于java Red5服务器客户端视频聊天室搭起来了 -
lf555:
楼主~~ 何时打算开源呀~~ 借鉴学习下~
打算实现开源网页游戏框架openjpfgame(Java Php flex game),目前实现部分
现在都是流行网上购物了,大家一定关心自己购买东西快递现在已经发到什么地方了,现在想查一查。当然现在有很多提供这种服务,我今天就给大家实现一个无需打开浏览器就可以实现EMS快递查询,简单讲述其原理。以下是我简单画的流程图(随便用office画,很山賽,哈哈):好了,我们开始源码吧:
(1)EMS网站
(2)流程图
(3)结果图:
/**
* 查询EMS快递状态
* @author luodongfu
* 我把我实现的代码全部贴出来,哈哈。
*/
public class GetEms
{
public static void main(String[] args)
{
//我这里使用WebClient 来抓去
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_7);
webClient.setActiveXNative(true);
webClient.setJavaScriptEnabled(true);
HtmlPage loginPage = null;
try
{
//打开ems邮局网站
loginPage = webClient
.getPage("http://www.ems.com.cn/qcgzOutQueryAction.do?reqCode=gotoSearch");
} catch (Exception e1)
{
e1.printStackTrace();
}
if (loginPage == null)
{
return;
}
//找到查询页面的表单以及其中的
HtmlForm loginForm = loginPage.getFormByName("form1");
//找到快递单输入框
HtmlTextInput mailNum = loginForm.getInputByName("mailNum");
//找到快递单验证码输入框,这个ems很狡诈,每天这个F346F82440A3AAC78473802都会变,
所以最好加一个判断如果出错的话就直接抓去页面这个值。我这里就写死了,呵呵
HtmlTextInput codestr = loginForm.getInputByName("F346F82440A3AAC78473802");
HtmlImage p = null;
//找到验证码图片
DomNodeList<HtmlElement> ps = loginPage.getElementsByTagName("img");
boolean success = false;
File f = null;
//遍历查询图片,如果找到该图片则保存到D盘111.png文件
for (HtmlElement ht : ps)
{
if (ht instanceof HtmlImage)
{
HtmlImage img = (HtmlImage) ht;
String alt = img.getAltAttribute();
if (alt != null && alt.contains("不清?点击换图"))
{
f = new File("D:\\111.png");
if (f.isFile() && f.exists())
{
f.delete();
}
//保存图片
try
{
img.saveAs(f);
success = true;
} catch (Exception e)
{
e.printStackTrace();
}
System.out.println("识别码图片文件写入磁盘OK");
if (success)
{
break;
}
}
}
}
//如果图片保存成功,则弹出图片显示
if (success)
{
try
{
Runtime.getRuntime().exec(
"cmd.exe /c start " + f.getCanonicalPath());
} catch (IOException e2)
{
e2.printStackTrace();
}
//提示输入验证码
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
System.out.println("请将你看到的识别码输入:");
try
{
str = br.readLine();
} catch (IOException e)
{
e.printStackTrace();
}
if (str != null && !str.trim().equals(""))
{
str = str.trim();
codestr.setValueAttribute(str);
//这里是邮局EMS快递单,我这里写死,你可以做一个提示用户输入
mailNum.setValueAttribute("EF706866075CS");
System.out.println("你输入的识别码是:" + str);
HtmlImageInput button = (HtmlImageInput) loginForm.getInputByName("optijiaot");
try
{
Page rsp = button.click();//模拟用户点击提交数据
if (rsp instanceof HtmlPage)
{
loginPage = (HtmlPage) rsp;
success = true;
}
} catch (Exception e)
{
success = false;
e.printStackTrace();
}
//如果查询成功,则开始解析结果
if (success)
{
//解析返回的结果,ems这个表格table 做的很垃圾,一个table 里面包含一个table 很多,而且table.
// id 一个都没有,他娘的什么鸟人编html的程序。这里我解析部分省略了,呵呵
parseTable(loginPage.asXml());
}
}
//删除空格
public static String replaceBlank(String tt)
{
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(tt);
if(m.find())
{
String after = m.replaceAll("");
return after;
}
return null;
}
}
好了结果出来了:
识别码图片文件写入磁盘OK
请将你看到的识别码输入:
R72C
你输入的识别码是:R72C
2010-05-06 10:11:34 武义县 到达处理中心,来自武义县邮政局速递公司
2010-05-06 12:15:48 武义县 离开处理中心,发往金华市邮政局分拣分局
2010-05-06 13:57:36 金华市 到达处理中心,来自武义县
2010-05-06 18:55:07 金华市 离开处理中心,发往北京市
2010-05-10 12:57:15 北京邮政陆路速递邮件处理中心 到达处理中心,来自金华市
2010-05-10 16:54:08 北京邮政陆路速递邮件处理中心 离开处理中心,发往北京邮政速递世纪城分公司香山营投部
2010-05-11 07:15:35 北京邮政速递世纪城分公司香山营投部 到达处理中心,来自北京市
2010-05-11 07:45:59 北京邮政速递世纪城分公司香山营投部 安排投递
2010-05-11 09:20:00 北京邮政速递世纪城分公司香山营投部 妥投
您的邮件于2010-05-11 09:20:00(北京邮政速递世纪城分公司香山营投部)已妥投投递结果:董波代收
最后注意以下的F346F82440A3AAC78473802东东:
最好从其页面抓去,不然为出错,哈哈。我懒,所以我就写死了。
HtmlTextInput codestr = loginForm.getInputByName("F346F82440A3AAC78473802");
(1)EMS网站
(2)流程图
(3)结果图:
/**
* 查询EMS快递状态
* @author luodongfu
* 我把我实现的代码全部贴出来,哈哈。
*/
public class GetEms
{
public static void main(String[] args)
{
//我这里使用WebClient 来抓去
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_7);
webClient.setActiveXNative(true);
webClient.setJavaScriptEnabled(true);
HtmlPage loginPage = null;
try
{
//打开ems邮局网站
loginPage = webClient
.getPage("http://www.ems.com.cn/qcgzOutQueryAction.do?reqCode=gotoSearch");
} catch (Exception e1)
{
e1.printStackTrace();
}
if (loginPage == null)
{
return;
}
//找到查询页面的表单以及其中的
HtmlForm loginForm = loginPage.getFormByName("form1");
//找到快递单输入框
HtmlTextInput mailNum = loginForm.getInputByName("mailNum");
//找到快递单验证码输入框,这个ems很狡诈,每天这个F346F82440A3AAC78473802都会变,
所以最好加一个判断如果出错的话就直接抓去页面这个值。我这里就写死了,呵呵
HtmlTextInput codestr = loginForm.getInputByName("F346F82440A3AAC78473802");
HtmlImage p = null;
//找到验证码图片
DomNodeList<HtmlElement> ps = loginPage.getElementsByTagName("img");
boolean success = false;
File f = null;
//遍历查询图片,如果找到该图片则保存到D盘111.png文件
for (HtmlElement ht : ps)
{
if (ht instanceof HtmlImage)
{
HtmlImage img = (HtmlImage) ht;
String alt = img.getAltAttribute();
if (alt != null && alt.contains("不清?点击换图"))
{
f = new File("D:\\111.png");
if (f.isFile() && f.exists())
{
f.delete();
}
//保存图片
try
{
img.saveAs(f);
success = true;
} catch (Exception e)
{
e.printStackTrace();
}
System.out.println("识别码图片文件写入磁盘OK");
if (success)
{
break;
}
}
}
}
//如果图片保存成功,则弹出图片显示
if (success)
{
try
{
Runtime.getRuntime().exec(
"cmd.exe /c start " + f.getCanonicalPath());
} catch (IOException e2)
{
e2.printStackTrace();
}
//提示输入验证码
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
System.out.println("请将你看到的识别码输入:");
try
{
str = br.readLine();
} catch (IOException e)
{
e.printStackTrace();
}
if (str != null && !str.trim().equals(""))
{
str = str.trim();
codestr.setValueAttribute(str);
//这里是邮局EMS快递单,我这里写死,你可以做一个提示用户输入
mailNum.setValueAttribute("EF706866075CS");
System.out.println("你输入的识别码是:" + str);
HtmlImageInput button = (HtmlImageInput) loginForm.getInputByName("optijiaot");
try
{
Page rsp = button.click();//模拟用户点击提交数据
if (rsp instanceof HtmlPage)
{
loginPage = (HtmlPage) rsp;
success = true;
}
} catch (Exception e)
{
success = false;
e.printStackTrace();
}
//如果查询成功,则开始解析结果
if (success)
{
//解析返回的结果,ems这个表格table 做的很垃圾,一个table 里面包含一个table 很多,而且table.
// id 一个都没有,他娘的什么鸟人编html的程序。这里我解析部分省略了,呵呵
parseTable(loginPage.asXml());
}
}
//删除空格
public static String replaceBlank(String tt)
{
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(tt);
if(m.find())
{
String after = m.replaceAll("");
return after;
}
return null;
}
}
好了结果出来了:
识别码图片文件写入磁盘OK
请将你看到的识别码输入:
R72C
你输入的识别码是:R72C
2010-05-06 10:11:34 武义县 到达处理中心,来自武义县邮政局速递公司
2010-05-06 12:15:48 武义县 离开处理中心,发往金华市邮政局分拣分局
2010-05-06 13:57:36 金华市 到达处理中心,来自武义县
2010-05-06 18:55:07 金华市 离开处理中心,发往北京市
2010-05-10 12:57:15 北京邮政陆路速递邮件处理中心 到达处理中心,来自金华市
2010-05-10 16:54:08 北京邮政陆路速递邮件处理中心 离开处理中心,发往北京邮政速递世纪城分公司香山营投部
2010-05-11 07:15:35 北京邮政速递世纪城分公司香山营投部 到达处理中心,来自北京市
2010-05-11 07:45:59 北京邮政速递世纪城分公司香山营投部 安排投递
2010-05-11 09:20:00 北京邮政速递世纪城分公司香山营投部 妥投
您的邮件于2010-05-11 09:20:00(北京邮政速递世纪城分公司香山营投部)已妥投投递结果:董波代收
最后注意以下的F346F82440A3AAC78473802东东:
最好从其页面抓去,不然为出错,哈哈。我懒,所以我就写死了。
HtmlTextInput codestr = loginForm.getInputByName("F346F82440A3AAC78473802");
评论
2 楼
max_dong
2012-05-26
这是可是公司的机密啊,怎么可以随便发出来呢!
1 楼
zl4393753
2011-09-18
“验证码输入框动态名称”的问题我也找了好久。。。本来不愿意抓取查询页面,然后解析的。。。可惜现在貌似没有办法了。。
发表评论
-
java高速生成大文件的MD5算法
2012-10-27 00:28 0java快速生成大文件的MD5算法import java.io ... -
教你轻松拿下百度音乐播放器mp3地址
2010-09-28 21:23 1087教你轻松拿下百度音乐播放器mp3地址----ldfu2010 ... -
周会&惩罚激励制度
2012-03-21 13:41 0周会 个人很反感开会,因为之前参与过的会议,有80%都是没有 ... -
负载均衡--大型在线系统实现的关键(下篇)
2012-03-21 12:42 0在网络应用中,“负载 ... -
技术主义者的网游观点
2012-03-21 12:06 0大概一年多或者更早以前,我就想过是否能实现单一游戏世界平均同时 ... -
C++中使用Lua脚本 和lua中调用c的方法
2012-03-21 12:04 0参考http://blog.csdn.net/kun12345 ... -
超大地图MMORPG的场景管理
2012-03-21 12:03 0超大地图MMORPG的场景管 ... -
MMORPG开发入门
2012-03-21 11:59 0作者: Radu Privantu 译者:pAnic 20 ... -
服务器宕机
2012-03-21 11:53 0服务器宕机 我不得不承认,我的能力不足以写出一个100% ... -
从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则
2012-03-21 11:28 0从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治 ... -
一种经典的服务器架构
2012-03-21 11:27 0一种经典的服务器架构 ... -
一个AS3 socket解码设计的错误思路
2012-03-20 17:34 0一个AS3 socket解码设计的错误思路 作者:闪刀 ... -
FLASH端SOCKET连接C++服务端代码
2012-03-20 16:55 0FLASH端S 最近在开发一个休闲类的游 ... -
java并发分析as3中的无用css样式
2012-03-12 16:19 0java并发分析as3中的无用css样式 -
java连接SSH服务器并执行shell命令
2012-03-09 18:27 0前要通过java连接到SSH服务器并执行一些linux配置命令 ... -
ant + jsch 远程发布web工程
2012-03-09 18:08 0<?xml version="1.0&quo ... -
nio支持epoll
2012-03-05 11:52 0<project name="xiyou&qu ... -
游戏中用户点击不可达地点引起寻路循环,游戏停顿问题解决
2011-11-20 18:36 1887游戏中用户点击不可达地点引起寻路循环,游戏停顿问题解决 ... -
apache common-dbutils 的使用
2011-06-08 14:46 0package demo.dbutilsdemo; i ... -
用Varnish搭建Cache服务
2011-06-07 15:57 0用Varnish搭建Cache服务器 - [技术笔记] ...
相关推荐
本文将深入探讨EMS快递单号的生成规则、联想方法以及MOD11校验位的计算原理。 首先,EMS快递单号通常由一系列数字和字母组成,长度在13到20位之间,具体格式可能因地区和时间变化而略有差异。生成这些单号的过程...
本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
SHOPEX快递单号查询插件圆通专版提供国内外近2000家快递物流订单单号查询服务例如圆通快递快递订单查询服务, 另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在SHOPEX里,只要简单几步即可实现...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
SHOPEX快递物流单号查询插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单查询...
本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...
本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递、顺丰快递、圆通快递、EMS快递、汇通快递、宅急送快递、德邦物流、百世快递、汇通快递、中通快递、天天快递等知名快递订单...