selenium 上传文件方法补充——SendKeys、win32gui
2024-08-25 03:48:10
之前和大家说了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)
船长亲测可用,大家也试一下~~
微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~
最新文章
- man curl_easy_perform(原创)
- 20145320《Java程序设计》第二次实验报告
- ooj 1066 青蛙过河DP
- white-space: nowrap
- coffeeScript 语法总结
- js: get event handler bound to the element
- java文件创建和删除
- nova创建虚拟机源码分析系列之一 restful api
- maven 常用备忘录
- Anaconda安装mysqldb模块
- 【BZOJ1067】【SCOI2007】降雨量
- PostMan 使用Interceptor 发送带cookie的请求一直loading
- $ionicModal
- SQL 查询某时间段的数据 datadiff 计算时间差
- 服务器抓包命令:tcpdump详解
- 2018.11.14 Chopin’s
- Rhythmk 一步一步学 JAVA(9) JAVA 基础笔记[枚举,...]
- Java内存管理特点
- 全方位解读Java反射(reflection)
- Python3中简单的迭代器程序
热门文章
- 在lnmp下开启fileinfo扩展 Ubuntu系统
- MySQL索引底层实现
- JavaScript内部原理系列-变量对象(Variable object)
- photoshop CS5制作具有立体感的按钮
- wireshark抓取mysql数据包
- LeetCode 525. Contiguous Array
- fegin---@FeginClient参数介绍
- djagno重写authenticate实现帐号和邮箱的多方式登录。
- 【linux】VirtualBox-“please use a kernel appropriate for your cpu”
- 记用ajax网页跳转大坑——后台执行了,但是没有跳转