關於非input框的自動化文件上傳方法
(此處用百度的上傳圖片搜索做演示)
使用第三方庫pywinauto (適用於window端)
首先創建driver對象用於打開百度網址,然后定位並點擊照相機圖標
from selenium import webdriver #從selenium庫中導入webdriver包
from time import sleep
driver = webdriver.Chrome()
url = 'https://www.baidu.com/'
driver.get(url)
driver.find_element_by_xpath('//*[@id="form"]/span[1]/span[1]').click()
接着點擊“選擇文件” 按鈕
注意:此時不能用selenium自帶的click方法,可能是瀏覽器驅動cookie過期,所以無法做到驅動打開window的文件窗口,然后無法click,會出現報錯。
driver.find_element_by_class_name('upload-pic').click()
這時候就可以用click問題的終極解決方案—js操作click。
大家可以看看我別的帖子“自動化測試click不了情況,及解決方案”(歡迎大佬提意見):https://www.cnblogs.com/zz-winkie/p/14768685.html
sleep(2)
driver.execute_script("document.getElementsByClassName('upload-pic')[0].click()")
sleep(2)
點擊完畢后,會出現文件選擇框。就可執行以下操作:
- 選擇文件需要用到pywinauto庫,先安裝pywinauto庫:pip3 install pywinauto;
安裝命令:pip install pywinauto
-
導入pywinauto.keyboard庫的send_keys方法【此處的send_keys方法和selenium的send_keys方法不一樣】
-
創建一個操作桌面窗口的對象 【此時可以形象的理解為這里創建了一個人,幫你操作】
-
叫這個對象切換窗口到這個文件上傳的選擇框
-
定位到文件路徑輸入框,click點擊它。Send_keys鍵入文件所在的路徑,回車輸入完畢
-
定位到文件名輸入框,type_keys鍵入文件名 【這里可以使用send_keys,但是要注意使用方法,最好還是用type_keys吧】
-
點擊打開,完成文件上傳
具體操作代碼如下
from pywinauto.keyboard import send_keys
# 使用pywinautoc創建一個操作桌面窗口的對象
win1 = pywinauto.Desktop()
# 選擇文件上傳的窗口 窗口句柄默認為‘打開’
bow1 = win1['打開']
# 選擇文件地址輸入框,點擊激活
bow1["Toolbar3"].click()
# 鍵盤輸入上傳文件的路徑
send_keys(r"文件的絕對路徑")
# 鍵盤輸入回車,打開該路徑
send_keys("{VK_RETURN}")
# 選中文件名輸入框,輸入文件名
bow1["文件名(&N):Edit"].type_keys("520告白日.jpg")
# bow1["文件名(&N):Edit"].click()
# send_keys("xx文件名")
# 點擊打開
bow1["打開(&O)"].click()