檔案上傳是web測驗種很常見的一個場景
檔案上傳功能實作分為兩類,一類是input標簽,這種比較簡單,可以直接send_keys實作上傳操作;但遇到非input標簽的因為是windows控制元件所以有些情況下通過selenium卻沒法操作,因此需要借助一些第三方庫來實作,
下面主要介紹一下非input標簽的情況:
1 Autolt 需要去呼叫其生成的.au3或.exe檔案.----操作繁瑣不易理解,不推薦
2 SendKeys第三方庫(目前只支持到2.7版本)----不支持3.x版本的python,不推薦
3 Python pywin32庫,識別對話框句柄,進而操作 ------pip install pywin32
3.1 winspy識別控制元件,下載解壓即可
3.2 找到控制元件
3.3 操作控制元件





絕對路徑 一層一層找,從Edit開始向上一級一級找到最外層#32770
找到輸入框 #32770 --> ComboBoxEx32 --> ComboBox --> Edit
找到打開按鈕 #32770 --> Button
下面直接上代碼:
1 from time import sleep 2 import win32con 3 import win32gui 4 5 6 def upload(file_path, driver = 'Chrome'): 7 # 谷歌瀏覽器 8 if driver == 'Chrome': 9 title = '打開' 10 dialog = win32gui.FindWindow('#32770', title) 11 ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None) 12 ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None) 13 Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None) 14 Button = win32gui.FindWindow('Button', '打開(&O)') 15 # 輸入檔案路徑 16 win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, file_path) 17 # 點擊打開按鈕 18 win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, Button) 19 sleep(3) 20 21 22 if __name__ == '__main__': 23 file = r'demo.txt' 24 upload(file)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246029.html
標籤:其他
