一:主要内容

  • 下载效果展示
  • 代码内容展示
  • 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. CMUSphinx Learn - Before you start

    Before you start 开始之前 Before you start the development of the speech application, you need to consid ...

  2. delphi怎么做桌面滚动文字?

    就是在桌面显示从TXT读取出来的字,并限制在1个框内移动(就是从框左边出现往右边移动并从框边消失)我用HDC+textout只是读取字显示到桌面,不知道桌面移动哪位大侠指点下啊,或用其他方法,最好有详 ...

  3. Java map的匿名类的初始化

    可以直接使用: Map<String, Object> testMap = new HashMap<String, Object>() { { put("test1& ...

  4. 将Azure计算机视觉添加到Xamarin应用程序简单体验

    微软Azure提供了大量的AI及机器学习功能,可以通过简单的RestAPI调用. 关于此文中提到的Azure计算机视觉,可查看此链接的详细介绍. 通过微软的服务,只需要几行代码即可使用计算机视觉中的 ...

  5. C# Winform模仿百度日历

    想写博客不知道从何处开始,就从回忆开始吧. 第一个就从自定义日历控件开始 产生背景: 大概2015年时候有个项目要用到日历,用默认日历展示给用户看,用户毫不客气都说界面太丑,最好做成像百度日历那样方便 ...

  6. 关于QT和SQLite以及XML

    就关于qt连接使用sqlite折腾了一晚上.倒也不全是因为数据库连接的问题, 主要还是数据格式各自出问题. 原来的数据库是access, 为了导入linux下的sqlite, 我把其输出格式改成了xm ...

  7. python(29)----时间模块

    time模块 1. 三种时间表现形式 时间戳(timestamp) 格式化的时间字符串 元祖/结构化时间(struct_time) 2. 时间戳(timestamp) 通常来说,时间戳表示的是从197 ...

  8. 【spring揭秘】1、关于IOC的基础概念

    1.基础概念 IOC有三种注入方式: 1.构造方法注入,就是通过构造方法进行实例化成员属性对象,优点是实现对象之后直接就可以使用,但是参数过多也是个麻烦 2.setter方法注入,实现相应的sette ...

  9. 08-02 Java 代码块,代码块执行的先后顺序问题

    代码块 /* 代码块:在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同,可以分为 局部代码块:局部位置,用于限定变量的生命周期. 构造代码块:在类中的成员位置,用{}括起来的代 ...

  10. oracle 异常关闭操作 导致数据库无法正常关闭 也无法启动

    场景描述: 在关闭数据库的时候,命令没有打全,导致数据库没有正常关闭 解决办法: 重新建立个连接,然后切换到oracle用户 执行强制关闭数据库: OK 问题解决,不过生产环境 还是不推荐 shutd ...