非input框的自動化文件上傳方法


關於非input框的自動化文件上傳方法

(此處用百度的上傳圖片搜索做演示)

使用第三方庫pywinauto (適用於window端)

首先創建driver對象用於打開百度網址,然后定位並點擊照相機圖標

非input框的自動化文件上傳1

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()

接着點擊“選擇文件” 按鈕

非input框的自動化文件上傳2

注意:此時不能用selenium自帶的click方法,可能是瀏覽器驅動cookie過期,所以無法做到驅動打開window的文件窗口,然后無法click,會出現報錯。

driver.find_element_by_class_name('upload-pic').click() 

非input框的自動化文件上傳3

這時候就可以用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)  

點擊完畢后,會出現文件選擇框。就可執行以下操作:

  1. 選擇文件需要用到pywinauto庫,先安裝pywinauto庫:pip3 install pywinauto;

安裝命令:pip install pywinauto

  1. 導入pywinauto.keyboard庫的send_keys方法【此處的send_keys方法和selenium的send_keys方法不一樣】

  2. 創建一個操作桌面窗口的對象 【此時可以形象的理解為這里創建了一個人,幫你操作】

  3. 叫這個對象切換窗口到這個文件上傳的選擇框

  4. 定位到文件路徑輸入框,click點擊它。Send_keys鍵入文件所在的路徑,回車輸入完畢

  5. 定位到文件名輸入框,type_keys鍵入文件名 【這里可以使用send_keys,但是要注意使用方法,最好還是用type_keys吧】

  6. 點擊打開,完成文件上傳

非input框的自動化文件上傳4

具體操作代碼如下

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() 


免責聲明!

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



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