一:主要内容

  • 下载效果展示
  • 代码内容展示
  • 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 10 下配置安装node.js

      环境配置 node.js windows10 25.5k 次阅读  ·  读完需要 6 分钟 5 在去年就自己配置安装过node.js,但是使用npm安装模块时安装成功后调用require('mo ...

  2. hdu 5088 高斯消元n堆石子取k堆石子使剩余异或值为0

    http://acm.hdu.edu.cn/showproblem.php?pid=5088 求能否去掉几堆石子使得nim游戏胜利 我们可以把题目转化成求n堆石子中的k堆石子数异或为0的情况数.使用x ...

  3. Strom开发配置手册

    一:Storm集群搭建 1.本次开发使用的是storm0.9.3 2.Storm0.9.3集群搭建: 1)storm集群角色包含集群主节点Nimbus:集群从节点Supervisor 2)集群安装:先 ...

  4. delphi PosAnsi

    function ValidateName(n: string): string; var banned, res: string; i,j: integer; begin res:= n; bann ...

  5. 利用C#迭代器的一个杨辉三角示例

    身边有个朋友在跟着廖雪峰的教程学习python,途中遇到了"在Python中使用迭代器打印杨辉三角"的问题,我在帮忙解决的同时顺手写了个简单的C#版本以供补充. internal ...

  6. 关于css3中的flex

    参考几篇文章: Flex 布局语法教程 IE10中的Flexible Box("Flexbox")布局 “老”的Flexbox和“新”的Flexbox 一个可以练习的地方: NEW ...

  7. [leetcode.com]算法题目 - Sort Colors

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  8. Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)

    在我们的APP开发中,通常需要获取到设备的唯一标识.在Android6.0之前,有很多方法我们可以方便获取到硬件的唯一标识,但是在Android6.0之后,Android系统大幅限制了我们获取设备的硬 ...

  9. 网易免费企业邮箱Foxmail设置方法

    网易免费企业邮箱Foxmail7.0设置方法 第一步:启动 Foxmail 邮件客户端,点击工具->账号管理,弹出如下页面. 点击新建,如下: 填写自己企业邮箱账号,然后下一步,邮箱类型选择PO ...

  10. linux下发送报警邮件(mailx)

    本文章主要解决 linux下监控到系统状况后怎么发邮件报警的问题. 如果你是最小化安装的centos/redhat 系统,是没有自带mailx的,也就是没有mail 命令. 解决办法 yum -y i ...