您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“python+selenium的web自動化上傳操作如何實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“python+selenium的web自動化上傳操作如何實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
上傳有兩種情況:
如果是input可以直接輸入路徑的,那么直接使用send_keys(文件路徑)輸入路徑即可;
非input標簽的上傳,則需要借助第三方工具:第三方庫 pywin32、第三方工具pyautogui等等。
那這里針對以上兩種情況分別介紹一下具體的解決方法。
定位到元素,然后直接使用send_keys(文件路徑)輸入路徑,比較簡單。
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://xxxx") driver.maximize_window() # 定位上傳文件元素 input_file = driver.find_element_by_id("xxx") # 上傳文件 input_file.send_keys(r"D:\learn\xx.txt")
非input標簽的上傳,則需要借助第三方工具。pywin32就是這樣的一個第三方庫,主要是方便python開發者快速調用windows API的一個模塊庫,可以識別上傳對話框句柄進而操作。
安裝命令:pip install pywin32。
從上面的上傳窗口,及WinSpy工具窗口,可以得出控制關系圖如下:
從上圖可以看出:
文件名輸入框的路徑為:上傳窗口 - > comboBoxEx32 - >comboBox - > Edit,在第四級edit;
按鈕的路徑為:上傳窗口 - > button(打開按鈕),在第二級。
我們需要一步一步定位,從第一層開始往下去找,找到對應的窗口然后進行操作,步驟說明如下:
第一步:先定位到第一層大窗口(即整個上傳窗口),使用win32gui模塊下的FindWindow(),它是專門用于查找大窗口的;
第二步:在大窗口下查找子窗口,使用win32gui模塊下的FindWindowEx(),查找大窗口以下的子窗口都是用這個方法;
第三步:定位到最后要操作的窗口后,就開始要執行編輯、點擊這個操作了,不管是編輯還是點擊都是使用win32gui模塊下的SendMessage()。
以上三步的相關函數說明如下:
win32gui.FindWindow(IpClassName,IpWindowName):自頂層窗口開始尋找匹配條件的窗口,并返回這個窗口的句柄IpClassName:類名,在Spy++里能夠看到IpWindowName:窗口名,標題欄上能看到的名字
win32gui.FindWindowEx(hwndParent=0,hwndChildAfter=O,IpClassName=None,IpWindowName=None):搜索類名和窗體名匹配的窗體,并返回這個窗體的句柄,找不到就返回0hwndParent:若不為0,則搜索句柄為hwndParent窗體的子窗體hwndChildAfter:若不為0,則按照z-index的順序從hwndChildAfter向后開始搜索子窗體,否則從第一個子窗體開始搜索IpClassName:字符型,是窗體的類名,這個可以在Spy++里能夠看到IpWindowName:字符型,是窗口名,就是標題欄上能看到的名字
win32gui.SendMessage(hWnd, Msg, wParam, IParam):hWnd:整型,接收消息的窗體句柄Msg:整型,要發送的消息,這些消息都是windows預先定義好的wParam:整型,消息的wParam參數IParam:整型,消息的IParam參數
以下是封裝好的上傳函數,因為window的上傳窗口是固定不變的,我們只需要封裝好一個類知道如何去調用即可,不需要理解它的處理細節,但如果你有興趣可以深入了解一下。
import win32gui import win32con # edit - combobox - comboBoxEx32 - #32770 編輯框在第四級 # button - #32770 打開按鈕在第二級 # 前提:window上傳窗口已經出現,最好sleep 1-2秒等待窗口出現 def upload(filepath, browser_type="chrome"): if browser_type == "chrome": title = "打開" else: title = "" # 找元素 # 從一級開始找,一級窗口“#32770”,“打開” dialog = win32gui.FindWindow("#32770", title) # FindWindow用于找大窗口 # 二級之后都用FindWindowEx,需要四個參數, # 1、元素的父親,2、從第一個子代開始找元素,3、元素的類型名(class),4、元素的文本值 comboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None) # 二級 comBox = win32gui.FindWindowEx(comboBoxEx32, 0, "ComboBox", None) # 三級 # 編輯框 edit = win32gui.FindWindowEx(comBox, 0, 'Edit', None) # 四級 # 打開按鈕 button = win32gui.FindWindowEx(dialog, 0, 'Button', '打開(&0)') # 二級 # 往編輯框輸入文件路徑 win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath) # 發送文件路徑 win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 點擊打開按鈕 if __name__ == '__main__': upload('D:\\test.txt')
還有一種更方便的方法,就是借助第三方工具pyautogui,pyautogui是一個純Python的GUI自動化工具,其目的是可以用程序自動控制鼠標和鍵盤操作,并且支持多平臺(Windows,OS X,Linux)。強烈推薦!
下面以舉例的html為例,需要先把該代碼保存成html文件,后續直接訪問這個本地html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2> hello world </h2> <input type="file" name="mfile"> </body> </html>
安裝模塊: pip install pyautogui,
操作只需要兩步:
第一步:將要上傳的文件路徑寫入到文件名的輸入框內;
第二步:敲回車,相當于點擊【打開】按鈕,注意回車presses要2次才能生效。
import os import time import pyautogui as ui from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(20) # 隱式等待 dir = os.getcwd() html_dir = os.path.join(dir, 'demo.html') driver.get(html_dir) file_elem = driver.find_element_by_name('mfile') file_elem.click() # 系統之間要等待 time.sleep(1) file_dir = os.path.join(dir, 'test.txt') # 要上傳的文件路徑 # 寫入文件 ui.write(file_dir) # 直接調用寫入 time.sleep(0.5) # 輸入回車鍵, presses表示按的次數,按一次不會生效,有可能是執行太快,建議presses=2 ui.press('enter', presses=2) time.sleep(2) driver.quit()
不管是使用哪種上傳方式,只要是操作系統的上傳窗口,操作之前記得先等待一下。
今天的文章就到這里了喲,需要獲得下面福利的小伙伴可以私信我關鍵字“資料”獲取喲。
項目實戰
app項目,銀行項目,醫藥項目,電商,金融
大型電商項目
全套軟件測試自動化測試教學視頻
300G教程資料下載【視頻教程+PPT+項目源碼】
全套軟件測試自動化測試大廠面經
python自動化測試++全套模板+性能測試
讀到這里,這篇“python+selenium的web自動化上傳操作如何實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。