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

时间: 2024-08-01 15:45:43

selenium3 无人工干预地自动下载某个文件的相关文章

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

#!usr/bin/env python #-*- coding:utf-8 -*- """ @author: sleeping_cat @Contact : [email protected] """ #无人工干预地自动下载某个文件 from selenium import webdriver import unittest,time class TestDemo(unittest.TestCase): def setUp(self): # 创

C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库

using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading; using

PSFTP自动登录SFTP服务器,批量自动上传上传下载指定文件

1.putty官方下载 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 下载安装版  putty-0.67-installer.msi 2.安装完成之后,打开putty安装目录,找到PSFTP.EXE,复制到新的文件夹 D:/Download 3.双击打开pstftp.exe,连接Linux服务器 4. 设置下载到windows的本地目录 5.psftp常用命令(操作服务端的文件则是Linux常用命令) lcd+路径

Maven管理SSM框架的pom.xml文件配置(自动下载所依赖的jar包)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

Windows 2008 想自动下载, default.ica 文件

Windows 2008  想自动下载, default.ica 文件,Windows 2008 ,IE8 默认不允许下载将Internet,下载启用即可,如图:

解决:下载EXCEL文件,自动用迅雷下载aspx

解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id"] != null && !string.IsNullOrEmpty(Request.QueryString["id"].ToString())) { if (Request.QueryString["oid"] != null && !string.IsNullOrEmpty(Request.QueryStr

OSS内文件如何设置为无时间限制的下载链接

OSS内文件如何设置为无时间限制的下载链接 想把一些文件上传到OSS里,把OSS当网盘用,做成分享的下载链接 发现获取的链接都是有时间限制的 有没有取消这个时间限制的功能或者方法 请将object的权限修改为"公共读",即可取消下载时间限制

C# 之 下载EXCEL文件,自动用迅雷下载aspx

在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id"] != null && !string.IsNullOrEmpty(Request.QueryString["id"].ToString())) { if (Request.QueryString["oid"] != null &&am

python - 将数据转换成 excl 表格, json 等文件 (dajngo - 打开网页后自动下载)

本篇只讲述怎么用. 具体 tablib  更多详细用法可参考博客 : https://blog.csdn.net/liangyuannao/article/details/41476277 # 不得不说  tablib  模块是真的好使. 一. 运行脚本将文件存入本地 import tablib headers = ('商品名称', '数量', '单价', '合计') data = [ ['orange', '1', '5', '5'], ['apple', '2', '6', '12'] ]