zoukankan      html  css  js  c++  java
  • 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信息是否为:打开或另存为.")
  • 相关阅读:
    CCF CSP 题解
    CCF CSP 2019032 二十四点
    CCF CSP 2018121 小明上学
    CCF CSP 2019092 小明种苹果(续)
    CCF CSP 2019091 小明种苹果
    CCF CSP 2019121 报数
    CCF CSP 2019031 小中大
    CCF CSP 2020061 线性分类器
    CCF CSP 2020062 稀疏向量
    利用国家气象局的webservice查询天气预报(转载)
  • 原文地址:https://www.cnblogs.com/yongzhuang/p/12519537.html
Copyright © 2011-2022 走看看