Believe in yourself.

Selenium 文件上传

在WEB页面上上传文件一般有以下两种方式:

  • 普通上传:将本地文件的路径作为一个值放在input标签中,通过表单将这个值提交给服务器。
  • 插件上传:基于前端技术,如Flash,JavaScript实现的上传。

一、普通上传


 

就以博客园个人资料中的上传头像为例:

代码:

# coding = utf-8
from selenium import webdriver
from time import sleep
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 个人资料路径
user_data_dir = r'--user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data'
# 加载浏览器配置数据
option = webdriver.ChromeOptions()
option.add_argument(user_data_dir)
# 启动浏览器
driver = webdriver.Chrome(chrome_options=option, executable_path=driverfile_path)
driver.get(r'https://upload.cnblogs.com/avatar/crop')
driver.implicitly_wait(20)
# 定位上传图片按钮,通过send_keys()方法提交图片地址
driver.find_element_by_css_selector("input[name='file']").send_keys(r"C:\Users\Administrator\Desktop\tx.png")
# 退出
sleep(5)
driver.quit()

二、插件上传


 

对于有些上传,点击上传后,弹出的是一个控件

这种就没法通过普通上传的那种方式去提交图片路径了。必须的借助第三方工具AutoIt来解决了。

登录官网下载:https://www.autoitscript.com/site/autoit/downloads/

下载完成后安装。

安装好了之后在程序中可以找到AutoIt

  • AutoIt Windows Info: 识别Windows控件信息。
  • Compile Script to.exe: 将AutoIt生成 exe 执行文件。
  • Run Script: 执行AutoIt脚本。
  • SciTE Script Editor:  AutoIt脚本编辑器

1、打开AutoIt Windows Info工具,鼠标点击Finder Tool,鼠标将变成一个小风扇形状的图标,按住鼠标左键拖动到需要识别的控件上。

通过AutoIt Windows Info工具获得以下信息:

  • 窗口的Title为“选择要上载的文件,通过: 172.21.13.83”,Class为“#32770”
  • 文件名的输入框的Class为"Edit",Instance为"1",ClassnameNN为"Edit1”
  • 打开按钮的Class为“Button”,Instance为"2",ClassnameNN为"Button2”

2、打开SciTE Script Editor编辑器,根据获得的信息编写脚本

;ControlFocus()方法用于识别Window窗口
ControlFocus("选择要上载的文件,通过: 172.21.13.83", "","Edit1")

; WinWait()设置1秒钟用于等待窗口的显示
  WinWait("[CLASS:#32770]","",1)

; ControlSetText()用于向“文件名”输入框内输入本地文件的路径,如果是在桌面第三个参数直接写文件名
  ControlSetText("选择要上载的文件,通过: 172.21.13.83", "", "Edit1", "C:\Users\Administrator\Desktop\ADI.xml")
  Sleep(1000)

; ControlClick()用于点击上传窗口中的“打开”按钮

  ControlClick("选择要上载的文件,通过: 172.21.13.83", "","Button2");

脚本写好后,可以通过菜单栏“Tools”-->“Go” (或按键盘F5)来运行脚本!注意在运行时上传窗口当前处于打开状态。

脚本运行正常,保存为upfile.au3

3、Compile Script to.exe工具,将其生成为exe可执行文件

4、通过Python调用upfile.exe程序实现上传

代码:

# coding = utf-8
import os
from selenium import webdriver
from time import sleep
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\IEDriverServer.exe'
# 启动浏览器
driver = webdriver.Ie(executable_path=driverfile_path)
driver.get(r'http://172.21.13.83:28080/')
driver.implicitly_wait(20)
# 登录
driver.find_element_by_css_selector("input[name='admin.loginName']").send_keys("autotest")
driver.find_element_by_css_selector("input[name='admin.password']").send_keys("111111")
driver.find_element_by_css_selector("input#imageField").click()
driver.switch_to.frame("leftFrame")
driver.find_element_by_link_text("媒资编辑").click()
driver.switch_to.default_content()
driver.switch_to.frame("mainFrame")
driver.find_element_by_link_text("导入").click()
driver.switch_to.frame("framelist")
driver.find_element_by_css_selector("#demo-browse").click()
# 通过os模块调用可执行文件
os.system(r"C:\Users\Administrator\Desktop\upfile.exe")
driver.find_element_by_css_selector("a#demo-upload").click()
sleep(3)
driver.find_element_by_css_selector("input#closeButton").click()
# 退出
driver.quit()

 

posted @ 2018-05-30 10:58  eastonliu  阅读(300)  评论(0编辑  收藏  举报