非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() 
posted @   winkie  阅读(662)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示