使用python在web自动化中经常碰到文件上传的操作,一般文件上传存在input输入框的话可以直接采用send_keys()的方法传入文件,在没有输入框的文件上传则要借用其他第三方库来完成,下面介绍几种文件上传的方法


方法一
pywin32库

#导入win32gui、win32con
import win32gui
import win32con

def upload(self,filePath):
title = “打开”
dialog = win32gui.FindWindow("#32770", title) # 一级窗口
ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, “ComboBoxEx32”, None) # 二级
comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, “ComboBox”, None) # 三级
# 编辑按钮
edit = win32gui.FindWindowEx(comboBox, 0, ‘Edit’, None) # 四级
# 打开按钮
button = win32gui.FindWindowEx(dialog, 0, ‘Button’, “打开(&O)”) # 四级

# 往编辑当中,输入文件路径 。
win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filePath)  # 发送文件路径
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 点击打开按钮
1
2
3



方法二
pywinauto库

#操作系统指令
from pywinauto import Desktop
app = Desktop()
dialog = app[‘打开’]
dialog[“Edit”].type_keys(r"C:\Users\Asus\Pictures\QQ浏览器截图\pp.png")
dialog[“Button”].click()



方法三

pyautogui跨平台

pyautogui库可以跨平台使用,Windows、Linux、Mac都可以,但是需要注意以下情形

情形一:
python3.8版本
1.需先安装依赖库 pillow== 6.2.2
2.然后安装pyautogui库

情形二:
非python3.8版本
直接安装pyautogui库

代码示例:
pyautogui.write(‘d:\text.txt’) #注意盘符为小写
pyautogui.press(‘enter’,2) #这里为避免上传失败情况,尽量使用2次确定键

如果路径中含有中文,则需要导入python剪切板
代码示例:
import pyperclip
pyperclip.copy(‘D:\用户.txt’)
time.sleep(2)
pyautogui.hotkey(‘ctrl’,‘v’)
pyautogui.press(‘enter’,presses=2)