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信息是否为:打开或另存为.")
  • 相关阅读:
    路由器漏洞调试的一些技巧
    路由器漏洞挖掘利用的一些基础知识
    windows 利用环境变量%PATH%中目录可写提权

    python super原理,不是指父类
    regexp盲注的一些改进
    阿里规范
    阿里规范
    工具类
    Timer 使用 (一)
  • 原文地址:https://www.cnblogs.com/yongzhuang/p/12519537.html
Copyright © 2011-2022 走看看