前言

关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素)。autoit工具处理windows的控件窗口是专业的,所以这个需借助AutoIt来解决了。

一、环境准备

1.可以autoit官网上下载,安装 http://www.autoitscript.com/site/

2.下载到本地后傻瓜式安装,安装完之后在应用程序找到这个Autoit v3

3.AutoIt里面几个菜单功能介绍:

  • SciTE Script Editor 编辑器,在这里编写AutoIt脚本
  • AutoIt Windows Info 元素定位器,用于识Windows控件信息
  • Run Script 执行AutoIt脚本
  • Compile Script to.exe 将AutoIt生成 .exe 可执行文件

4.autoit 在线文档,是中文版http://www.autoitx.com/Doc/

二、脚本实现

1.先准备好web页面的环境,以博客园的上传图片为例:新建博客>点图片上传>上传本地图片>弹出选择图片界面,在这里不要动了

2.打开 SciTE Script Editor编辑器,开始写脚本,代码非常简单只有四行

WinActivate("文件上传");
ControlSetText("文件上传", "", "Edit1", "D:\1.png" ); Sleep(2000); ControlClick("文件上传", "", "Button1");

3.编辑完成后执行,tools>go ;或者按f5执行,执行完之后就能看到图片上传成功了。

4.autoit几个常用的语法

  • WinActivate("title") 聚焦到指定活动窗口
  • ControlFocus ( "title", "窗口文本", controlID) 设置输入焦点到指定窗口的某个控件上;
  • WinWait ( "title" , "窗口文本" , 超时时间 ) 暂停脚本的执行直至指定窗口存在(出现)为止;
  • ControlSetText ( "title", "窗口文本", controlID, "新文本" ) 修改指定控件的文本;
  • Sleep ( 延迟 ) 使脚本暂停指定时间,单位是毫秒;
  • ControlClick ( "title", "窗口文本", 控件ID , 按钮 , 点击次数 ) 向指定控件发送鼠标点击命令;

四、元素定位

1.Find Tool 查看元素属性,用鼠标按住Find Tool下的图标,然后拖拽到你想定位的元素上

2.查看title,title即AutoIt Window Info识别出的Title字段

3.查看controlID,controlID即AutoIt Window Info识别出的Class和Instance的拼接

如这里的“打开”按钮的Class属性是Button,Instance属性是1,那么controlID属性就是Button1

五、导出为exe文件

1.第三步执行成功后,先把脚本保存到本地

2.在应用程序里面找到打开Compile Script to.exe工具,将刚才导出的.au3文件转化成.exe文件

3.为了验证这个生成的.exe文件是有效的,先在cmd去执行一次

直接把生成的这个.exe文件拽到cmd里面,回车就能执行了

六、python执行

1.把上传文件的动作已经弄成了一个.exe的文件了,接下来用python去执行这个.exe文件就能实现文件上传了

python调用dos,用这个方法os.system("需执行的指令")

# coding:utf-8
from selenium import webdriver import time import os # 加载配置文件实现免登录 profileDir = r'C:\Users\Gloria\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default' # 你自己电脑的配置文件路径,不要抄我的 profile = webdriver.FirefoxProfile(profileDir) driver = webdriver.Firefox(profile) driver.implicitly_wait(30) driver.get("http://www.cnblogs.com/yoyoketang/") driver.find_element_by_link_text("新随笔").click() time.sleep(3) # 点开编辑器图片 driver.find_element_by_css_selector("img.mceIcon").click() time.sleep(3) # 定位所有iframe,取第二个 iframe = driver.find_elements_by_tag_name('iframe')[1] # 切换到iframe上 driver.switch_to_frame(iframe) # 点开文件上传按钮 driver.find_element_by_name('file').click() # 执行autoit上传文件 os.system("C:\Users\Gloria\Desktop\sendjpg.exe") # 你自己本地的这个.exe文件绝对路径

七、autoit命令行参数

1.上面打包的exe文件把上传文件的路径给写死了,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片,这样就需要参数化文件路径了。
想要参数化传入的参数,可以通过autoit的命令行参数:

    myProg.exe param1 “This is a string parameter” 99

在脚本中,可用以下变量获取命令行参数:

$CmdLine[0] ; = 3
$CmdLine[1] ; = param1 $CmdLine[2] ; = "This is a string parameter" $CmdLine[3] ; = 99 $CmdLineRaw ; = 'param1 "This is a string parameter" 99'

$CmdLine[0] 获取的是命令行参数的总数,在上例中$CmdLine[0]=3
$CmdLine[1]~$CmdLine[63] 获取的是命令行参数第1到第63位,这个方式最多只能获取63个参数,不过正常情况下是足够用的
$CmdLineRaw 获取的是未拆分的所有参数,是一个长字符串,这种情况下不局限与63个参数

WinActivate("文件上传");
ControlSetText("文件上传", "", "Edit1", $CmdLine[1] ); Sleep(2000); ControlClick("文件上传", "", "Button1");

2.问题来了,如果想批量上传图片,又如何实现呢??参数化后是不是so easy了。

转载于:https://www.cnblogs.com/caoj/p/7815379.html

selenium+python自动化77-autoit文件上传【转载】相关推荐

  1. 登峰造极的python requests完成接口文件上传的案例

    这篇文章主要介绍了python requests完成接口文件上传的案例,具有很好的参考价值,希望对大家有所帮助.一起跟随北凡过来看看吧 最近在准备一个公开课,主题就是利用不同的语言和不同的工具去实现文 ...

  2. python上传文件到windows_python自动化-WinSpy+pywin32文件上传操作

    '''百度首页搜索上传图片为例''' #前提条件 1.使用winspy定位绝对路径 #前提条件 2.安装库pywin32 采用pip安装pip install pywin32 或其他途径安装 #1.访 ...

  3. selenium autoit java_Selenium怎么优化AutoIT文件上传?

    Selenium优化文件上传 Selenium的文件上传是有缺陷的,只能支持Input标签上传.这是Selenium的硬伤,但是我们想到了用AutoIT的方式解决了这个问题.但是autoIT使用起来太 ...

  4. python 文件上传 web_pythonweb自动化三种文件上传方法

    文件上传三种方式: (一)查看元素标签,如果是input,则可以参照文本框输入的形式进行文件上传 方法:和用户输入是一样的,使用send_keys 步骤:1.找到定位元素,2,输入文件路径 ele=d ...

  5. Python + Paramiko实现sftp文件上传下载

    最近在测试服务器那块,看了下Paramiko模块,一直都是用FileZilla工具,想了想,持续集成,更新代码可以用Parmmiko完成,还是不错的 Paramiko是用python语言写的一个模块, ...

  6. python bootstrap-fileinput示例_文件上传控件bootstrap-fileinput的使用

    一.准备 1.插件下载地址:https://github.com/kartik-v/bootstrap-fileinput/ 下载后的压缩包解压文件夹内容如下: js:插件核心js代码,引用filei ...

  7. 用fme和Python-selenium模块实现网站表格批量自动化录入和文件上传

    目录 前言 一.selenium是什么? 二.需要配置环境 1.fme 2.python需要的模块(selenium,pywin32) 3.需要安装的浏览器已经对应版本的浏览器驱动 三.项目实战 1. ...

  8. python自动化中附件如何上传

    python中附件的上传会使用pywinauto库来实现附件的上传 pywinauto的安装: 在dos窗口中执行pip install pywinauto来进行安装 文件的上传代码实现 import ...

  9. python网页开发实现本地上传_树莓派 python 如何将本地文件上传到指定的服务器页面上...

    展开全部 以下是单个文件的,不2113确定你的文件夹是什么意5261思,4102可以压缩下再上传(方1653法一样,调用zip命令) 我的实现方法:调用终端的curl,以下为代码平片段,实现的功能是上 ...

  10. web自动化文件上传--Pywin32库和WinSpy工具

    一.前言 在做web自动化,遇见上传文件一般有两种情况: 1.如果是input可以直接输入路径的,那么直接调用send_keys输入路径. 2.非input标签的上传,则需要借助第三发工具.如Pywi ...

最新文章

  1. 在Eclipse中搭建Python开发环境之三新建python 提示django not found
  2. 如何使用 tf object detection
  3. 【UI/UX】桌面GUI设计
  4. 关于读入带空格的字符串与输入输出重定向
  5. 程序员面试金典——18.12最大和子矩阵
  6. html5播放flv
  7. 免费的录屏软件Capture
  8. 操作系统:磁盘调度实验之扫描和循环扫描调度算法(含源码和文档)
  9. Comsol Multiphysics安装步骤详解
  10. android强制开启深色模式bug,强制深色模式软件
  11. 《MonoIndoor:Towards Good Practice of Self-Supervised Monocular Depth Estimation...》论文笔记
  12. chrome主页和新标签页被金山毒霸劫持 处理方法
  13. 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制
  14. 总线(四)Modbus总线 协议
  15. Codeforces Round #540 (Div. 3) D. Coffee and Coursework 二分
  16. 震惊,中国历朝历代疆域变迁视频【高清】
  17. 实例:爬取豆瓣评论、绘制词云图以及情感分析——以《长津湖》为例
  18. 零基础小白必备PS抠图技巧
  19. windows平台下VSCode通过跳板机连接服务器
  20. 捷径系统-健身房管理系统怎么选择?

热门文章

  1. Quartz - 集群Cluster的配置、failOver原理
  2. Oppo市场认领应用之OppoSignVerify.apk签名流程
  3. execution_character_set报warning: unknown pragma ignored
  4. 服务器虚拟主机划分,服务器划分多少个虚拟主机
  5. 13.数据结构:二分搜索树
  6. mongodb 客户端连接服务器
  7. Tableau表格取消合并单元格
  8. WAP2.0手机网站的开发
  9. 怀旧服服务器队列位置波动,《魔兽世界》怀旧服刚开服就被挤爆 大量玩家疯狂涌入...
  10. 骨传导蓝牙耳机哪个好,性价比最高的骨传导耳机