selenium中文件的上传

第一种情况

input标签

input标签可以直接使用send_keys(文件地址)上传文件

示例:

el = driver.find_element_by_id(‘fileid’)

el.send_keys(r"F:\Python\testcase.txt")

第二种情况

非input标签(如a标签,div标签,button标签等),无法通过selenium解决,面对系统弹出框,需要找到能调用系统api操作。以下介绍使用autoit工具解决。
autoit工具下载地址:https://www.autoitscript.com/site/autoit/downloads/

解决思路如下:

a. 识别使用aotoit工具对上传文件弹框的文件名输入框和上传按钮进行定位,取出文件名输入框和上传按钮的classname

b. 打开SciTE Script Editor,根据步骤a取出的classname编写、修改脚本,生成的文件格式为.au3

c. 打开Compile Script to.exe(64)即Auto2Exe v3 将.au3文件转换成.exe文件

d. os.system(r"C:\upfile.exe")【此代码要在打开文件上传弹出框后,目的是让文件上传弹出框为当前窗口】

第一步、识别Windows控件的信息(AutoIt Windows Info)

主要识别两个信息,一个是文件名输入框,另一个是打开按钮

在这里插入图片描述

在这里插入图片描述

第二步、编写AutoIt脚本(SciTE Script Editor)

ControlFocus("文件上传","","Edit1");
WinWait("[CLASS:#32770]","",10)
ControlSetText("文件上传","","Edit1","D:\picture.PNG");
Sleep(2000);
ControlClick("文件上传","","Button1");

在打开上传框后,先将文档保存,不保存是不能Go的,保存的格式也是默认的.au3。保存后Tools–Go。看看效果。
注意:每个浏览器的Title是不一样的,火狐的是“文件上传”,chrome是“打开”。需要具体问题具体分析。。

第三步、生成exe执行文件(Compile Script to.exe)

在这里插入图片描述

将刚刚保存的au3生成exe文件

第四步、通过selenium调用这个生成好的exe文件去执行自动上传啦。定位到上传按钮,然后.click()进行点击,接下来就是调用了,具体语句如下:

upload = driver.find_element_by_xpath("//div[@id='picker']/div[2]/label")
upload.click()
os.system("C:\\Users\admin\Desktop\Autolt3\ptest.exe")

批量上传

autolt3参数化可以用$CmdLine[1]变量来代替,1表示的是第一个参数,只需要在脚本中把路径换成这个变量就好:

ControlFocus("文件上传","","Edit1");
WinWait("[CLASS:#32770]","",10);
ControlSetText("文件上传","","Edit1",$CmdLine[1]);
Sleep(2000);
ControlClick("文件上传","","Button1");
for i in range(3):
	upload = driver.find_element_by_xpath("//div[@id='picker']/div[2]/label")
	upload.click()
	file_path = "D:\\%s.png" %i
	os.system("C:\\Users\zhangchao\Desktop\Autolt3\parameterFirefox.exe %s" %file_path)
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页