• (二十五)WebDriver API之上传文件


    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,

    这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

    上传文件

      上传文件是比较常见的Web功能之一,但WebDriver并没有提供专门用于上传的方法,如何实现上传操作关键在于上传文件的思路。

      一般Web页面的上传功能操作需要点击“上传”按钮后打开本地的Windows窗口。从窗口中选择本地文件进行上传。而WebDriver是无法操作Windows控件的,所以,对于初学者来说,一般思路会卡在如何识别Windows控件这个问题上。

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

      1、普通上传:普通的附件上传是将本地文件的路径作为一个值放在input标签中,通过from表单将这个值提交给服务器。

      2、插件上传:一般是指基于FlashJavaScriptAjax等技术所实现的上传功能。

      一、send_keys实现上传

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

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form>
            <input type="file" name="file" value="上传文件">
        </form>
    </body>
    </html>
    

      通过浏览器打开效果如下图:

    #普通上传文件
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    
    driver.get('C:\Users\86136\PycharmProjects\spider\updata_file.html')
    
    #定位上传按钮,上传本地文件
    driver.find_element_by_name('file').send_keys("d:\App_name.txt")

      效果展示:

     

      通过这种方法上传,就避免了操作Windows控件的步骤。如果找到上传的input标签,那么基本上就可以通过send_keys()方法向其输入一个文件地址来实施上传。

      二、AutoIt实现上传

      AutoIt目前最新版本是v3,它是一个使用类似BASIC脚本语言的免费软件,它被设计用来进行Windows GUI(图形用户界面)的自动化测试。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。

      官方网站:https://www.autoitscript.com/site

      从官网上下载AutoIt并安装,安装完成后,在菜单中会看到如下图所示的AutoIt菜单:

      AutoIt Windows info:用于识别Windows控件信息。

      Compile Script to.exe:用于将AutoIt生成exe执行脚本。

      Run Script:用于执行AutoIt脚本。

      SciTE Script Editor:用于编写AutoIt脚本。

      下面还是以操作上面的HTML代码为例,讲解AutoIt上传过程。

      1.首先打开AutoIt Windows info 工具,用鼠标单击Finder Tool,鼠标将变成一个小风扇形状的图标,如下图:

      

     打开后样子:

      

      按住鼠标左键,将其拖动到需要识别的控件上(如:“打开”按钮控件)如下图:

      

      文件名输入框的class为“Edit”,Instance为“1”,所以ClassnameNN为“Edit1”打开按钮class为“Button”,Instance为“1”,所以ClassnameNN为“Button1

      

      2.根据AutoIt Windows info所识别到的控件信息,打开SciTE Script Editor编辑器,编写AutoIt 脚本。输入以下脚本:

    ;ControlFocus("title","text",controlID) Editel=Edit instance 1
    ControlFocus("打开","","Edit1")
    
    ;wait 10 seconds for the Upload window to appear
    WinWait("[CLASS:#32770]","",10)
    
    ;Set the File name text on the Edit field
    ControlSetText("打开","","Edit1","d:App_name.txt")
    Sleep(2000)
    
    ;click on the open button
    ControlClick("打开","","Button1");

      ControlFocus()方法用于识别Windows窗口。WinWatit()方法设置10秒钟用于等待窗口的显示。ControlSetText()方法用于向“文件名”输入框内输入本地上传文件的路径。这里的Sleep()方法与python中的time模块提供的Sleep()方法用法一样,不过它是以毫秒为单位,Sleep(2000)表示固定休眠2000毫秒。ControlClick()用于单击上传窗口中的“打开”按钮。

      AutoIt 的脚本已经写好了,可以通过菜单栏“Tools>Go”(或F5)来运行脚本。  

      

      注意:在运行时长传窗口应处于打开状态。 

      3.运行脚本正常,将其保存为file.au3文件。这里保存的脚本可以通过Run Script工具将其打开运行,但我们的目的是希望这个脚本被python程序调用,name就需要将其生成为exe程序。打开Compile Script to.exe工具,将其生成为exe可执行文件,如下图:

      

      单击Browse”按钮,选择file.au3文件,单击“Convert”按钮将其生成为file.exe程序。

      4.接下来通过自动化测试脚本调用file.exe程序,实现上传。

    rom selenium import webdriver
    import os
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    
    #打开上传功能页面
    driver.get('C:\Users\86136\PycharmProjects\spider\updata_file.html')
    
    #单击打开上传窗口
    driver.find_element_by_name('file').click()
    
    #调用file.exe上传程序
    os.system("d:\file.exe")

      通过system()方法可以调用并执行file.exe程序。

      虽然这种方式可以解决文件上传(或文件下载)的操作问题,但笔者不太推荐这种解决方案,因为通过python调用的exe程序并不在python的可控范围内。换句话说,exe执行多长时间,执行是否出错,python程序都无法得知。

  • 相关阅读:
    魅族17系列真机谍照泄露 前摄挖孔将添新功能
    联想在S规则债券市场完成了里程碑式的新债券发行
    王小二切饼、马拦过河卒
    Codeforces Round #561 (Div. 2) A Tale of Two Lands 【二分】
    19年省赛后总结
    Winner Winner【模拟、位运算】
    GCDLCM 【米勒_拉宾素数检验 (判断大素数)】
    Floating-Point Hazard【求导公式】
    Communication【floyd判环+并查集】
    Largest Allowed Area【模拟+二分】
  • 原文地址:https://www.cnblogs.com/lirongyang/p/11459684.html
Copyright © 2020-2023  润新知