selenium + python 非 input 标签的文件上传操作
前言
对于网站的图片上传相信每个人都有过体会,imput 标签上传图片很简单,一段send_keys(Path)搞定,
但是那种不是 input 标签的怎么办呢?
接下来小编就介绍一下怎么处理! ↓ ↓ ↓ ↓ ↓ ↓
input标签上传文件
代码跟简单,send_keys 就能满足他。即便是使用 IDE录制脚本他也是使用Send_keys函数。
这是input 标签的样子
这是 input 标签的源码。写的比较简陋!
非 input 标签上传文件_介绍
给你看一下特殊的标签,只看能看清的地方就好了,其他的不用看。
很清楚的可以看到,这个按钮是 标签,点击后弹出一个文件选择框,选择文件。
文件选择框 ↓
手动操作是怎么做的?
- 选择图片
- 点击打开按钮
- 图片上传成功
还可以这样做?
- 复制好图片路径
- 将路径复制到文件名的文本框中
- 敲一下回车
- 图片上传成功
有了想法距离实现还远吗?
非 input 标签上传文件_解决_python_3.7_32位
方式1 是用鼠标做的,方式2 是使用键盘做到的。
我就介绍一下键盘操作:
# 这两个是python自带的插件,win32api是用来模拟键盘操作,win32con是用来控制键盘
import win32api
import win32con
算啦 算啦 ,本来想写的,但是看人家写的,我在复制过来没多大意义。
win32api参考地址:https://blog.csdn.net/polyhedronx/article/details/81988948
其实不看也可以,我已经把代码粘出来了。
发送按钮代码
def UpLoad_File(webEle, filePath, check_Input):
"""
使用 python 的 win32api,win32con 模拟按键输入,实现文件上传操作。
:param webEle: 页面中的上传文件按钮,是已经获取到的对象
:param filePath: 要上传的文件地址,绝对路径。如:D:\\timg (1).jpg
:param check_Input:检查input标签中是否有值 #仅用来检查,在return 处调用一次,多余可删除
:return: 成功返回:上传文件后的地址,失败返回:""
"""
pyperclip.copy(filePath) # 复制文件路径到剪切板
webEle.click() # 点击上传图片按钮
time.sleep(3) # 等待程序加载 时间 看你电脑的速度 单位(秒)
# 发送 ctrl(17) + V(86)按钮
win32api.keybd_event(17, 0, 0, 0)
win32api.keybd_event(86, 0, 0, 0)
win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0) # 松开按键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
win32api.keybd_event(13, 0, 0, 0) # (回车)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0) # 松开按键
win32api.keybd_event(13, 0, 0, 0) # (回车)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(2)
return check_Input.get_attribute("value")
调用函数代码
# 这个是上图看到的那个<a> 标签获取到的对象
f1 = driver.find_element_by_xpath(
u"(.//*[normalize-space(text()) and normalize-space(.)='文章标题图:'])[1]/following::i[1]")
# #仅用来检查,多余可删除
i1 = driver.find_element_by_xpath(u"//input[@name='articleTitlePic']")
UpLoad_File(f1, "D:\\timg (1).jpg", i1)
注意
1 - 上面代码可以对两种方式上传文件使用!
2 - 上面代码亲测可用!
3 - 在无浏览器窗口时不能使用!
没了!!!