zoukankan      html  css  js  c++  java
  • Selenium 文件上传

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

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

    一、普通上传


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

    代码:

    # coding = utf-8
    from selenium import webdriver
    from time import sleep
    # 驱动文件路径
    driverfile_path = r'D:coshipTest_Frameworkdriverschromedriver.exe'
    # 个人资料路径
    user_data_dir = r'--user-data-dir=C:UsersAdministratorAppDataLocalGoogleChromeUser 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:UsersAdministratorDesktop	x.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:UsersAdministratorDesktopADI.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:coshipTest_FrameworkdriversIEDriverServer.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:UsersAdministratorDesktopupfile.exe")
    driver.find_element_by_css_selector("a#demo-upload").click()
    sleep(3)
    driver.find_element_by_css_selector("input#closeButton").click()
    # 退出
    driver.quit()
  • 相关阅读:
    [导入]流失
    [导入]喜欢与爱
    [导入]毕业的大学生的100条忠告
    sql 实现从右边查询制定字符出现的位置
    [导入]毕业了
    gridview 实现多字段综合查询
    Java实现图片添加水印文字(左右下角)
    python安装win32api pywin32 后出现 ImportError: DLL load failed
    Asp.net mvc 速度优化 关注Yslow(1)
    WPF 3D中如何选择模型的一部分并维护模型
  • 原文地址:https://www.cnblogs.com/eastonliu/p/9107466.html
Copyright © 2011-2022 走看看