非input框的自动化文件上传方法
非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()
标签:
自动化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义