前言:
近期很多小伙伴在使用selenium做web自動化的過程中,遇到了文件上傳的功能,發現通過selenium無從下手。那么小編在這里給大家整理了一篇文章,只需要幾行簡單的代碼,就可以幫大家解決文件上傳這個問題。
文件上傳窗口分析
大家在面對文件上傳這個問題的時候,無從下手的原因,主要是selenium無法對文件上傳彈出窗口中的相關元素進行定位。以chrome瀏覽器為例,在網頁上點擊上傳文件,會彈出如下窗口,很顯然這個彈出窗口並不是瀏覽器中的窗口,而是windows系統中的彈窗,但selenium只能操作瀏覽器,無法來操作這種系統彈窗。那么這個時候我們就需要借助於可以操作系統窗口的工具來實現。
pywinauto的使用介紹
關於文件上傳的彈窗,在python中可以通過pywinauto模塊來進行操作,pywinauto是python中用來做的PC端自動化的一個庫。PC端的所有窗口都可以使用它來進行操作。關於pywinauto這邊不做過多介紹。之前我寫過相關的文章,也錄制過相關的使用視頻。這里主要來講一下如何通過它來實現文件上傳。在進行文件上傳的時候,我們需要這個窗口進行操作的一共是三個步驟:
操作步驟:
1、文件路徑填寫
2、文件名填寫
3、點擊打開
在進行操作之前,我們就需要定位到這幾個控件,1、路徑輸入框,2、文件輸入框、3、打開按鈕 關於控件定位操作的具體細節,大家可以去自行學習pywinauto的使用 具體定位代碼如下:
import pywinauto # 使用pywinautoc創建一個操作桌面窗口的對象 app = pywinauto.Desktop() # 選中文件上傳的窗口 dlg = app["打開"] # 選中文件地址輸入框 dlg["Toolbar3"] # 選中文件名輸入框 dlg["文件名(&N):Edit"] # 選擇打開按鈕 dlg["打開(&O)"]
文件上傳小案例
小編事先找好了一個文件上傳的地址,這邊給大家來演示一個案例
1、第一步通過selenium打開文件上傳的地址,點擊上傳文件
from selenium import webdriver url= "https://www.layui.com/demo/upload.html" browser = webdriver.Chrome() # 訪問圖片上傳的網頁地址 browser.get(url=url) # 點擊圖片上傳按鈕,打開文件選擇窗口 browser.find_element_by_xpath("//button[@id='test2']").click()
上述代碼執行結果如下:
2、通過pywinauto選擇上傳文件,點擊進行上傳
import pywinauto from pywinauto.keyboard import send_keys # 使用pywinauto來選擇文件 app = pywinauto.Desktop() # 選擇文件上傳的窗口 dlg = app["打開"] # 選擇文件地址輸入框,點擊激活 dlg["Toolbar3"].click() # 鍵盤輸入上傳文件的路徑 send_keys("C:\課件\images") # 鍵盤輸入回車,打開該路徑 send_keys("{VK_RETURN}") # 選中文件名輸入框,輸入文件名 dlg["文件名(&N):Edit"].type_keys("9.png") # 點擊打開 dlg["打開(&O)"].click()