firefox下载文件弹出框之终极解决方案-vbs模拟键盘操作
由于近期一直被firefox的保存文件弹出框困扰,摸索尝试过几种方法,已有的方法可以跑通但是对对效果不太满意,因此一直在寻找合适的解决办法。
最近发现了也可以通过VBS来处理弹出框,速度也不错,其原理就是模拟键盘操作,和rebot对象类型。现在对各种方法总结一下。
我们在测试中经常会遇到各种弹出框,对于弹出框主要有以下几类:
1. 新弹出浏览器窗口。
2. alert弹框。
3. 标准windows弹框。
对于第一种我们经常使用解决办法就是windowhandles判断句柄然后切换到相应窗口。
对于第二种我们就是利用selenium自带的switchto操作。
对于第三种经常使用的就是利用第三方工具AutoIt来操作。
这些解决方法各有千秋,根据实际情况来选择组好的方法。下面来具体分析:
1. 设置firefox profile来静默下载。
public static FirefoxProfile FirefoxDriverProfile() throws Exception {
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.dir", downloadFilePath);
profile.setPreference("browser.download.folderList",2);
browser.download.folderList 设置Firefox的默认 下载 文件夹。0是桌面;1是“我的下载”;2是自定义
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/xls, application/octet-stream, application/vnd.ms-excel, text/csv, application/zip");
return profile;
}
经过实际观察,并不能每次都生效,稳定性不是太好,但是凑合着还能用。但是profile功能强大,能实现浏览器的定制化,例如加载插件。
2. 通过AutoIt来操作键盘。
由于不是标准windows框,AutoIt不能识别弹出框上的按钮。对于弹出标准windows弹框AutoIt首当其冲是最强大的,比如另存为弹出框。
3. 弹出框根本不是浏览器窗口,windowhandle方法也无效。
4. 通过VBS脚本实现键盘操作。先激活弹出框,然后点向下键,最后点回车,文件就被保存到默认路径了。
Dim checkOpenWindow
Dim objShell
Dim counter
counter = Set objShell = WScript.CreateObject( "WScript.Shell" ) Do
ret = objShell.AppActivate("compare result.txt - Notepad")
If ret = True Then
objShell.SendKeys "{DOWN}"
WScript.Sleep
objShell.SendKeys "{ENTER}"
Exit Do
Elseif counter = Then
Exit Do
End if
Set ret = nothing
counter = counter +
WScript.Sleep
Loop
然后创建一个方法来封装这个vbs脚本。
public void save_excel() throws IOException, InterruptedException { String script = "SaveExcel.vbs";
String executable = "C:\\Windows\\SysWOW64\\wscript.exe";
String cmdArr [] = {executable, script};
Process result = Runtime.getRuntime().exec(cmdArr);
result.waitFor();
}
这样完美解决了下载框弹出的问题,比之前其他的方法更加稳定,更加方便使用。
另外也记录一下robot模拟键盘的代码以供参考:
public void pressDownKey(){
Robot robot=null;
try{
robot=new Robot();
} catch (AWTException e){
e.printStackTrace();
}
robot.keyPress(KeyEvent.VK_DOWN);
robot.keyRelease(KeyEvent.VK_DOWN);
}
public void pressEnterKy(){
Robot robot=null;
try{
robot=new Robot();
} catch (AWTException e){
e.printStackTrace();
}
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
} RobotUtil robot = new RobotUtil();
robot.pressDownKey();
Thread.sleep();
robot.pressEnterKy();
firefox下载文件弹出框之终极解决方案-vbs模拟键盘操作的更多相关文章
- 由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。
由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载(这样的话ajax可以传递不同的参数),但是ajax实现的文 ...
- CEfSharp下载文件 弹出保存框,实现 IDownloadHandler 接口
上节讲了如何将CefSharp集成到C#中,但集成后将web界面链接进ChromiumWebBrowser后,但web界面上下载附件的功能不好使咯. 百度了半天还是没搞定,只能去看官网的Excampl ...
- 使用CEfSharp之旅(3)下载文件 弹出保存框 IDownloadHandler
原文:使用CEfSharp之旅(3)下载文件 弹出保存框 IDownloadHandler 版权声明:本文为博主原创文章,未经博主允许不得转载.可点击关注博主 ,不明白的进群191065815 我的群 ...
- vue封装公用弹出框方法,实现点击出现操作弹出框
vue封装公用弹出框方法,实现点击出现操作弹出框 如上图所示,这次要实现一个点击出现操作弹框的效果:并将这个功能封装成一个函数,便于在项目的多个地方使用. 具体思路是: 封装一个组件,组件保护一个插槽 ...
- 【如何使用jQuery】【jQuery弹出框】【jQuery对div进行操作】【jQuery对class,id,type的操作】【jquery选择器】
1.如何使用jQuery jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨 ...
- input file上传文件弹出框的默认格式设置
我们使用html的input 标签type="flie"时,如何设置默认可选的文件格式 <input id="doc_file" type="f ...
- js中的alert弹出框文字乱码解决方案
使用如下代码即可: echo '<html>'; echo '<head><meta http-equiv="Content-Type" conten ...
- [Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面
引言 查看项目代码的时候,发现项目中用到JqueryUi的弹出框,可拖拽,可设置模式对话框,就想着使用它弄一个登录页面. 弹出框 在Jquery Ui官网可定制下载弹出框,下载和弹出框下载相关的js文 ...
- Visual Studio 打开解决方案后 弹出框显示 "正在打开文件..." 迟迟没反应 的解决方法
Visual Studio 打开解决方案后 弹出框显示 "正在打开文件...",任务管理器的devenv进程又很正常,不会显示"未响应". 而IDE的左下角有个 ...
随机推荐
- UVA 10328(DP,大数,至少连续)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19825 这道题和http://www.cnblogs.com/qlky/p/ ...
- Windows安装配置xampp
建议大家直接看原文 1.安装XAMPP 进入https://www.apachefriends.org/zh_cn/index.html页面下载XAMPP 2 3.打开xampp控制版 4.修改apa ...
- 第十三章.MySQL数据库与JDBC编程(下)
JDBC的典型用法: JDBC4.2常用接口和类简介: DriverManager:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取Connection对象,该类包含如下方法: publi ...
- freemarker生成word,表格分页
在做项目的过程中,使用到了freemarker生成word.又有一个需求,明细的要确定有多少页,这就用到了换页的xml标签了,找了我好久 <w:p ><w:r><w:br ...
- php从身份证获取性别和出生年月
//通过身份证号查询出性别与生日 $birth = strlen($idcard)==15 ? ('19' . substr($idcard, 6, 6)) : substr($idcard, 6, ...
- java 从Excel 输出和输入
本文实现了使用java 从数据库中获得对象,并存入集合中, 然后输出到Excel,并设置样式 package com.webwork; import java.io.File; import java ...
- C# javascript 全选按钮
function selectAll(checkbox) { $('input[type=checkbox]').attr('checked', $(checkbox ...
- Java 之数组(4)
什么是数组: 问:编写代码保存 4 名学生的考试成绩. 答:简单啊,定义 4 个变量呗 问:那“计算全年级 400 名学生的考试成绩”,肿么办 答: ....... 数组,就可以帮助你妥妥的解决问题啦 ...
- MySQL数据库、表的字符编码
用MySQL命令行新建数据库和表时默认的字符编码是latin1,但是在实际开发过程中一般都是使用utf8格式的编码.操作如下: 1.修改数据库字符编码 mysql> alter database ...
- java几种基本排序算法
1.选择排序 原理:将数组的每一个元素和第一个元素相比较,如果小于第一个元素则交换,选出第一小的,依次选出第二小,第三小的.... 代码 int[] a = {1,3,2,5}; int i,j,te ...