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信息是否為:打開或另存為.")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM