之前和大家说了input标签的上传文件的方式:

《selenium2 python 自动化测试实战》(13)——上传文件

现在好多网站上传的标签并不是input,而是div之类的比如:

全部都是div标签,这时候用上面的方法就不好用了。今天船长在大神的帮助下学会了两种方法,现在船长来教大家上传div这种标签的方式。

最方便的——SendKeys

大家只需要pip install SendKeys库,然后再代码里直接用就OK了,这里用大鱼号上传视频作为例子上代码:

注意,浏览器用的是火狐,因为chrome浏览器会不支持哦~

  1. # coding: utf-8
  2. from selenium import webdriver
    from time import sleep
    import SendKeys
  3. # options = webdriver.ChromeOptions()
    # options.add_argument('disable-infobars')
    # d = webdriver.Chrome(chrome_options=options)
    d = webdriver.Firefox()
  4. d.get("https://mp.dayu.com")
    # cookie登录,跳过验证码
    d.add_cookie({'name': 'cna',
                 'value': 'fhSvgLVKF3Gz1',
                 'domain': '.dayu.com'})
  5. d.add_cookie({'name': 'isg',
                 'value': 'BIaGbW7sWwBT6-_W8K5',
                 'domain': '.dayu.com'})
  6. d.add_cookie({'domain': 'mp.dayu.com',
                 'name': 'USER_TMP',
                 'value': 'tuAaJfSa8AaxABk'})
  7. sleep(3)
  8. d.refresh()
  9. sleep(2)
  10. d.find_element_by_xpath("/html/body/div/div/div[1]/ul/li[2]/ul/li[2]/a/span").click()
  11. sleep(5)
  12. d.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[2]/div/div/div/div/div[2]/div[1]/div[1]').click()
  13. SendKeys.SendKeys(r'C:\Users\DELL\Desktop\vid.mp4')
  14. sleep(2)
  15. SendKeys.SendKeys("{ENTER}")
                 

第二种方法:win32gui

这种方法有点麻烦,而且下载库的时候非常麻烦……

要安装

1、pywin32-218.win-amd64-py2.7.exe

2、pypiwin32

下载好这两个库以后,就可以上代码啦:

  1. # coding: utf-8
  2. import win32gui
    import win32api
    import win32con
    from selenium import webdriver
    from time import sleep
  3. # options = webdriver.ChromeOptions()
    # options.add_argument('disable-infobars')
    # d = webdriver.Chrome(chrome_options=options)
  4. d = webdriver.Firefox()
  5. d.get("https://mp.dayu.com")
  6. d.add_cookie({'name': 'cna',
                 'value': 'fhW6ElaKVKF3Gz1',
                 'domain': '.dayu.com'})
  7. d.add_cookie({'name': 'isg',
                 'value': 'BIaGbW7sIPskIv6-_W8K5',
                 'domain': '.dayu.com'})
  8. d.add_cookie({'domain': 'mp.dayu.com',
                 'name': 'USER_TMP',
                 'value': 'tuAaJfSaWoKiQutU9mIkyBk'})
  9. sleep(3)
  10. d.refresh()
  11. sleep(2)
  12. d.find_element_by_xpath("/html/body/div/div/div[1]/ul/li[2]/ul/li[2]/a/span").click()
  13. sleep(5)
  14. d.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[2]/div/div/div/div/div[2]/div[1]/div[1]').click()
  15. dialog = win32gui.FindWindow('#32770', u'文件上传')
  16. ComboBoxEx = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
  17. ComboBox = win32gui.FindWindowEx(ComboBoxEx, 0, 'ComboBox', None)
  18. Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)
  19. button = win32gui.FindWindowEx(dialog, 0, 'Button', None)
  20. sleep(2)
  21. win32gui.SendMessage(Edit, win32con.WM_SETTEXT, 0, r'C:\Users\DELL\Desktop\vid.mp4')
  22. sleep(2)
  23. win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)
                 

船长亲测可用,大家也试一下~~

微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

selenium 上传文件方法补充——SendKeys、win32gui的更多相关文章

  1. Selenium上传文件方法总结

    Web上本地上传图片,弹出的框Selenium是无法识别的,也就是说,selenium本身没有直接的方法去实现上传本地文件,这里总结了两种上传文件的方式. 一.利用Robot类处理文件上传. 其大致流 ...

  2. Selenium上传文件方法大全

    最好的方法:调js 其他方法: Python pywin32库,识别对话框句柄,进而操作 SendKeys库 autoIT,借助外力,我们去调用其生成的au3或exe文件. keybd_event,跟 ...

  3. Java ftp上传文件方法效率对比

    Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...

  4. django上课笔记7-jQuery Ajax 和 原生Ajax-伪造的Ajax-三种Ajax上传文件方法-JSONP和CORS跨域资源共享

    一.jQuery Ajax 和 原生Ajax from django.conf.urls import url from django.contrib import admin from app01 ...

  5. Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument

    Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...

  6. Selenium 上传文件失败,解决办法一

    昨个改程序遇到一个问题,UI上面有需要上传文件的地方.但是我不知道怎么让Selenium完成 点击上传文件按钮->在弹出的文件选择窗口中选择路径和文件,点确定. 要知道弹出窗口属于window的 ...

  7. Ui自动化测试上传文件方法都在这里了

    前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...

  8. Selenium上传文件

    selenium自带了对应的API可以上传问题,如果这个上传文件的html code中显示的type是file那么你就可以使用下面的代码上传文件. /** * click the upload but ...

  9. springmvc上传文件方法及注意事项

    本文基于注解的配置,敬请留意  基于注解整合 一.springmvc为我们提供两种上传方式配置: org.springframework.web.multipart.commons.CommonsMu ...

随机推荐

  1. vue.js学习之组件(上篇)

    本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星! https://github.com/zwl-jasmine95/Vue_test 以下所有知 ...

  2. ios 下拉刷新开源框架 MJRefresh

    gitHub 下载框架 搜索MJExampleViewController.h 下拉刷新 MJTableViewController 上拉刷新 MJTableViewController Collec ...

  3. STOMP协议规范【转】

    STOMP协议规范英文原文:http://stomp.github.io/stomp-specification-1.2.html STOMP协议规范译文原文:http://simlegate.com ...

  4. C# 过滤HTML,脚本,数据库关键字,特殊字符

    /// <summary> /// 过滤标记 /// </summary> /// <param name="NoHTML">包括HTML,脚本 ...

  5. numpy.random之常用函数

    在实际开发中,我们经常会使用随机函数,比如交叉验证,构造测试数据等.下面,是我常用的几个生成随机样本的函数: 1,rand(n1,n2,…,nn) 每一维度都是[0.0,1.0)半闭半开区间上的随机分 ...

  6. 《OpenCL编程指南》之 与Direct3D互操作

    介绍OpenCL与D3D 10之间的互操作. 1.初始化OpenCL上下文实现Direct3D互操作 OpenCL共享由pragma cl_khr_d3d10_sharing启用: #pragma O ...

  7. date.timezone not set in php.ini. Please contact ...解决方案

    无论是在LAMP还是在LNMP系统环境下, 只要PHP的版本在5.3及其以上的版本时, 无论是在安装oscommerce, 还是在安装zen cart, 以及其他的CMS时, 都会遇到如下所示的错误信 ...

  8. 初识async函数

    为什么会出现async函数 首先从大的方面来说,出现async函数时为了解决JS编程中的异步操作,再往具体说就是为了对以往异步编程方法的一种改进,也有人说仅仅只是Generator 函数的语法糖,这个 ...

  9. Docker - 在Ubuntu 14.04 Server上的安装Docker

    在 Ubuntu 14.04 Server 上安装过程是最简单的, 其满足了安装 Docker的所有要求,只需要执行如下安装脚本即可. 如果你有可能,请使用14.04版本的Ubuntu, 避免给自己挖 ...

  10. jmeter测试FTP

    1.下载并运行FTP服务器软件:Quick Easy FTP Server V4.0.0.exe 2.点击右上角的绿色按钮,开启服务器,直到中间的红色按钮亮起 3.在账户管理处可以管理账号信息(用户名 ...