selenium 上传文件方法补充——SendKeys、win32gui
之前和大家说了input标签的上传文件的方式:
《selenium2 python 自动化测试实战》(13)——上传文件
现在好多网站上传的标签并不是input,而是div之类的比如:
全部都是div标签,这时候用上面的方法就不好用了。今天船长在大神的帮助下学会了两种方法,现在船长来教大家上传div这种标签的方式。
最方便的——SendKeys
大家只需要pip install SendKeys库,然后再代码里直接用就OK了,这里用大鱼号上传视频作为例子上代码:
注意,浏览器用的是火狐,因为chrome浏览器会不支持哦~
# coding: utf-8
from selenium import webdriver
from time import sleep
import SendKeys
# options = webdriver.ChromeOptions()
# options.add_argument('disable-infobars')
# d = webdriver.Chrome(chrome_options=options)
d = webdriver.Firefox()
d.get("https://mp.dayu.com")
# cookie登录,跳过验证码
d.add_cookie({'name': 'cna',
'value': 'fhSvgLVKF3Gz1',
'domain': '.dayu.com'})
d.add_cookie({'name': 'isg',
'value': 'BIaGbW7sWwBT6-_W8K5',
'domain': '.dayu.com'})
d.add_cookie({'domain': 'mp.dayu.com',
'name': 'USER_TMP',
'value': 'tuAaJfSa8AaxABk'})
sleep(3)
d.refresh()
sleep(2)
d.find_element_by_xpath("/html/body/div/div/div[1]/ul/li[2]/ul/li[2]/a/span").click()
sleep(5)
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()
SendKeys.SendKeys(r'C:\Users\DELL\Desktop\vid.mp4')
sleep(2)
SendKeys.SendKeys("{ENTER}")
第二种方法:win32gui
这种方法有点麻烦,而且下载库的时候非常麻烦……
要安装
1、pywin32-218.win-amd64-py2.7.exe
2、pypiwin32
下载好这两个库以后,就可以上代码啦:
# coding: utf-8
import win32gui
import win32api
import win32con
from selenium import webdriver
from time import sleep
# options = webdriver.ChromeOptions()
# options.add_argument('disable-infobars')
# d = webdriver.Chrome(chrome_options=options)
d = webdriver.Firefox()
d.get("https://mp.dayu.com")
d.add_cookie({'name': 'cna',
'value': 'fhW6ElaKVKF3Gz1',
'domain': '.dayu.com'})
d.add_cookie({'name': 'isg',
'value': 'BIaGbW7sIPskIv6-_W8K5',
'domain': '.dayu.com'})
d.add_cookie({'domain': 'mp.dayu.com',
'name': 'USER_TMP',
'value': 'tuAaJfSaWoKiQutU9mIkyBk'})
sleep(3)
d.refresh()
sleep(2)
d.find_element_by_xpath("/html/body/div/div/div[1]/ul/li[2]/ul/li[2]/a/span").click()
sleep(5)
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()
dialog = win32gui.FindWindow('#32770', u'文件上传')
ComboBoxEx = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
ComboBox = win32gui.FindWindowEx(ComboBoxEx, 0, 'ComboBox', None)
Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)
button = win32gui.FindWindowEx(dialog, 0, 'Button', None)
sleep(2)
win32gui.SendMessage(Edit, win32con.WM_SETTEXT, 0, r'C:\Users\DELL\Desktop\vid.mp4')
sleep(2)
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)
船长亲测可用,大家也试一下~~
微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

selenium 上传文件方法补充——SendKeys、win32gui的更多相关文章
- Selenium上传文件方法总结
Web上本地上传图片,弹出的框Selenium是无法识别的,也就是说,selenium本身没有直接的方法去实现上传本地文件,这里总结了两种上传文件的方式. 一.利用Robot类处理文件上传. 其大致流 ...
- Selenium上传文件方法大全
最好的方法:调js 其他方法: Python pywin32库,识别对话框句柄,进而操作 SendKeys库 autoIT,借助外力,我们去调用其生成的au3或exe文件. keybd_event,跟 ...
- Java ftp上传文件方法效率对比
Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...
- 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 ...
- Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument
Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...
- Selenium 上传文件失败,解决办法一
昨个改程序遇到一个问题,UI上面有需要上传文件的地方.但是我不知道怎么让Selenium完成 点击上传文件按钮->在弹出的文件选择窗口中选择路径和文件,点确定. 要知道弹出窗口属于window的 ...
- Ui自动化测试上传文件方法都在这里了
前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...
- Selenium上传文件
selenium自带了对应的API可以上传问题,如果这个上传文件的html code中显示的type是file那么你就可以使用下面的代码上传文件. /** * click the upload but ...
- springmvc上传文件方法及注意事项
本文基于注解的配置,敬请留意 基于注解整合 一.springmvc为我们提供两种上传方式配置: org.springframework.web.multipart.commons.CommonsMu ...
随机推荐
- sass快速入门 - 笔记
一.使用变量 1.使用$符号来标识变量. 例: $nav-color:#F90; .nav{ $width:100px; width:$width; color:$nav-color; }
- ArrayBuffer
ArrayBuffer对象.TypedArray视图和DataView视图是 JavaScript 操作二进制数据的一个接口.这些对象早就存在,属于独立的规格(2011 年 2 月发布),ES6 将它 ...
- 页面title加icon
把favicon.ico放入根目录下,在head中添加一下代码 <link rel="icon" type="image/x-icon" href=&qu ...
- 使用python编写微信跳一跳的自动脚本
实现思路: 调用adb命令,截图 寻找小小人的底部中心点role(从下到上扫描,直到找到小小人相同像素的点,至于小小人像素点rgb是什么,可以使用photoshop查看) 寻找棋盘最高点top,然后寻 ...
- CCS5 学习笔记1
CCS5 学习笔记1 2013-09-15 10:35:49 周日边学习ccs5使用边写笔记,准备用一天时间好好学习下ccs5怎么使用,便于以后工作向ccs5平台迁移!
- python之数组元素去重
参考:如何消除一个数组里面的重复元素?(面试题目) 思路,即创建一个新数组,把原数组中的元素逐个添加到新数组中(判断新数组中是否已经包含原数组中的元素,如果没有,把原数组中的元素添加到新数组,如果已经 ...
- 020——VUE中变异方法push的留言版实例讲解
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- SQL SERVER 正则替换
use pubdbgo IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION dbo.RegexReplace GO --开始创建正则 ...
- Vue项目上线后刷新报错404问题(apache,nginx,tomcat)
转自:https://www.cnblogs.com/sxshaolong/p/10219527.html 很简单,需要 服务器端 加个配置文件,然后 重启服务就好了,记住一定要 重启服务,否则无效!
- hdu 6040 Hints of sd0061(stl: nth_element(arr,arr+k,arr+n))
Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...