Python - pywin32


about

win10 + python3.6 + selenium + chrome

前提是Windows平台。
今天有個在瀏覽器的某個網站提交圖片的需求,說來也簡單,就是從本地截取一張圖片,復制並粘貼到富文本的文本框,但操蛋的是,由於提交的標簽是body,並不是input標簽,selenium無法直接send_key圖片,思考了一番,想到了一個解決辦法,用selenium模擬出來一個復制粘貼的操作:

  1. 讀取圖片並將其暫放到系統的剪貼板。
  2. 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM