- 浏览: 155280 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
梁梓程:
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服务器 - [技术笔记] ...
相关推荐
s变换用的高斯窗函数( 高斯窗是指数窗的一种,它也无负的旁瓣,而且没有旁瓣波动,因而不回引起计算谱中假的极大值或极小值,而且高斯窗频率窗函数的主瓣比指数窗的主瓣窄,分辨率比指数窗有所提高。
2021科大讯飞车辆贷违预测大赛冠军源码+全部资料.zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
基于java+springboot+vue+mysql的远程教育网站设计与实现.docx
毕业设计资料,计算机毕业设计,源码,毕业论文,毕业答辩,答辩PPT,Java毕业设计,php毕业设计,ASP.NET毕业设计,毕业指导,计算机作业,php作业,java作业,ASP.NET作业,编程作业,管理系统,网站,app,毕业设计学习,Java学习,php学习,ASP.NET学习,java课程,php课程,ASP.NET课程,答辩技巧,SQLSERVER数据库,Mysql数据库,jdbc,SSM框架,SpringBoot框架,Html5,小程序
蓝牙串口助手,可以连接HC-05等蓝牙模块,实现单片机设备与手机通讯,安卓手机,蓝牙调试助手,具有按键功能!
TriLib 2 是一个跨平台的运行时 3D 模型导入器
人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。