一:主要内容

  • 下载效果展示
  • 代码内容展示
  • 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. 浅尝辄止之MongoDB

    1 简介 MongoDB是一个介于关系数据库和非关系数据库之间的产品,基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储 解决方案.MongoDB将数据存储为一个文档,数据结构由键 ...

  2. android上的i-jetty (1)环境搭建

    介绍下如果把android设备作为一个web服务器使用, 编译i-jetty 1. 将源码download下来,http://code.google.com/p/i-jetty/downloads/l ...

  3. mysql_变量

    set names gbk; 变量 变量分为两种:系统变量,自定义变量 系统变量:系统定义好的,大部分情况用户不需要使用系统变量,如autocommit,auto_increment_incremen ...

  4. CentOS ntp同步

    新装的CentOS系统服务器可能设置了错误的,需要调整时区并调整时间. 如下是CentOS系统使用NTP来从一个时间服务器同步 把当前时区调整为上海就是+8区,想改其他时区也可以去看看/usr/sha ...

  5. 2.Django模型

    ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...

  6. 在WPF中将图片转换成3D图像并可以旋转

    时光偷走的,永远都是我们眼皮底下看不见的珍贵. https://pan.baidu.com/s/14dk-OU2SR0nxXj2bL4bVpQ 源码网站https://www.codeproject. ...

  7. Android RelativeLayout wrap_content 而且 child view 使用 layout_alignParentBottom 时 RelativeLayout 高度会占满屏幕

    Android RelativeLayout wrap_content 而且 child view 使用 layout_alignParentBottom 时 RelativeLayout 高度会占满 ...

  8. 关于错误 openssl/ssl.h:没有那个文件或目录的解决办法

    原文链接:https://blog.csdn.net/kulala082/article/details/68484314 首先得安装openssl:sudo apt-get install open ...

  9. 【文文殿下】WC2019游记

    Day0 今天早上三点半才睡着,五点起床,前往省城郑州.与省实验常老师汇合,坐上高铁,下午三点半多才到广州二中. 下午随便找了一个教室进去敲一敲代码,发现自己越来越菜了. 和一大堆网上的dalao面基 ...

  10. 使用wget命令爬取整站

    快速上手(整个bootstrap网页全被你抓取下来了~_~) wget -c -r -npH -k -nv http://www.baidu.com 参数说明 -c:断点续传 -r:递归下载 -np: ...