menu
more_vert

selenium2之文件上传

作者:dayu

点击小相机后弹出文件上传窗口

技术分享

我们通过源码可以看出,这个"本地上传图片"的控件标签是input

技术分享

这时候我们可以直接使用seleniumAPI进行文件上传,代码实现如下:

#coding=utf-8
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("https://www.baidu.com/")
#点击百度首页小相机按钮
browser.find_element_by_class_name("soutu-btn").click()
#通过send_keys发送文件的绝对路径,文件在我本机的C盘目录下
browser.find_element_by_class_name("upload-pic").send_keys(r"C:\test.png")
#我们这里已经实现了文件上传,至于百度返回404不用管它

二、上传控件标签为非input

当控件标签非input时,这种情况我们不能直接使用上面的方法了,我们可以借助第三方工具:Autolt

AutoIt

AutoIt v3是一种免费BASIC-like脚本语言为Windows的GUI自动化设计和通用脚本。它使用的组合模拟键盘,鼠标移动和窗口/控制操纵,以自动化任务的方式不可能或可靠的与其他语言(如VBScript和SendKeys)。

现在已经出到v3.3版本,更多介绍可以到下面的官网查看。

下载地址:https://www.autoitscript.com/site/autoit/downloads/

技术分享

图2.1

通过图2.1的导引安装完后可以看到如下组件,图2.2

技术分享

图2.2

这几个组件的功能介绍:

AutoItWindowsInfo用于帮助我们识Windows控件信息。

CompileScriptto.exe用于将AutoIt生成exe执行文件。

RunScript用于执行AutoIt脚本。

SciTEScriptEditor用于编写AutoIt脚本。

1.通过AutoItWindowsInfo 获取我们要操作的对象,以火狐浏览器为例,因为每个浏览器弹出来的窗口名字可能不一样。如图2.3 和 图2.4

技术分享

图2.3

技术分享

图2.4

通过上面两个图AutoItWindowsInfo中Control页面 获得以下信息。

窗口的title为“文件上传”,标题的Class为“#32770”。

文件名输入框的class为“Edit”,Instance为“1”,ClassnameNN为“Edit1”。

打开按钮的class为“Button”,Instance为“1”,ClassnameNN为“Button1”。

技术分享技术分享

2.根据AutoItWindowsInfo所识别到的控件信息,接下来我们打开SciTEScriptEditor编辑器,编写脚本。

技术分享

;ControlFocus()方法用于识别Window窗口  
ControlFocus("文件上传", "","Edit1")  
  
; WinWait()设置1秒钟用于等待窗口的显示  
  WinWait("[CLASS:#32770]","",1)  
  
; ControlSetText()用于向“文件名”输入框内输入本地文件的路径,如果是在桌面第三个参数直接写文件名  
  ControlSetText("文件上传", "", "Edit1", "C:\selenium.png")  
  Sleep(1000)  
  
; ControlClick()用于点击上传窗口中的“打开”按钮  
  
  ControlClick("文件上传", "","Button1"); 

3.写好脚本之后我们可以在浏览器已经大家文件上传窗口的情况按F5运行,看看脚本效果,如下图

技术分享

图2.5

4.脚本运行正常,我们将它保存为upfile.au3文件,这里保存的脚本可以通过RunScript工具将其打开运行,但我们的目的是希望这个脚本被Python程序调用,那么就需要将其生成exe程序。打开CompileScriptto.exe工具,将其生成为exe可执行文件

技术分享

技术分享

5.生成了upfile.exe后,我们把它放在C盘根目录,我们再用python脚本实现借用它来上传文件:

#coding=utf-8
from selenium import webdriver
import os
browser = webdriver.Firefox()
browser.get("https://www.baidu.com/")
#点击百度首页小相机按钮
browser.find_element_by_class_name("soutu-btn").click()
#打开文件上传窗口
browser.find_element_by_class_name("upload-pic").click()
#调用upfile.exe实现文件上传
os.system(r"C:\upfile.exe")

用过os.system()方法可以进行调用,模拟在cmd里面输入:C:\upfile.exe

selenium2之文件上传

原文地址:http://www.cnblogs.com/FR-Long/p/7239919.html



Processed Time:0.19611287117004

_REQUEST:
Array
(
    [0] => read
    [1] => 94407
)
_SESSION:
Array
(
    [fid] => 4
)