一:主要内容

  • 下载效果展示
  • 代码内容展示
  • saveToDisk不生效说明,即文件没有下载下来解决办法

二:展示效果

1.下载效果展示

用selenium3无人工干预的自动下载该文件到指定路径下,如:D:\downloadFiles

2.代码展示

 package cn.gloryroad;

 import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test; public class TestDemo {
//设定下载文件存储的文件路径
public static String downloadFilePath = "D:\\downloadFiles";
WebDriver driver;
String baseUrl;
JavascriptExecutor js; @BeforeMethod
public void beforeMethod() {
baseUrl="http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/35.0b8/win32/zh-CN/";
} @AfterMethod
public void afterMethod() {
driver.quit();
} @Test
public void testdataPicker() throws Exception {
System.setProperty("webdriver.firefox.bin","D:\\firefox\\firefox.exe");
driver = new FirefoxDriver(firefoxDriverOptions()); driver.get(baseUrl);
//单击包含“Stub”关键字的下载链接
driver.findElement(By.partialLinkText("Stub")).click();
//设定10秒钟的延迟,让程序下载完成。如果网络下载很慢,可以根据预估的下载完成时间,
//设定暂停时间
try{
Thread.sleep(10000);
}catch(Exception e){
e.printStackTrace();
}
} public static FirefoxOptions firefoxDriverOptions() throws Exception {
FirefoxOptions options = new FirefoxOptions();
//声明一个 profile 对象
FirefoxProfile profile = new FirefoxProfile();
//设置 Firefox 的browser.download.folderList属性为 2
//如果没有进行显示设定,则使用默认值 1,表示下载文件保存在“下载”文件夹
//设定为 0,则下载文件会被保存在用户的桌面上
//设定为 2,则下载文件会被保存在指定的文件夹下
profile.setPreference("browser.download.folderList",2);
//browser.download.manager.showWhenStarting的属性默认值为 true
//设定为 true,则在用户启动下载的时候显示 Firefox 浏览器的文件下载窗口
//设定为 false,则在用户启动下载的时候不显示 Firefox 浏览器的文件下载窗口
profile.setPreference("browser.download.manager.showWhenStarting",false);
Thread.sleep(5000);
//browser.download.dir设定下载文件保存的目录
profile.setPreference("browser.download.dir",downloadFilePath);
//browser.helperApps.neverAsk.openFile表示直接打开下载文件,不显示确认框
//默认值为空字符串,下行代码行设定了多种文件的 MIME类型,例如,application/x-msdownload
//表示.exe类型的文件,application/excel表示 Excel 类型的文件
profile.setPreference("browser.helperApps.neverAsk.openFile",
"application/octet-stream,application/exe,text/csv, application/pdf, application/x-msexcel,application/excel,application/x-excel, application/excel,application/x-excel,application/excel,application/vnd.ms-excel,application/x-excel,application/x-msexcel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml,application/excel,application/x-msdownload");
//browser.helperApps.neverAsk.saveToDisk表示下载文件是否直接保存到磁盘
//默认值为空字符串,下行代码行设定了多种文件的 MIME类型,例如,application/x-msdownload
//表示.exe类型的文件,application/excel表示 Excel 类型的文件
profile.setPreference("browser.helperApps.neverAsk.saveToDisk",
"application/octet-stream,application/exe,text/csv,application/pdf,application/x-msexcel,application/excel,application/x-excel, application/excel,application/x-excel,application/excel, application/vnd.ms- excel,application/x-excel,application/x-msexcel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml,application/excel,text/x-c,application/x-msdownload");
// browser.helperApps.alwaysAsk.force对于未知的 MIME 类型文件会弹出窗口
// 让用户处理,默认值为true,设定为false表示不会记录打开未知 MIME 类型
// 文件的方式
profile.setPreference("browser.helperApps.alwaysAsk.force",false);
//下载.exe文件弹出警告,默认值是 true,设定为false 则不会弹出警告框
profile.setPreference("browser.download.manager.alertOnEXEOpen",false);
// browser.download.manager.focusWhenStarting设定下载框在下载时会获取焦点
// 默认值为 true,设定为 false 表示不获取焦点
profile.setPreference("browser.download.manager.focusWhenStarting",false);
// browser.download.manager.useWindow设定下载是否显示下载框,默认值为true
// 设定为 false 会把下载框进行隐藏
profile.setPreference("browser.download.manager.useWindow",false);
// browser.download.manager.showAlertOnComplete设定下载文件结束后是否显示下载
// 完成提示框,默认值为 true,设定为 false 表示下载完成后不显示下载完成提示框
profile.setPreference("browser.download.manager.showAlertOnComplete",false);
// browser.download.manager.closeWhenDone设定下载结束后是否自动关闭下载框
// 默认值为true,设定为false 表示不关闭下载管理器
profile.setPreference("browser.download.manager.closeWhenDone",false); options.setProfile(profile);
return options;
} }

3.如果运行代码后发现你的文件弹窗还是弹出来了,文件并没有下载保存到指定的文件路径下,那么请检查下你的文件类型是否包含在上诉列出的文件类型之内,我之前遇到的问题是我要下载exe文件,然后给browser.helperApps.neverAsk.openFile和browser.helperApps.neverAsk.saveToDisk都加入了application/exe类型,但是运行代码后发现,保存文件的弹窗照样还是打开了,文件并没有被下载下来。

这个时候你就可以抓包或者通过浏览器的f12工具看下你下载文件的那个请求的响应数据的Content-Type是什么类型的,加入进去就好,如我上面的exe文件,用f12工具查看它的content-type类型为:application/x-msdownload

然后我在我的代码里设置的browser.helperApps.neverAsk.openFile和browser.helperApps.neverAsk.saveToDisk里加入该项application/x-msdownload即可,文件就能被下载成功了,其他文件类型按照同样的方法也可以解决。

 
 
 
 
 
 

selenium3 无人工干预地自动下载某个文件的更多相关文章

  1. webdriver高级应用- 无人工干预地自动下载某个文件

    在网页上下载文件时,通常需要人为设定下载文件并选择保持路径,这样就无法实现完全自动的下载过程.下面实现基于firefox浏览器的全自动化文件下载操作: #encoding=utf-8 from sel ...

  2. IDM下载器添加支持自动下载的文件类型

    不知道各位读者老爷有没有试过IDM下载器的自动下载功能,对于经常需要下载素材资源的朋友来说,一个个的选择图片或者其他什么素材来下载也是够烦的,IDM的自动下载功能可谓是十分好用,而且自动下载+批量下载 ...

  3. 【转】Python编程: 多个PDF文件合并以及网页上自动下载PDF文件

    1. 多个PDF文件合并1.1 需求描述有时候,我们下载了多个PDF文件, 但希望能把它们合并成一个PDF文件.例如:你下载的数个PDF文件资料或者电子发票,你可以使用python程序合并成一个PDF ...

  4. C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库

    using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...

  5. 【转】Java生成plist下载ipa文件

    我们在上传ipa想要安装的时候必须要通过plist文件去下载,并且还要遵循 itms-services协议. 意思就是,第一步我们要生成一个plist文件, 第二步生成一个html文件,用来指向pli ...

  6. yandex 图片自动下载

    yandex 图片自动下载命令行程序 一个在 yandex 上搜索图片并下载到本地的 node cli 程序. 使用帮助: $0 <搜索关键词> [-t=超时(默认 1000)] [-r ...

  7. Python selenium 文件自动下载 (自动下载器)

    MyGithub:https://github.com/williamzxl 最新代码已经上传到Github,以下版本为stupid版本. 由于在下载过程中需要下载不同文件,所以可以把所有类型放在Va ...

  8. selenium实现自动下载文件

    #coding:utf-8'''说明:导出'''from selenium import webdriverfrom public.highlightElement import highlightf ...

  9. top 自动执行的shell脚本中,使用top -n 1 > log.txt, 上电自动执行,文件无输出

    . 自动执行的shell脚本中,使用top -n > log.txt, 上电自动执行,文件无输出,使用一下命令解决: //usr/bin/top -d -n -b > log.txt 如果 ...

随机推荐

  1. Windows 95 输入法编辑器

    Windows 95 输入法编辑器 翻译:戴石麟译自微软的MSDN DDK 关于Windows 95的多语言IME(输入法编辑器) 在Windows 95中,IME以动态连接库(DLL)的形式提供,与 ...

  2. [mysql] mysql 查询语句收集

    // 1. 筛选出当天的中奖名单            $where = " date_format(f_ctime,'%Y-%m-%d') = current_date()"; ...

  3. 用指定的用户名和密码无法登录到该ftp服务器

    今天在win2008 R2 服务器上默认部署FTP站点时遇到了两个小问题,在网上找了好久资料后发现还是解决不了问题,最终找到问题的原因,在此共享给大家 1.Windows无法访问此文件夹.请确保输入的 ...

  4. XML语法随记

    1.特殊字符的转义 &  ----  & <  ----  < >  ----  > "   ----  " ' ----- &ap ...

  5. WINDOWS CLUSTER -- 时间不同步导致的群集问题

    故障描述,重启服务器后,发现该重启节点未成功加入到Windows群集中,导致该节点上的Alwayson服务也受影响处于“正在解析”状态,尝试重启cluster服务,发现无效,查看windows日志,发 ...

  6. 未能加载文件或程序集,PublicKeyToken=“**********”,或它的某一个依赖项。强名称验证失败。

    就是这种错误.这种错误怎么办? 以下步骤: (以上图dll为例) 1.看项目的Debug文件夹下是否有以下三个文件 2.看项目的.csproj文件下引用的报错dll的publickeytoken和版本 ...

  7. MVC和WEBAPI(一)

    什么是MVC (模型 视图 控制器)? MVC是一个架构模式,它分离了表现与交互.它被分为三个核心部件:模型.视图.控制器.下面是每一个部件的分工: 视图是用户看到并与之交互的界面. 模型表示业务数据 ...

  8. [JavaScript] 根据指定宽度截取字符串

    /** * 根据指定宽度截取字符串 * @param desc 原始字符串 * @param width 该显示的宽度 * @param fontsize 字体大小 12px * @returns { ...

  9. Vue的声明周期

    以下简单介绍,以自己的理解进行分析.如有不好,请大牛勿喷!!!!!! new Vue() 创建 Vue 实例 beforeCreate(){}: 第一生命周期 表示实例完全创建出来,此函数执行是,da ...

  10. 基础I/O接口与操作

    C语言中的文件接口 1 打开文件 FILE * fopen(const char * path,const char * mode) 参数:path:文件路径 mode:打开文件的方式 返回值:成功返 ...