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