15 - selenium 常見操作,使用 pywin32庫 進行上傳操作


上傳操作有兩種情況:

第一種:如果是 input 可以直接輸入路徑的,那么直接調send_ keys輸入路徑

第二種:非 inpat 標簽的上傳,則需要借助第三方工具,有一下三種方法

2.1 Autolt 我們去調用其生成的 au3 或 exe 文件;

2.2 SendKeys 第 三方庫(目前只支持到2.7版本),目前因為這個庫不在維護,需要要使用的話需要更改源代碼,所以我們不用這種方法

  網址: https://pypi.org/project/SendKeys/

  2.3 Python 的 pywin32庫,識別對話框句柄,進而操作;如果針對 Autolt 的時候也可以使用 Python 中的 pyautoit 庫來實現;

 

今天我們來學習下使用 Python 的 pywin32 庫來實現上傳操作;前兩種不考慮有點復雜,我們要達到的目的就是可以上傳文件即可。

前提:Python 安裝 pywin32 庫

# cmd 豆瓣地址安裝
pip install -i https://pypi.douban.com/simple pywin32

pywin32 庫實現上傳操作需要借助 WinSpy 工具輔助來定位;

文件上傳工具下載地址: 

  百度網盤鏈接:https://pan.baidu.com/s/1zxsR6kOTsG4_GrBwFh6v4A  提取碼:z3y

說明:

  • 1、WinSpy-1.0.2.7z 解壓即可。
  • 2、pywin32的exe程序,根據自己安裝的python版本來選擇。 雙擊安裝即可。
  • 3、如果第2步執行不成功,或者沒有匹配的版本,從以下命令中選一個安裝:
    • 命令1:pip install pypiwin32  
    • 命令2:python -m pip install pypiwin32  

winspy工具的定位方法采用的是絕對路徑定位,即:根路徑為點擊上傳按鈕后的彈出框的整個窗口頁面,一般根據Text文本值和Class屬性來定位,如圖所示:

  

  • Handle:句柄,每次會變的
  • text:文本內容
  • Class:類別

  我們先直接定位“整個彈窗”的 Text 文本值為“打開”,Class屬性值為“#32770”

  在winspy工具左上角有個聚焦按鈕,通過拖動的方式拖動到上傳彈出框的對應位置(如文件路徑輸入框)后松開,winspy界面會顯示當前定位的Text文本值(此處為空)和Class屬性值( Edit ), 在windows的窗口下,Parent屬性的值中,括號里面的就表示它上一層元素的Class屬性值,可以通過點擊Parent屬性值跳到上一元素,最終我們定位到文件路徑輸入框的Class屬性路徑為: Edit - combox - comboBoxEx32 - #32770.

  

   

那么同理,“打開” 按鈕通過同樣的絕對路徑方式定位,得到它的Class屬性路徑為: button - #32770。 

  

通過借助winspy工具定位出了對應元素的路徑,就可以通過pywin32庫來實現上傳操作啦!

pywin32的實現步驟為:

1、找到絕對路徑輸入框和"打開”按鈕的元素;

2、輸入絕對路徑,點擊打開

在頁面實現的前提條件為: windows.上傳窗已經出現,可以sleep1~ 2秒等待上傳的彈框出現。

各個瀏覽器中的彈窗名都不同,如火狐----谷歌--IE同理;所以代碼中需要判斷是哪個瀏覽器

 

封裝:使用 pywin32 庫當中的 wendousi 方法實現的;

步驟1、找到輸入框和打開按鈕    2、輸入路徑地址,點擊打開

# 需要使用這兩個庫
import
win32gui import win32con def upload(filePath, browser_type="chrome"): ''' 通過pywin32模塊實現文件上傳的操作 :param filePath: 文件的絕對路徑 :param browser_type: 瀏覽器類型(默認值為chrome) :return: ''' if browser_type.lower() == "chrome": title = "打開" elif browser_type.lower() == "firefox": title = "文件上傳" elif browser_type.lower() == "ie": title = "選擇要加載的文件" else: title = "" # 這里根據其它不同瀏覽器類型來修改 # 找元素 # 一級窗口"#32770","打開";找到窗口,在根據不同瀏覽器傳入 title 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) # 點擊打開按鈕

如何使用:

# 打開彈窗的之前操作省略。。。。。。。
# 在打開上傳彈窗后,直接調用 upload 類,傳需要上傳文件的絕對路徑即可
upload("D:\\文件的絕對路徑")      # 傳入之前使用 time。sleep(2)等待兩秒

 

 

尊重原創:該篇文章摘自作者:小公瑾  出處為:https://www.cnblogs.com/xiaogongjin/


免責聲明!

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



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