基于python的selenium两种文件上传操作

方法一、input标签上传

    如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径,这里不做过多赘述,前文有相关操作方法。

方法二、非input标签上传

这种上传方式需要借助第三方工具,主要有以下三种情况:

1.AutoIt  去调用它生成的au3或者exe格式的文件

2.SendKeys第三方库(目前只支持到2.7版本)

  网址:https://pypi.python.org/pypi/SendKeys

3.Python的pywin32库,通过识别对话框句柄来进行操作

pywin32库的安装因为文件较大,建议使用豆瓣源直接pip安装:

pip install -i https://pypi.douban.com/simple pywin32

前两种在这里不考虑,只采用第三种方法即可,使用之前可以借助工具winspy来辅助定位,winspy下载地址:https://sourceforge.net/projects/winspyex/

winspy工具的定位方法采用的是绝对路径定位,即根路径为点击上传按钮后的弹出框的整个窗口页面,一般根据Text文本值和Class属性来定位,如图所示:

根路径如图所示,它的Text文本值为“打开”,Class属性值为“#32770”。

在winspy工具左上角有个聚焦按钮,通过拖动的方式拖动到上传弹出框的对应位置(如文件路径输入框)后松开,winspy界面会显示当前定位的Text文本值(此处为空)和Class属性值(Edit),在windows的窗口下,Parent属性的值中,括号里面的就表示它上一层元素的Class属性值,可以通过点击Parent属性值跳到上一层元素,最终我们定位到文件路径输入框的Class属性路径为:Edit - combox - comboBoxEx32 - #32770。

那么同理,“打开”按钮通过同样的绝对路径方式定位,得到它的Class属性路径为:button - #32770。

通过借助winspy工具定位出了对应元素的路径,就可以通过pywin32库来实现上传操作啦!

pywin32的实现步骤为:

1、找到绝对路径输入框和“打开”按钮的元素;

2、输入绝对路径,点击打开

    在页面实现的前提条件为 :windows上传窗口已经出现,可以sleep1~2秒等待上传的弹框出现。

import win32gui
import win32con

def upload(filePath, browser_type="chrome"):
    ‘‘‘
    通过pywin32模块实现文件上传的操作
    :param filePath: 文件的绝对路径
    :param browser_type: 浏览器类型(默认值为chrome)
    :return:
    ‘‘‘
    if browser_type == "chrome":
        title = "打开"
    else:
        title = ""  # 这里根据不同浏览器类型来修改

    # 找元素
    # 一级窗口"#32770","打开"
    dialog = win32gui.FindWindow("#32770", title)
    # 向下传递
    ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)  # 二级
    comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None)   # 三级
    # 编辑按钮
    edit = win32gui.FindWindowEx(comboBox, 0, ‘Edit‘, None)  # 四级
    # 打开按钮
    button = win32gui.FindWindowEx(dialog, 0, ‘Button‘, "打开(&O)")  # 二级

    # 输入文件的绝对路径,点击“打开”按钮
    win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filePath)  # 发送文件路径
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 点击打开按钮

原文地址:https://www.cnblogs.com/xiaogongjin/p/11546518.html

时间: 2024-12-13 22:06:48

基于python的selenium两种文件上传操作的相关文章

Spring Boot + Vue 前后端分离,两种文件上传方式总结

在Vue.js 中,如果网络请求使用 axios ,并且使用了 ElementUI 库,那么一般来说,文件上传有两种不同的实现方案: 通过 Ajax 实现文件上传 通过 ElementUI 里边的 Upload 组件实现文件上传 两种方案,各有优缺点,我们分别来看. 准备工作 首先我们需要一点点准备工作,就是在后端提供一个文件上传接口,这是一个普通的 Spring Boot 项目,如下: SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/

两种文件上传的实现-Ajax和form+iframe

话说现在很多很多项目需要用到文件上传,自从有了HTML5之后,上传就变的超级简单了.HTML5支持多图片上传,而且支持ajax上传,而且支持上传之前图片的预览,而且支持图片拖拽上传,而且还是纯粹利用file控件实现,JS代码寥寥,想不让人称赞都难啊! HTML5Ajax上传 html5的上传实现,是需要file控件以及XMLHttpRequest请求.下面是我封装的一个上传插件: function fileUpload(options) { var opts = options || {}; v

两种方法上传本地文件到github(转)

自从使用github以来,一直都是在github网站在线上传文件到仓库中,但是有时因为网络或者电脑的原因上传失败.最重要的原因是我习惯本地编辑,完成以后再一起上传github.看过了几个教程,总结出最适合自己的比较简单的方法. 两种方法上传本地文件到github 1. github在线上传文件夹 在线上传也可以上传完整的文件夹结构,直接拖拽到上传文件页面的框中即可. 1.1点击上传文件 点击上传 1.2 直接拖拽 直接拖拽即可上传文件夹及文件夹里面的文件.如果点击 choose your fil

python写个简单的文件上传是有多难,要么那么复杂,要么各种,,,老子来写个简单的

def upload(url,params): ''' 上传文件到服务器,不适合大文件 @params url 你懂的 @params {"action":"xxx","@file","file_path"} 普通参数 key:value 文件key头部加@ ''' import os import urllib2 BOUNDARY = "0450de9528f040078csuxianbaozic06"

python-selenium -- 文件上传操作

一.文件上传操作 win32gui.FindWindow(IPClassName,IPWindowName) 自顶层窗口开始寻找匹配条件的窗口,并返回这个窗口的句柄: IPClassName:类名,在Spy++里能够看到: IPWindowName:窗口名,标题栏上能看到的名字 win32gui.FindWindowEx(hwndParent=0,hwndChildAfter=0,IPszClassName=None,IPszWindowName=None) 搜索类名和窗体名匹配的窗体,并返回这

PHP多文件上传操作

在前一篇文章里讲到了关于PHP文件上传原理和简单操作举例是单文件上传. http://www.cnblogs.com/lichenwei/p/3879566.html 其实多文件上传和单文件上传大同小异,原理都是一样的,只是在代码上做了点小技巧. 首先还是index.html上传表单,只是把之前上传文件表单里的file更改成了file[] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht

利用Selenium实现图片文件上传的两种方式介绍

在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当开发直接使用file类型的input实现图片文件的上传时,实例:<input type="file" name=''filename"> 我们可以直接利用Selenium提供的方法实现文件上传,但是因为依赖开发的实现,而且目前实现基本都会利用框架,所以这种实现方式有很

python+selenium+autoit实现文件上传

问题 在做web端ui层自动化的时候会碰到文件上传的操作,经常有朋友问到,这里总结一下 解决方案 第一种:type=file的上传文件,类似如下的 使用类似这样的代码就可以完成: driver.find_element('name','file').send_keys('./小强测试品牌.png') 第二种:就是第一种除外的,实现起来较为麻烦,这里用到了autoit,大致步骤如下: 1.下载并安装autoit,之后在开始菜单可以看到如下 AutoIt Windows Info 用于识别Windo

.NET两种常见上传下载文件方法

1.FTP模式 代码如下: (1)浏览 /// <summary> /// 浏览文件 /// </summary> /// <param name="tbControl">控件名称</param> private void ViewFile(TextBox tbControl) { OpenFileDialog openFileDialogTemp = new OpenFileDialog();//提示用户打开文件弹窗 //设置文件类型