一、先来看上传文件的弹框,它是没有办法用 F12 来定位的,因为它是 Windows 操作系统的文件管理
二、pywin32的代码一定要等到这个操作系统的框出现才能执行,它只处理 Windows 的控价。
三、按照绝对路径找元素,一层一层找外面的祖宗元素 我这是 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信息是否为:打开或另存为.")