Selenium 封装了现成的文件上传操作。但是随着现代前端框架的发展,文件上传的方式越来越多样。而有一些文件上传的控件,要做自动化控制会更复杂一些。
一、当上传文件元素为 input 且 type=”file” 时,即可使用元素上传方法
input = driver.find_element('id', 'kw')
input.send_keys(r'D:\学习资料\123.txt')
二、当上传文件元素不为 input 时,可使用 pywinauto 来进行上传文件操作。
1、单个文件
from pywinauto.keyboard import send_keys
import time
# 首先获取到可点击的元素
my_file = driver.find_element('id', 'my_file')
# 进行点击操作,以打开windows选择文件弹窗
my_file.click()
# 设置一个硬等待时间,以防万一
time.sleep(2)
# 直接调用pywinauto类的send_keys方法上传文件
send_keys(r'D:\学习资料\1.txt')
# 确认提交
send_keys('{VK_RETURN}')
2、多个文件
from pywinauto.keyboard import send_keys
import time
# 首先获取到可点击的元素
my_file = driver.find_element('id', 'my_file')
# 进行点击操作,以打开windows选择文件弹窗
my_file.click()
# 设置一个硬等待时间,以防万一
time.sleep(2)
# 直接调用pywinauto类的send_keys方法上传文件
send_keys(r'D:\学习资料\1.txt')
send_keys(r'D:\学习资料\2.txt')
# 确认提交
send_keys('{VK_RETURN}')
3、如果以上 pywinauto | send_keys 因为路径报错,可使用以下方法解决
from pywinauto.keyboard import Desktop
import time
# 首先获取到可点击的元素
my_file = driver.find_element('id', 'my_file')
# 进行点击操作,以打开windows选择文件弹窗
my_file.click()
# 设置一个硬等待时间,以防万一
time.sleep(2)
# 直接调用pywinauto类的Desktop方法上传文件
# 先找到并定位弹出的窗口
obj = Desktop()
windows = obj['打开']
# 在输入框中输入路径
windows['Edit'].type_keys(r'D:\学习资料\1.txt')
# 提交
windows('Button').click()