文章目录
前言
本文将介绍在python中 实现自动上传文件的操作
方法一、使用Autolt生成exe文件,在Python中调用
AutoIt介绍及安装
AutoIt是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作,它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。
官方下载地址:https://www.autoitscript.com/site/
分别下载图中标记的 Autolt和Editor
解压后放在同一个文件夹内,并分别安装
定位元素插件的使用
Au3Info_x64为元素识别器,可通过拖动Finder Tool来定位元素
根据AutoIt Info所识别的控件信息,打开SciTE Script Editor编辑器(位置:SciTE文件夹中的SciTE.exe)
编写脚本
编写脚本输入如下内容,并保存文件为FileUpload.au3
代码如下(示例):
;识别文件上传弹出窗口
ControlFocus("打开", "","Edit1")
;等待10秒钟,等待上传窗口出现
WinWait("[CLASS:#32770]", "",10)
;设置需要上传的文件路径到文件名输入框中
ControlSetText("打开", "", "Edit1", "C:\Users\User\Desktop\测试图片\3.jpg")
Sleep(2000)
;点击打开按钮
ControlClick("打开", "", "Button1");
将脚本转换成可执行文件
脚本写好后,在AutoIt3\SciTE目录中,点击SciTE.exe文件,然后Tools->Go,运行脚本,这一步用来测试脚本是否正常。需要注意,运行之前需要先打开上传文件的窗口。
脚本运行正常后,打开AutoIt3\Aut2Exe文件夹中的Aut2exe_x64.exe工具,将脚本转换成可执行文件,如下图。此可执行文件可被python程序调用
python代码
代码如下(示例):
import os
import time
def file_upload_autolt(filepath): # 方法1:借助Autolt工具
'''
:param filepath: 需要上传文件的路径
:return: None
'''
time.sleep(3)
os.system(filepath)
time.sleep(3)
在python中调用
代码如下(示例):
self.file_upload_autolt(r'D:\auto\radar\unit\FileUpload.exe') # 注意,这里上传的是exe文件的位置,而不是图片的位置
方法二、使用Python的pywin32库+WinSpy工具,识别对话框句柄
python中安装库并导入
代码如下(示例):
# 安装库
pip install pywin32
# 导入库
import win32gui
import win32con
windows安装WinSpy工具
该工具用于定位窗口元素拿到Class值
工具百度网盘提取:
https://pan.baidu.com/s/1DRX3m8Xa0iHSzKXH25PMRw 79gt
python代码
代码如下(示例):
def file_upload_winspy(title,filepath): # 方法2:借助Winspy工具
'''
:param title: 打开上传文件的窗口名称,不同浏览器的名称不同
:param filepath: 需要上传文件的路径
:return: None
'''
time.sleep(3)
# 一级窗口,即弹出的windows页面
dialog = win32gui.FindWindow("#32770", title)
# 打开窗口,地址栏输入框
ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)
# 文件名输入框后方的图片格式下拉框
comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None)
# 文件名输入框的class元素为Edit,无文本内容,所以第四个参数为None
edit = win32gui.FindWindowEx(comboBox, 0, 'Edit', None)
# 打开按钮的class元素为Button,文本为打开(&O)
button = win32gui.FindWindowEx(dialog, 0, 'Button', "打开(&O)")
# 输入文件的绝对路径
win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)
# 点击 打开 按钮
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 点击打开按钮
time.sleep(3)
总结
以上两种方式均可实现上传文件的操作,根据个人喜好使用即可