selenium自动化文件上传、文件下载

Windows平台的文件上传:pywin32, 安装命令: pip install pywin32  ps:识别工具 点击下载:winspy   提取码:ie6o

 

一、先来看上传文件的弹框,它是没有办法用 F12 来定位的,因为它是 Windows 操作系统的文件管理

 

 二、pywin32的代码一定要等到这个操作系统的框出现才能执行,它只处理 Windows 的控价。

需要借助 Windows 的空间识别工具   winspy      点击下载:winspy  提取码:ie6o

 

 

 

 

三、按照绝对路径找元素,一层一层找外面的祖宗元素  我这是 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信息是否为:打开或另存为.")

 

posted @ 2020-03-19 20:24  一八十四  阅读(2306)  评论(0编辑  收藏  举报