selenium自动化文件上传、文件下载
Windows平台的文件上传:pywin32, 安装命令: pip install pywin32 ps:识别工具 点击下载:winspy 提取码:ie6o
一、先来看上传文件的弹框,它是没有办法用 F12 来定位的,因为它是 Windows 操作系统的文件管理
二、pywin32的代码一定要等到这个操作系统的框出现才能执行,它只处理 Windows 的控价。
需要借助 Windows 的空间识别工具 winspy 点击下载:winspy 提取码:ie6o
三、按照绝对路径找元素,一层一层找外面的祖宗元素 我这是 Chrome 浏览器,不同的浏览器 title 不一样
谷歌的是"打开",火狐的是 "文件上传"
文件输入框的元素:(这是反着找的,先找需要的再找的上级元素)
Edit - ComboBox - ComboBoxEx32 - #32770
"打开"按钮的元素:(同上)
Button - #32770
四、需要修改的就是浏览器的窗口类型是什么, browser_type="chrome"
文件上传是绝对路径
前提是:Windows 上传窗口必须要出现
# 1\找到输入框和打开按钮 元素;2、输入地址,点击打开。 # 前提 :windows上传窗口已经出现。sleep1-2秒等待弹出的出现。 def upload(filePath, browser_type="chrome"): if browser_type == "chrome": title = "打开" else: title = "" # 找元素 # 一级窗口"#32770","打开" 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) # 点击打开按钮 time.sleep(2) upload("D:\\GifCam5.0 .exe")
改了一下,总和了一下上传和下载,比较垃圾,借鉴就好了
注意不同浏览器的title信息是不一样的 谷歌浏览器 导入是打开,导出是另存为
def upload_file(filePath, browser_type="chrome"): """ ******《上传文件》《导出文件》 Windows 窗口 ****** :param filePath: 传入文件路径 绝对路径 包括文件名称 :param browser_type: 浏览器默认 chrome(谷歌) # Edit - ComboBox - ComboBoxEx32 - #32770 # 找到输入框和打开按钮 元素;2、输入地址,点击打开。 # 前提 :windows上传窗口已经出现。sleep1-2秒等待弹出的出现。 """ # 等待 Windows 窗口出现 time.sleep(2) # 强制等待 # 这个是判断的浏览器,不同的浏览器上传的 title(标题头) 是不一样的 if browser_type == "chrome": title = "打开" and "另存为" else: title = "" # 找元素 # 一级窗口 顶级窗口"#32770","打开" dialog = win32gui.FindWindow("#32770", title) if title == "打开": # FindWindowEx 在爸爸的基础上找后代,1、爸爸是谁. 2、0. 3、找什么类型的后代. 4、有文本写文本,没有文体写 None 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) # 点击打开按钮 elif title == "另存为": # FindWindowEx 在爸爸的基础上找后代,1、爸爸是谁. 2、0. 3、找什么类型的后代. 4、有文本写文本,没有文体写 None DUIViewWndClassName = win32gui.FindWindowEx(dialog, 0, "DUIViewWndClassName", None) # 三级 DirectUIHWND = win32gui.FindWindowEx(DUIViewWndClassName, 0, "DirectUIHWND", None) # 四级 FloatNotifySink = win32gui.FindWindowEx(DirectUIHWND, 0, "FloatNotifySink", None) # 五级 ComboBox = win32gui.FindWindowEx(FloatNotifySink, 0, "ComboBox", None) # 六级 # 编辑存储路径 Edit = win32gui.FindWindowEx(ComboBox, 0, "Edit", None) # 七级 # 保存按钮 button = win32gui.FindWindowEx(dialog, 0, "Button", "保存(&S)") # 二级 # 往编辑当中,输入文件路径 。 win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, filePath) # 发送文件路径 win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 点击保存按钮 else: print("查看windows窗口title信息是否为:打开或另存为.")