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

     

     
     
     
     
     
     
  • 相关阅读:
    @pytest.mark.parametrize使用笔录
    Python常用模块/函数
    Python代码驱动facebook-Wda
    pytest简述--pytest.ini、allure、logging、assert的使用
    终端命令启动webDriverAgent
    Wda自动化环境搭建[IOS]
    windows10常用终端命令+adb shell
    Python-unittest框架+HtmlTestRunner
    appium+python Android UI自动化环境搭建(windows10)
    调用百度AI实现人脸检索
  • 原文地址:https://www.cnblogs.com/miaomiaokaixin/p/9147755.html
Copyright © 2011-2022 走看看