python自动化-WinSpy+pywin32文件上传操作

'''百度首页搜索上传图片为例'''

#前提条件 1.使用winspy定位绝对路径
#前提条件 2.安装库pywin32 采用pip安装pip install pywin32 或其他途径安装

#1.访问百度网址
#2.点击图片按钮
 
 

#3.点击上传
 
 

#4.使用winspy工具定位路径输入框 和打开按钮 如何定位请自行查找 参考https://www.cnblogs.com/xiaogongjin/p/11546518.html#4361591
 
 

#5.输入绝对路径,点击打开 ,前提条件为,windows 上传弹框已经可见,可以sleep1-2秒等待出现
小白环境 Name: Version:
    python 3.7
    WinSpy 1.0.2.7
    pywin32 227
链接:https://pan.baidu.com/s/1fgIVbyPXbVenRMxSb5u89Q
提取码:7wuo
注意:pywin32兼容Python版本,以上环境亲测可用

pywin32各版本连接:https://github.com/mhammond/pywin32/releases



下方代码可直接复制执行,需要更新上传文件路径
from selenium import webdriver
import win32gui
import win32con
import time
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.maximize_window()#最大
driver.find_element_by_class_name('soutu-btn').click()
time.sleep(2)
imgpath='D:\abc.jpg'
driver.find_element_by_class_name('upload-pic').click()
time.sleep(2)
# driver.find_element_by_class_name('upload-pic').send_keys('imgpath')
#一级顶层窗口,此处title为上传窗口名称,浏览器不一样上传窗口名称不一样
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',None)
#执行操作 输入文件路径
win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,'D:\abc.jpg')
#点击打开上传文件
win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button)

打包封装方法
def file_upload(self,filePath,browser_type='chrome'):
'''
windows 上传弹框已经可见,可以sleep1-2秒等待出现
:param filePath: 文件绝对路径例 D:\123.abc
:param browser: 浏览器类型默认为 chrome
:return:
'''
if browser_type.lower()== 'chrome':
title='打开'
elif browser_type.lower()== 'Firefox':
title='文件上传'
elif browser_type.lower() =='ie':
title='选择要加载的文件'
logging.info('本次使用{0}进行上传操作'.format(browser_type))
# 一级顶层窗口,此处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', None)
# 执行操作 输入文件路径
win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filePath)
# 点击打开上传文件
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)

链接:https://pan.baidu.com/s/1fgIVbyPXbVenRMxSb5u89Q
提取码:7wuo

安装状况1:安装时提示无法找到注册信息

解决办法参考链接:https://blog.csdn.net/u011702002/article/details/79624256

复制以下代码,执行后重新安装

代码
py3.5.2
import sys

from winreg import *

# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix

regpath = "SOFTWARE\Python\Pythoncore\%s\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\Lib\;%s\DLLs\" % (
installpath, installpath, installpath
)

def RegisterPy():
try:
reg = OpenKey(HKEY_CURRENT_USER, regpath)
except EnvironmentError as e:
try:
reg = CreateKey(HKEY_CURRENT_USER, regpath)
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
except:
print("*** Unable to register!")
return
print("--- Python", version, "is now registered!")
return
if (QueryValue(reg, installkey) == installpath and
QueryValue(reg, pythonkey) == pythonpath):
CloseKey(reg)
print("=== Python", version, "is already registered!")
return
CloseKey(reg)
print("*** Unable to register!")
print("*** You probably have another Python installation!")

if __name__ == "__main__":
RegisterPy()


状况2:安装后 import win32gui异常

pip install pypiwin32  安装后重新正常导入即可

原文地址:https://www.cnblogs.com/wfwt180801-/p/11971507.html