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… 

  • 相关阅读:
    MVC ORM 架构
    Kubernetes 第八章 Pod 控制器
    Kubernetes 第七章 Configure Liveness and Readiness Probes
    Kubernetes 第六章 pod 资源对象
    Kubernetes 第五章 YAML
    Kubernetes 核心组件
    Kubernetes 架构原理
    Kubernetes 第四章 kubectl
    Kubernetes 第三章 kubeadm
    yum 配置及yum 源配置
  • 原文地址:https://www.cnblogs.com/fengyiru6369/p/7095763.html
Copyright © 2011-2022 走看看