zoukankan      html  css  js  c++  java
  • selenium-Python之上传文件

    对于web 页面的上传功能实现一般有一下两种方式

    • 普通上传:普通的附件上传是将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器
    • 插件上传:一般是指基于flash、javascript或者Ajax等技术所实现的上传功能
    • 我们要区分出上传按钮的种类,大体上可以分为两种,一种是input框,另外一种就比较复杂,通过js、flash等实现,标签非input

    1.input标签

    input标签是可以直接send_keys的,

    对于通过input标签实现的上传功能,可以将其看做是一个输入框,即通过send_keys()指定本地文件路径的方式先实现文件上传。

    代码如下

    # -*- coding: utf-8 -*-
    from selenium import webdriver
    import time
    driver = webdriver.Firefox()
    driver.get("http://sahitest.com/demo/php/fileUpload.htm")
    driver.find_element_by_id("file").send_keys(r"C:UsersfyrDesktop副本import(1).xls") # send_keys #文件上传按钮,添加本地文件
    time(3)

    实现的结果如下:

    2.非input()实现上传即Autolt实现上传

    Autolt目前版本是v3,它是一个使用类似BaseSic脚本语言的免费软件,它被设计用来运行WindowsGUI(图形用户界面)的自动化测试。它利用模拟键盘按键,鼠标移动和窗口控件的组合实现自动化任务。安装后会看到如图所示的控件

    1)首先打开AutoIt Windows Info工具,用鼠标单击Finder Tool,鼠标将变成一个一个风扇形状的图标。如图所示1,按住鼠标左键将其拖动到需要表示的控件上(“”文件名上)如图所示2

    如图二所示,查看Control对应的信息

     

    可以通过AutoIt Wiindows Info获得一下信息

     根据AutoIt Windows info 所识别的控件信息,打开SciTE Script Editor编辑器,编写AutoIt脚本。

    ;ControlFocus("title","text",controlId) Editl=Edit instance 1
    controlFocus("选择要加载的文件","","Editl")

    ;Wait 10 seconds for the Upload window to appear
    WinWait("[CLASS:#32770]","",10)

    ;Set the File name text on the Edit field
    ControlSetText("选择要加载的文件","","Edit","D:\upload_file.txt")
    Sleep(2000)
    ;Click on the Open button
    ControlClick("选择要加载的文件","","Button1")

    注:controlfocus()方法用于识别window()窗口。winwait()方法设置10秒种用于等待窗口的显示。controlSetText()方法用于向文件名输入框内输入本地上传文件的路径。Sleep()方法与Python中time模块提供的Sleep()方法用法一样,不过是以毫秒为单位,sleep(2000)表示固定休眠2000毫秒。ControlClick()用于单击上传窗口中的打开按钮。

     对于不是用input框实现上传的,可以用a标签,用div标签,用button标签,用object标签,但是无法通过直接在网页上处理掉这些上传,唯一的办法就是打开OS弹框,去处理弹框。

    大体可用以下几种解决方案:

    1.autoIT,借助外力去调用其生成的au3或者EXE文件。那

    2.Python pywin32库,识别对话框句柄,进而操作

    3.SendKey库

    4.keybd_event,跟3类似,不过是模拟按键,ctrl+a,ctrl+c, ctrl+v… 

  • 相关阅读:
    linux 磁盘挂载及查看磁盘
    【转】Linux 如何通过命令仅获取IP地址
    【转】CentOS 7 安装配置 NFS
    【转】利用virtualenv管理Python环境
    ssh 常用命令
    JavaScript 视频教程 收藏
    MySQL Json类型的数据处理
    Nhibernate + MySQL 类型映射
    ABP框架服务层的接口与实现(增删改查)
    ABP框架源码中的Linq扩展方法
  • 原文地址:https://www.cnblogs.com/fengyiru6369/p/7095763.html
Copyright © 2011-2022 走看看