上传文件控件有两种:一种是input标签,另外一种是非input标签,比如button标签、div标签等
一、input标签很简单,使用send_keys就可以,只是有时候要用js将元素改为可输入,dr.find_element(By.XPATH, '//div[text()="+上传图片"]').send_keys(pic_path)
二、非input标签
我们这里使用WinSpy工具(充当类似F12定位元素的功能),和pywin32工具(操作Windows窗口)
一)WinSpy工具的安装和使用:
1.下载WinSpy ,解压即可使用
下载地址:https://sourceforge.net/projects/winspyex/
2.在winspy工具左上角是个聚焦按钮,通过拖动的方式拖动到上传弹出框的对应位置(如文件路径输入框)后松开,winspy界面会显示当前定位的Text文本值(此处为空)和Class属性值(Edit)
点击下面的【Tree】按钮,可以展示当前元素的上下级。可以看到,Edit父级是ComboBox,ComboBox父级是ComboBoxEx32,ComboBoxEx32父级是#32770,它的父级是Desktop(桌面),所以当前窗口的根节点是#32770。理清关系后,可以进入下面的写代码环节。
二)安装及使用pywin32
1.安装pywin32:
命令行运行:pip install -i https://pypi.douban.com/simple pywin32
2.导入及使用
import win32gui
import win32con
# 一级窗口"#32770",
dialog = win32gui.FindWindow("#32770", "打开")
# 向下传递
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)") # 二级
# 输入文件的绝对路径,点击“打开”按钮
pt = obj_path + "\\pic\\hua.jpg"
print(pt)
win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, pt) # 发送文件路径
# win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, 'D:\\wuxx\\PycharmProjects\\pythonProject\\hua.jpg') # 发送文件路径
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 点击打开按钮'''