前戏

在进行web自动化的时候,经常需要用到上传文件的功能,selenium可以使用send_keys()来上传文件,但是使用send_keys()上传文件有很大的局限性,只能上传input标签的,好多的标签的都上传不了,我们这里使用第三方模块pywin32来模拟上传文件

实战

创建一个win32Model.py的文件,写如下代码

import win32clipboard as w
import win32con class Clipboard(object):
#模拟windows设置剪贴板
#读取剪贴板
@staticmethod
def getText():
#打开剪贴板
w.OpenClipboard() #获取剪贴板中的数据
d=w.GetClipboardData(win32con.CF_TEXT) #关闭剪贴板
w.CloseClipboard() #返回剪贴板数据给调用者
return d #设置剪贴板内容
@staticmethod
def setText(aString):
#打开剪贴板
w.OpenClipboard() #清空剪贴板
w.EmptyClipboard() #将数据aString写入剪贴板
w.SetClipboardData(win32con.CF_UNICODETEXT,aString) #关闭剪贴板
w.CloseClipboard()

在创建一个win32Key.py文件,写如下代码

import win32api
import win32con class KeyboardKeys(object):
#模拟键盘按键类
VK_CODE={
'enter':0x0D,
'ctrl':0x11,
'v':0x56
} @staticmethod
def keyDown(keyName):
#按下按键
win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,0,0) @staticmethod
def keyUp(keyName):
#释放按键
win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0) @staticmethod
def oneKey(key):
#模拟单个按键
KeyboardKeys.keyDown(key)
KeyboardKeys.keyUp(key) @staticmethod
def twoKeys(key1,key2):
#模拟两个组合键
KeyboardKeys.keyDown(key1)
KeyboardKeys.keyDown(key2)
KeyboardKeys.keyUp(key2)
KeyboardKeys.keyUp(key1)

写主函数

from selenium import webdriver
from time import sleep
from page.win32Model import Clipboard
from page.win32Key import KeyboardKeys def upload(path):
Clipboard.setText(path)
sleep(1)
KeyboardKeys.twoKeys('ctrl','v')
KeyboardKeys.oneKey('enter') # 模拟回车 driver = webdriver.Chrome()
driver.get('xxx')
driver.find_element_by_class_name('el-button').click()
driver.maximize_window()
sleep(2)
driver.find_element_by_xpath('xxx').click()
upload(r'C:\Users\Administrator\Desktop\21.png')
sleep(2)

selenium--上传文件的更多相关文章

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

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

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

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

  3. Selenium上传文件方法总结

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

  4. Selenium上传文件

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

  5. selenium 上传文件方法补充——SendKeys、win32gui

    之前和大家说了input标签的上传文件的方式: <selenium2 python 自动化测试实战>(13)——上传文件 现在好多网站上传的标签并不是input,而是div之类的比如: 全 ...

  6. selenium 上传文件。

    上传文件 driver.findElement(By.xpath("//input[@type='file']"))).sendKeys("C:\\testContent ...

  7. python+selenium上传文件——input标签

    我们要区分出上传按钮的种类,大体上可以分为两种: 第一种普通上传:将本地文件路径作为一个值,放在input标签中,通过form表单将这个值提交给服务器: 第二种插件上传:是通过Flash.JavaSc ...

  8. AutoIt实现selenium上传文件

    1,安装autoIt 2,工程中建文件夹,例如:script,将autoit 复制到该文件夹,并且编辑视频所在的文件夹的路径,编辑"au3"格式的文件 3,编辑完成后生成EXE文件 ...

  9. selenium上传文件,怎么操作

    #通过os.path.abspath()方法,打开图片的绝对路径,然后,定位上传按钮,然后,send_keys()方法中,添加这个文件路径就可以了

  10. Selenium上传文件方法大全

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

随机推荐

  1. Github上传项目及更新自己的项目

    更新:请前往下载Github Deskdop,Git命令什么的再也不用啦! 一.首次上传项目 1.在GitHub上创建对应仓库 仓库建立如下: README文件不用勾选,否则初次上传文件就要合并. 2 ...

  2. Hash冲突的解决--暴雪的Hash算法

    Hash冲突的解决--暴雪的Hash算法https://usench.iteye.com/blog/2199399https://www.bbsmax.com/A/kPzOO7a8zx/

  3. hbase 待看代码

    flush split mvcc rpc get put mutation netty  reactor模型 page cache 缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操 ...

  4. CountdownLatch例子

    CountdownLatch 一个线程或者多个线程等待其他线程完成了再接着往下执行 public class CountDownLatchTest { ); private static Random ...

  5. 信安周报-第04周:系统函数与UDF

    信安之路 第04周 前言 这周自主研究的任务如下: 附录解释: SQLi的时候应对各种限制,可以使用数据库自带的系统函数来进行一系列变换绕过验证 eg:字符串转换函数.截取字符串长度函数等 注入的时候 ...

  6. [转] js网络请求跨域问题汇总(携带cookie)

    前端程序使用extjs写,在本地测试,发送请求到服务器时,发现存在跨域的问题,cookie也没有set成功,于是乎在这里整理一下解决过程 由于篇幅较长,不想看解决过程的可以翻到最后看总结1.跨域允许2 ...

  7. Blend 触发器

    原文:Blend 触发器 介绍用定义触发器来控制视频 的 开始 暂停 继续 停止 触发器设置 效果

  8. Jenkins的使用(三)-------Publish over SSH和Publish over FTP

    七.构建后操作 1.使用Publish over SSH 1.左边菜单栏    Manage Jenkins --->ManagePlugins--->可选插件,然后搜索 Publish ...

  9. preflight request预检请求

    preflight request预检请求,负责检查是否允许跨域请求,但是注意并不是所有的跨域请求都会发送preflight请求.对与那些幂等的请求,如GET请求,就不会发送preflight请求.只 ...

  10. 实验吧——忘记密码了(vim备份文件,临时文件(交换文件))

    题目地址:http://ctf5.shiyanbar.com/10/upload/step1.php 前些天突然发现个游戏,于是浪费了好多时间,终于还是忍住了,现在专心学习,从今天开始正式写些学习笔记 ...