文件上传
文件上传,如果按照手工方式操作,需要操作windows对话框,selenium默认只能操作浏览器里的网页,不能对windows对话框操作
标准文件上传
selenium针对file类型的input标记封装了现成的文件上传操作
标准文件上传的浏览、选择文件或上传按钮是文件型按钮:
<input type='file' name='file_name'>
标准文件上传的"浏览"、"选择文件"或"上传"按钮是文件型按钮:
driver.find_element(By.NAME,'file').send_keys(r"D:\test.txt")
注意事项:
-
文件路径支持绝对路径,不支持相对路径(.或..),需要采用os模块里的path相关函数
filepath = os.path.join(os.path.dirname(os.getcwd(),"tmpe","test.txt")) driver.find_element(By.ID,'file').send_keys(filepath)
-
语法说明
os.path.join() 函数是用于拼接两个或更多的路径 os.path.dirname() 函数返回参数的文件或文件夹所在的目录 os.getcwd() 函数返回当前工作目录
"""
打开ECshop前台登录页
输入用户名vip、密码vip、点击 立即登录 等待5秒
点击上方 用户中心 等待3秒
点击左侧 我的留言 等待3秒
输入主题 123
输入留言内容 456
选择文件: D:\temp\111.txt
点击 提交
"""
import os.path
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox() # 启动浏览器
driver.get('http://localhost/upload/user.php')
driver.find_element(By.NAME,'username').send_keys('vip') # 输入用户名 vip
driver.find_element(By.NAME,'password').send_keys('vip') # 输入密码 vip
driver.find_element(By.NAME,'submit').click() # 点击 登录按钮
sleep(5)
driver.find_element(By.LINK_TEXT,'用户中心').click() # 点击 用户中心
sleep(3)
driver.find_element(By.PARTIAL_LINK_TEXT, ' 我的留言').click() # 点击 我的留言
driver.find_element(By.NAME,'msg_title').send_keys('123')
driver.find_element(By.NAME,'msg_content').send_keys('456')
filepath = os.path.join(os.path.dirname(os.getcwd()),'temp','111.txt')
driver.find_element(By.NAME,'message_img').send_keys(filepath)
driver.find_element(By.XPATH,"//input[@value='提 交']").click()
sleep(3)
driver.quit()
文件下载
-
在日常的web操作中,经常会遇到文件下载操作,一般都是点击一个下载链接,然后自动下载到默认目录
-
Firefox浏览器下载配置
关于火狐浏览器的参数,可以通过在Firefox浏览器地址栏中输入"about:config"查看,设置好配置信息后,在重新启动浏览器后,浏览器就会根据这些配置进行运行或操作。
-
Firefox下载相关配置参数
# 设置Firefox的默认下载文件夹 browser.download.folderList 0代表桌面,1是 我的下载,2是自定义
# 下载文件存放目录 browser.download.dir 如果browser.download.folderList=0,这里不需要设置参数
# 是否显示开始 browser.download.manager.showWhenStarting True 为显示开始,False为不显示开始
# 对所给文件类型不再弹出框进行询问 在下载文件时,浏览器可能会弹出对应的下载提示框。 这个提示框是浏览器的,不能使用Selenium进行操作,所以可以通过该配置关闭提示。 上面例子中表示:对于下载类型为二进制流的文件不需要弹出提示。 常用的类型有:application/octet-stream, application/vnd.ms-excel, text/csv, application/zip,application/pdf,application/json,application/msword
Content-type(MIME)
Firefox启动配置
在调用WebDriver的Firefox()方法时设置信息会作为参数传递给浏览器。Firefox浏览器在启动、运行(下载)时就会根据这些设置信息进行操作:
配置对象 = webdriver.FirefoxProfile() # 获取配置对象
配置对象.set_preference(key,value) # 添加配置信息
webdriver.Firefox(firefox_profile=配置对象) # 以配置对象启动浏览器
练习
https://pypi.org/project/selenium/3.141.0/#files下载selenium-3.141.0-py2.py3-none-any.whl文件到当前代码所在的路径里