python-web自动化:上传操作
前言-上传操作:有两种情况
1、如果是input可以直接输入路径的,那么直接调send_keys输入路径
2、非input标签的上传,则需要借助第三方工具:
2.1 Autoit我们去调用其生成的au3或exe文件
2.2 Send_keys第三方库(目前只支持到2.7版本)
网址:https://pypi.python.org/pyp/Sendkeys
2.3 python pywin32库,识别对话框句柄,进而操作
pyautoit
工具:pywin32库和winspy工具(辅助定位)
例如:百度网盘+上传窗口(windows)
工具的样子:拖拽瞄准镜图标到对应需要定位的地方,可以根据text、class值进行定位,点击windows可以看见该元素的父级,点击父级名称可见父级的父级
(这样上传文件输入框的定位是:edit - combox - comboBoxEx32 - #32770)
实际代码段:
安装第三方库:pip install pywin32
引入:
import win32gui
import win32con
# edit - combox - comboBoxEx32 - #32770 从要用到的文件名输入框一直找到父级顶级
# 前提 :windows上传窗口已经出现。sleep1-2秒等待弹出的出现。(不同的浏览器上传界面的title名称不一样,谷歌是“打开”,火狐是“文件上传”)
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) #点击打开按钮
upload("D:\\123.jpeg")
注意:运行此代码时可以直接登录百度账号,打开上传头像界面,然后运行代码,图片就上传成功了
代码运行后图片显示出来了