selenium3 无人工干预地自动下载某个文件

一:主要内容

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

 

二:展示效果

1.下载效果展示

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

 

2.代码展示

 1 package cn.gloryroad;
 2 
 3 import org.openqa.selenium.*;
 4 import org.openqa.selenium.firefox.FirefoxDriver;
 5 import org.openqa.selenium.firefox.FirefoxOptions;
 6 import org.openqa.selenium.firefox.FirefoxProfile;
 7 import org.testng.annotations.AfterMethod;
 8 import org.testng.annotations.BeforeMethod;
 9 import org.testng.annotations.Test;
10 
11 public class TestDemo {
12  //设定下载文件存储的文件路径
13 public static String downloadFilePath = "D:\\downloadFiles";
14      WebDriver  driver;
15      String baseUrl;
16      JavascriptExecutor js;
17     
18     @BeforeMethod
19     public void beforeMethod()  {
20     baseUrl="http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/35.0b8/win32/zh-CN/";
21       }
22 
23     @AfterMethod
24     public void afterMethod() {
25         driver.quit();
26       }
27 
28     
29     @Test
30     public void testdataPicker() throws Exception {
31         System.setProperty("webdriver.firefox.bin","D:\\firefox\\firefox.exe");
32         driver = new FirefoxDriver(firefoxDriverOptions());
33         
34         driver.get(baseUrl);
35         //单击包含“Stub”关键字的下载链接
36         driver.findElement(By.partialLinkText("Stub")).click();
37         //设定10秒钟的延迟,让程序下载完成。如果网络下载很慢,可以根据预估的下载完成时间,
38         //设定暂停时间
39         try{
40             Thread.sleep(10000);
41               }catch(Exception e){
42             e.printStackTrace();
43               }
44     }
45     
46     public static FirefoxOptions firefoxDriverOptions() throws Exception {
47         FirefoxOptions options = new FirefoxOptions();
48         //声明一个 profile 对象
49         FirefoxProfile profile = new FirefoxProfile();
50               //设置 Firefox 的browser.download.folderList属性为 2
51               //如果没有进行显示设定,则使用默认值 1,表示下载文件保存在“下载”文件夹
52               //设定为 0,则下载文件会被保存在用户的桌面上
53               //设定为 2,则下载文件会被保存在指定的文件夹下
54         profile.setPreference("browser.download.folderList",2);
55               //browser.download.manager.showWhenStarting的属性默认值为 true
56               //设定为 true,则在用户启动下载的时候显示 Firefox 浏览器的文件下载窗口
57            //设定为 false,则在用户启动下载的时候不显示 Firefox 浏览器的文件下载窗口
58         profile.setPreference("browser.download.manager.showWhenStarting",false);
59         Thread.sleep(5000);
60         //browser.download.dir设定下载文件保存的目录
61         profile.setPreference("browser.download.dir",downloadFilePath);
62         //browser.helperApps.neverAsk.openFile表示直接打开下载文件,不显示确认框
63         //默认值为空字符串,下行代码行设定了多种文件的 MIME类型,例如,application/x-msdownload
64         //表示.exe类型的文件,application/excel表示 Excel 类型的文件
65         profile.setPreference("browser.helperApps.neverAsk.openFile",
66                 "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");
67 //browser.helperApps.neverAsk.saveToDisk表示下载文件是否直接保存到磁盘
68         //默认值为空字符串,下行代码行设定了多种文件的 MIME类型,例如,application/x-msdownload
69         //表示.exe类型的文件,application/excel表示 Excel 类型的文件
70         profile.setPreference("browser.helperApps.neverAsk.saveToDisk",
71                 "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");
72 // browser.helperApps.alwaysAsk.force对于未知的 MIME 类型文件会弹出窗口
73         // 让用户处理,默认值为true,设定为false表示不会记录打开未知 MIME 类型
74               // 文件的方式
75         profile.setPreference("browser.helperApps.alwaysAsk.force",false);
76         //下载.exe文件弹出警告,默认值是 true,设定为false 则不会弹出警告框
77         profile.setPreference("browser.download.manager.alertOnEXEOpen",false);
78         // browser.download.manager.focusWhenStarting设定下载框在下载时会获取焦点
79         // 默认值为 true,设定为 false 表示不获取焦点
80         profile.setPreference("browser.download.manager.focusWhenStarting",false);
81               // browser.download.manager.useWindow设定下载是否显示下载框,默认值为true
82               // 设定为 false 会把下载框进行隐藏
83         profile.setPreference("browser.download.manager.useWindow",false);
84               // browser.download.manager.showAlertOnComplete设定下载文件结束后是否显示下载
85               // 完成提示框,默认值为 true,设定为 false 表示下载完成后不显示下载完成提示框
86         profile.setPreference("browser.download.manager.showAlertOnComplete",false);
87               // browser.download.manager.closeWhenDone设定下载结束后是否自动关闭下载框
88               // 默认值为true,设定为false 表示不关闭下载管理器
89         profile.setPreference("browser.download.manager.closeWhenDone",false);
90         
91         options.setProfile(profile);
92         return options;
93     }
94 
95     }

 

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即可,文件就能被下载成功了,其他文件类型按照同样的方法也可以解决。

 

 
 
 
 
 
 

转载于:https://www.cnblogs.com/miaomiaokaixin/p/9147755.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值