1、Selenium实现文件上传

(1)页面中的文件上传说明

文件上传是Web页面上很常见的一个功能,用脚本去实现文件上传很简单。

一般场景:在页面中的上传按钮是一个<input>标签,其中type属性为type="file",这种可以用Selenium提供的send_keys()方法轻松解决。

(2)文件上传示例

页面代码片段:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
</head>
<body>
<fieldset>
<legend>文件上传</legend>
<form action="">
<input type="file" name="upfile" value="">
</form>
</fieldset>
</fieldset>
</body>
</html>

脚本代码:

"""
1.学习目标:
掌握文件上传功能操作
2.操作步骤
此上传方式适用大多数情况。
上传文件标签为input类型,并且type=file时可使用此方式上传。
使用send_keys(“需要上传的文件的路径")
3.需求
在页面中,实现文件上传
4.总结
4.1 在上传文件的时候,对文件类型,大小等做充分验证。
4.2 在执行上传文件脚本时,加一定的等待时间,sleep()。
4.3 大多数上传文件都是input类型并且type=file。
4.4 对于非input标签的上传文件功能,使用Sendkeys库来实现。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os # 2.打开浏览器
driver = webdriver.Chrome() # 3.打开注册A页面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
sleep(2) # 4.上传文件
# 4.1 定位上传文件按钮
upfile = driver.find_element_by_name("upfile") # 4.2 使用send_keys方法上传文件
upfile.send_keys(r"C:\Users\L\Desktop\测试上传文件.txt")
sleep(5) # 5.关闭浏览器
driver.quit()

提示

另外一种非<input>标签的上传文件按钮,实现起来比较困难,可以借助autoit工具或者SendKeys第三方库来实现。

上传过程一般要打开一个系统的windows窗口,从窗口选择本地文件添加。所以,一般会卡在如何操作本地windows窗口。

(3)总结

其实上传本地文件没我们想的那么复杂,只要定位上传按钮,通send_keys()方法添加本地文件路径就可以了。绝对路径和相对路径都可以,关键是上传的文件存在。

小练习:使用邮箱给其他人发送一封代附件的邮件。

即:添加附件,就是上传文件操作;邮件正文的操作就是操作iframe元素。

2、Selenium实现文件下载

使用selenium.webdriver实现下载文件功能,只需要配置一下浏览器的参数即可实现。

(1)Firefox浏览器文件下载

1)操作步骤:

  1. 对于Firefox,需要我们设置其Profile:通过FirefoxProfile()方法创建一个Firefox自定义配置信息实例。
  2. 设置Firefox浏览器下载相关的自定义配置信息到Profile实例中。
  3. 启动Firefox,并把自定义配置Profile实例存储到浏览器对象中。
  4. 访问下载网站,进行下载。

2)文件下载示例:

需求:下载Firefox浏览器驱动文件

"""
1.学习目标
了解使用火狐浏览器实现文件下载
2.操作步骤(语法)
2.1 创建Firefox浏览器配置信息对象
webdriver.FirefoxProfile()
2.2 设置Firefox浏览器下载相关的自定义配置信息
2.3 创建Firefox浏览器对象,并把自定义配置信息存储到浏览器对象中
2.4 访问下载网站
2.5 进行下载
3.需求
使用火狐浏览器实现文件下载
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep # 2.创建Firefox浏览器配置信息对象,用于存放自定义配置
profile = webdriver.FirefoxProfile() # 3. 配置profile下载相关信息
"""
3.1 指定自定义下载路径,默认只会自动创建一级目录,
如果指定了多级不存在的目录,将会下载到默认路径,
如下就是定义了多级不存在的目录,文件就下载到了火狐浏览器的默认下载目录中
我的火狐默认下载路径:C:\\Users\\L\\Downloads
"""
profile.set_preference('browser.download.dir', 'f:\\Download\\123\\456') """
3.2 将browser.download.folderList设置为:
设置成 0 表示下载到桌面
设置成 1 表示下载到浏览器默认下载路径
设置成 2 表示使用自定义下载路径 和上面browser.download.dir配合使用,如果设置成0和1
上面的配置基本无用。
"""
profile.set_preference('browser.download.folderList', 2) """
3.3 browser.helperApps.alwaysAsk.force:
对于未知的 MIME 类型文件会弹出窗口让用户处理,
默认值为true,设定为False,
表示不会记录打开未知 MIME 类型文件的方式
"""
profile.set_preference("browser.helperApps.alwaysAsk.force", False) """
3.4 在开始下载时是否显示下载管理器
设定为true,则在用户启动下载的时候显示Firefox浏览器的文件下载窗口
否则不显示文件下载窗口。
"""
profile.set_preference('browser.download.manager.showWhenStarting', False) """
3.5 设定为 False 会把下载框进行隐藏
"""
profile.set_preference("browser.download.manager.useWindow", False) """
3.6 默认值为 true,设定为 False 表示不获取焦点
"""
profile.set_preference("browser.download.manager. focusWhenStarting", False) """
3.7 下载.exe文件弹出警告,
默认值是 true,设定为False 则不会弹出警告框
"""
profile.set_preference("browser.download.manager.alertOnEXEOpen", False) """
3.8 browser.helperApps.neverAsk.openFile:
表示直接打开下载文件,不显示确认框
默认值为空字符串,下行代码行设定了多种文件的 MIME类型.
例如:
application/exe,表示.exe类型的文件,
application/excel表示 Excel 类型的文件
"""
profile.set_preference("browser.helperApps.neverAsk.openFile", "application/zip") """
3.9 对所给出文件类型不再弹出框进行询问,直接保存到本地磁盘
"""
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip, application/octet-stream')
"""
其他可选文件类型:
application/a-gzip
application/x-gzip,
application/zip,
application/x-gtar,
text/plain,
application/x-compressed,
application/octet-stream,
application/pdf
""" """
3.10 browser.download.manager.showAlertOnComplete:
设定下载文件结束后是否显示下载完成提示框,
默认为true,设定为False,
表示下载完成后不显示下载完成提示框
"""
profile.set_preference("browser.download.manager. showAlertOnComplete", False) """
3.11 browser.download.manager.closeWhenDone:
设定下载结束后是否自动关闭下载框,
默认值为true,设定为False,
表示不关闭下载管理器.
"""
profile.set_preference("browser.download.manager.closeWhenDone", False) # 4. 创建浏览器对象
# 启动浏览器时,通过firefox_profile参数
# 将自动以配置添加到FirefoxProfile对象中
driver = webdriver.Firefox(firefox_profile=profile) # 5. 访问Firefox浏览器驱动文件下载网址
driver.get("https://npm.taobao.org/mirrors/geckodriver/v0.20.0/")
sleep(3) # 6. 定位下载链接,并点击下载
file = driver.find_element_by_link_text("geckodriver-v0.20.0-win64.zip")
file.click()
sleep(3) # 7.关闭浏览器
driver.quit()

(2)Chrome浏览器文件下载

1)示例

Chrome浏览器,设置其options

  1. download.default_directory:设置下载路径。
  2. profile.default_content_settings.popups:设置为0禁止弹出窗口。
"""
1.学习目标
了解使用谷歌浏览器实现文件下载
2.操作步骤(
2.1 创建谷歌浏览器加载项对象
webdriver.ChromeOptions()
2.2 定义Chrome浏览器加载项参数
2.3 将加载项参数添加到谷歌浏览器加载项对象中
options.add_experimental_option('prefs', prefs)
2.4 创建Chrome浏览器对象,并把自定义加载项对象存储到浏览器对象中
2.5 访问下载网站
2.6 进行下载
3.需求
使用谷歌浏览器实现文件下载
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep # 2. 创建谷歌浏览器加载项对象
options = webdriver.ChromeOptions() # 3. 定义加载项参数
prefs = {'profile.default_content_settings.popups': 0,
'download.default_directory': 'f:\\'} # 4.将加载项参数添加到谷歌浏览器加载项对象中
options.add_experimental_option('prefs', prefs) # 5. 创建浏览器对象,并添加加载项对象
driver = webdriver.Chrome(options=options) # 6. 方位下载页面
driver.get('https://npm.taobao.org/mirrors/chromedriver/80.0.3987.106/') # 7. 点击下载
driver.find_element_by_link_text("chromedriver_win32.zip").click()
sleep(3) # 8.关闭浏览器
driver.quit()

2)说明:Chrome其他常用启动参数

需要用的时候直接添加到配置信息中。

  1. 取消浏览器下载时保存路径弹框
    "download.prompt_for_download": False,
    "download.directory_upgrade": True, """
    'profile.default_content_settings.popups': 0
    是禁止弹出所有窗口
    """
  2. 是否提示安全警告
    # 下载xml文件时,会弹出“此文件类型可能会损害您的计算机”的提示。
    # 而不显示消息警告,需要添加下面配置,使用Selenium chromedriver禁用此弹出窗口。
    "safebrowsing.enabled": True

提示:以上说明的都是Selenium操作元素的基础操作,在实际工作中需要对这些操作进行封装,来解决实际工作中的问题。

『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件

    目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...

  2. 『心善渊』Selenium3.0基础 — 17、Selenium操作浏览器窗口的滚动条

    目录 1.为什么操作滚动条 2.Selenium如何操作滚动条 3.Selenium操作滚动条方法 4.操作滚动条示例 5.下拉至聚焦元素的位置 (1)实现步骤: (2)实现示例: 1.为什么操作滚动 ...

  3. 『心善渊』Selenium3.0基础 — 13、Selenium操作下拉菜单

    目录 1.使用Selenium中的Select类来处理下拉菜单(推荐) 2.下拉菜单对象的其他操作(了解) 3.通过元素二次定位方式操作下拉菜单(重点) (1)了解元素二次定位 (2)示例: 页面中的 ...

  4. 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍

    目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...

  5. 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作

    目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...

  6. 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍

    目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...

  7. 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)

    目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...

  8. 『心善渊』Selenium3.0基础 — 20、Selenium对Cookie的操作

    目录 1.Cookie介绍 2.Session介绍 3.Cookie工作原理图解 4.Cookie内容参数说明 5.Selenium操作Cookie的API 6.Selenium操作Cookie的示例 ...

  9. 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解

    目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...

随机推荐

  1. Zabbix 自动发现并监控磁盘IO、报警 引言

    引言 Zabbix并没有提供模板来监控磁盘的IO性能,所以我们需要自己来创建一个,由于一台服务器中磁盘众多,如果只有一两台可以手动添加,但服务集群达到几十那就非常麻烦,因此需要利用自动发现这个功能,自 ...

  2. :整数 跳转到该行 Vim中常用的命令

    :set nu 显示行号 :set nonu 不显示行号 :命令 执行该命令 :整数 跳转到该行 :s/one/two 将当前光标所在行的第一个one替换成two :s/one/two/g 将当前光标 ...

  3. linux基础之用户及用户组管理

    本节内容 用户管理 1. 为什么需要用户? 1.linux是一个多用户系统 2.权限管理(权限最小化) 2. 用户相关文件 /etc/passwd -->用户基本信息 /etc/shadow - ...

  4. Centos 重置root密码

    # cat /etc/system-release                         #查看版本 开机后在内核grub.2上敲击 e 在linux16 行(倒数第二行)末加入 " ...

  5. 原型和原型链 prototype和proto的区别

    原型 原型是function对象下的属性,它定义了构造函数的共同祖先,也就是一个父子级的关系,子对象会继承父对象的方法和属性 prototype是函数下的属性,对象想要查看原型使用隐式属性__Prot ...

  6. C语言实现推箱子游戏完整代码

    C语言实现推箱子游戏完整代码 前言 自己做的,可能有些代码不够工整,或者有些小问题,但游戏的基本操作是可以实现的 代码效果 代码一共分为8个部分,4个控制上下左右移动,2个判断输赢,1个统计归为的个数 ...

  7. 使用 “恢复模式” 或 “DFU 模式” 来更新和恢复 iOS 固件

    请访问原文链接:https://sysin.org/article/apple-ios-dfu/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin ...

  8. Cisco Catalyst 9800-CL Wireless Controller for Cloud

    面向云的思科 Catalyst 9800-CL 无线控制器,专为基于意图的网络全新打造. 版本: C9800-CL-universalk9.17.04.01 (29-Nov-2020) C9800-C ...

  9. Ascend昇腾计算

    Ascend昇腾计算 Ascend昇腾计算,是基于昇腾系列处理器构建的全栈AI计算基础设施及应用,包括昇腾系列芯片.系列硬件.芯片使能.AI框架.应用使能等.华为Atlas人工智能计算解决方案,基于昇 ...

  10. 如何安装/导入Arduino库文件及库文件的不同位置与区别(以eFLL中嵌入式模糊逻辑库为例)

    网上有数百个可在Aruduino中使用的库,这些代码集使得我们无需从0-1地搭建我们所需功能,这使得学习和使用Arduino变得更加方便简单.除此之外,平时直接从网上download下的代码也很有可能 ...