剪贴板自动翻译

这是我常用的工具,调用有道翻译接口,每0.5秒检测剪贴板内容是否改变

import re

import requests
import win32clipboard as w
import win32con
import time
import pyperclip


def getText():  # 读取剪切板
    # 打开剪贴板
    w.OpenClipboard()
    # 读取剪贴板的内容
    d = w.GetClipboardData(win32con.CF_TEXT)
    # 关闭剪贴板
    w.CloseClipboard()
    try:
        return d.decode('utf-8')
    except:
        return d.decode('gbk')


def setText(aString):  # 写入剪切板
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardText(aString)
    w.CloseClipboard()


def translate(content):
    if len(content) > 4891:
        ultra_text = "翻译的长度超过限制!!!"
        return ultra_text
    try:
        session = requests.Session()
        data = {'inputtext': content, 'type': 'AUTO'}
        headers = {'Content-Type': "application/x-www-form-urlencoded",
                   "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Mobile/15E148 Safari/604.1", }
        url = "http://m.youdao.com/translate"
        req = session.post(url, data=data, headers=headers).text
        pattern = re.compile('translateResult">.*?<li>(.*?)</li>', re.S)
        ultra_text = re.findall(pattern, req)[0]
    except:
        ultra_text = "翻译失败!!!"
    return ultra_text


def main():
    ls = ''
    while True:  # 如果剪贴板正在被占用
        cs = getText()
        time.sleep(0.5)
        if cs and cs != ls:
            print('准备翻译')
            content = getText()
            res = translate(content)
            setText(res)
            pyperclip.copy(res)
            time.sleep(1)
            ls = res


if __name__ == "__main__":
    main()
原文地址:https://www.cnblogs.com/1314h/p/14072873.html