最近,写一个工具,用java swt 里面的Browser,
org.eclipse.swt.browser.Browser.execute()方法,执行我的javascript文件
当网页中
1.
2.
第一种方式可以把值赋上去,第2种不行。为什么?
有朋友之前遇到过的么?
java调用代码
public static void addProgressListener(final Map infoMap){
Object browserObj=infoMap.get(Constants.BROWSER);
Object scriptObj=infoMap.get(Constants.SCRIPT_FILE).toString();
Object urlObj=infoMap.get(Constants.EXECUTE_URL).toString();
if(browserObj==null || urlObj==null){
log.debug("no browser find!");
return;
}
final Browser browser=(Browser) browserObj;
final String script=scriptObj.toString();
final String url=urlObj.toString();
if(RuleProcess.infoMap.get(Constants.LAST_PROCESS_LISTENER)!=null){
//去掉上一次的监听
browser.removeProgressListener((ProgressListener) RuleProcess.infoMap.get(Constants.LAST_PROCESS_LISTENER));
}
ProgressListener listener=new ProgressListener() {
public void completed(ProgressEvent event) {
try{
//内部执行script
File scriptFile=new File(RealPath.getBasePath()+"scripts/"+script);
if(scriptFile.exists()){
log.debug("execute script file:"+scriptFile.getPath());
//System.out.println("传入的script文件地址:"+scriptFile.getPath());
String scriptContent=FileUtils.readFileToString(scriptFile);
//替换内部变量
Set keys=infoMap.keySet();
for (String key : keys) {
if(key!=null && infoMap.get(key)!=null && (infoMap.get(key) instanceof String)){
scriptContent=scriptContent.replace("${"+key+"}", infoMap.get(key).toString());
}
}
browser.execute(scriptContent);
}
}catch(Exception e){
log.error("execute rule failed:"+e.toString());
}
}
public void changed(ProgressEvent arg0) {
}
};
browser.addProgressListener(listener);
//重设上次监听对象
RuleProcess.infoMap.put(Constants.LAST_PROCESS_LISTENER, listener);
browser.setUrl(url);
}
最终调用的js代码:
//注册163邮箱
//param(inp_unameObj,passwordObj);
//用户名
var inp_unameObj=document.getElementById("inp_uname");
if(inp_unameObj!=null) inp_unameObj.value='${inp_unameObj}';
//密码
var passwordObj=document.getElementById("password");
if(passwordObj!=null) passwordObj.value='${passwordObj}';
//确认密码
var passwordconfirmObj = document.getElementById('passwordconfirm');
if(passwordconfirmObj!=null) passwordconfirmObj.value='${passwordObj}';
//密码保护问题
var secproblemObj = document.getElementById('secproblem');
if(secproblemObj!=null) secproblemObj.options[3].selected=true;
//密码保护问题答案
var secanswerObj=document.getElementById('secanswer');
if(secanswerObj!=null){
//TODO 这里为什么设值不上去?
secanswerObj.value="1234567890";
}
//性别
var rd1Obj=document.getElementById('rd1');
if(rd1Obj!=null) rd1Obj.checked=true;
//年
var yearObj=document.getElementById('year');
if(yearObj!=null) yearObj.value='1984';
//月
monthObj=document.getElementById('month');
if(monthObj!=null) monthObj.value='10';
//日
dayObj=document.getElementById('day');
if(dayObj!=null) dayObj.value='29';
//注册163邮箱标识
var rd163Obj=document.getElementById('rd163');
if(rd163Obj!=null) rd163Obj.checked=true;
//设置验证码选中
var authcodeObj=document.getElementById('authcode');
if(authcodeObj!=null) authcodeObj.foucs();
上面的密码问题答案,设置不上去,这是不是swt的bug啊?。
软件我打包好了,放在:http://www.vdisk.cn/down/index/4137061A3668
软件使用说明:http://www.docin.com/p-44572976.html
运行的效果:
(我处理的是163邮箱注册的页面,就差这个没解决了)
http://reg.email.163.com/mailregAll/reg0.jsp?from=163mail
svn下载地址:svn://www.svnhost.cn/gaoqs_open_source/web_auto_fill/trunk/com.gaoqs.auto.form