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