• 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()
  • 相关阅读:
    H5中https://j.map.baidu.com/e7/M6hJ的地址是如何生成的
    转义符
    vue-json-excel导出数字字符串转为科学计数法问题和文件格式问题
    高级JavaScript(4)RegExp,正则表达式
    js7种数据类型
    gulp自动化打包及静态文件自动添加版本号
    解决——CSS :before、:after ,当content使用中文时有时候会出现乱码
    【移动端】移动端点击可点击元素时,出现蓝色默认背景色
    我去!爬虫遇到字体反爬,哭了
    实战|教你用Python玩转Mysql
  • 原文地址:https://www.cnblogs.com/eastonliu/p/9107466.html
Copyright © 2020-2023  润新知