selenium--上传文件
前戏
在进行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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)