zoukankan      html  css  js  c++  java
  • 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  安装后重新正常导入即可

  • 相关阅读:
    『水晶报表』实现打印
    C#水晶报表教程
    C#
    C# 跨线程调用控件
    SQL中DateTime转换成Varchar样式
    解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的方法
    配置JAVA的环境变量
    lucene3.0_IndexSearcher排序
    tomcat如何配置环境变量
    无法启动DISTRIBUTED TRANSACTION COORDINATOR解决方法
  • 原文地址:https://www.cnblogs.com/wfwt180801-/p/11971507.html
Copyright © 2011-2022 走看看