1-Python - pywin32
about
win10 + python3.6 + selenium + chrome
前提是Windows平台。
今天有个在浏览器的某个网站提交图片的需求,说来也简单,就是从本地截取一张图片,复制并粘贴到富文本的文本框,但操蛋的是,由于提交的标签是body,并不是input标签,selenium无法直接send_key图片,思考了一番,想到了一个解决办法,用selenium模拟出来一个复制粘贴的操作:
- 读取图片并将其暂放到系统的剪贴板。
- selenium做一个Ctrl+V的操作就完了。
想到就干,Python操作剪贴板,可以用pyperclip和pywin32这两个模块可以做,后来进一步确定使用win32这个包。
注意,经过我踩了一天坑(尝试在Python3.9+pywin32-225/302这两个版本的包)后,发现,降级万事大吉!
最后,我选择在Python3.6的解释器中,直接安装pywin32的225版本,不敢用302,怕再报错!
所以:
pip install pywin32==225
完事之后,尝试着导一下:
Python 3.6.13 |Anaconda, Inc.| (default, Mar 16 2021, 11:37:27) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32con
>>> import win32clipboard
我就用到了这两个,其他的也不太熟悉。
如果你导包报错,建议重启电脑!
应用:将图片复制到剪贴板
以下示例,基本照抄百度的,然后对着我自己的需求改了改。
你只需要准备一张图片路径,替换到下面的代码中,然后执行......你就可以直接CTRL+V将这个图片粘贴到你想要粘贴的地方了。好神奇!
import win32clipboard as clip
import win32con
from PIL import Image # pip install pillow
from io import BytesIO
img_path = "image-20211122170524041.png"
def get_img(imp_path):
img = Image.open(img_path)
bt_io = BytesIO()
img.convert('RGB').save(bt_io, 'BMP') # 这些我都是照抄百度的!
img_content = bt_io.getvalue()[14:] # 好神奇,不从14切,得到的图片不能用
bt_io.close()
cl(img_content)
def cl(img_content):
# 打开剪贴板
clip.OpenClipboard()
# 清空剪贴板
clip.EmptyClipboard()
# 将图片放入剪贴板
clip.SetClipboardData(win32con.CF_DIB, img_content) # 照抄百度
clip.CloseClipboard()
if __name__ == '__main__':
get_img(img_path)
see also:
https://blog.csdn.net/betty_xfy/article/details/80321518