pyautogui图形界面自动化

于绝境处竟然峰回路转,我把过程写出来供您参考,找到的这些方法处理英文字符都没问题。

 

首先声明代码都不是原创,我很浮躁不求甚解,自己给自己找的借口是杂事太多,无法沉下心来扎扎实实把技术文档啃明白。遇到拦路虎就是搜搜搜滴找无私分享的网友的代码拿过来改,所以会有明明网友的代码可以解决我的问题,但我照葫芦画瓢没领会精髓,不知变通进而以为解决不了我的问题。

 

机器是MacIDEpycharmPython版本是3.6;我是要控制键盘把把变量里的中文字符输出到文本框里,假设变量txt='沧海一声笑'

 

第一次尝试:

import pyautogui

pyautogui.typewrite(txt)

运行结果是直接跳过不输出,后来反应过来pyautogui.typewrite()是模拟按键,显然中文无法用单纯按键输出。 

遂决定用剪切板做下中转站,即先把变量里的中文字符弄到剪切板里,然后控制键盘ctrl+v或直接输出剪切板内容的函数辗转把中文字符输出。

第二次尝试:

import pyperclip
pyperclip.copy('浮世繁华')

ctrl+v出来的是乱码,网上搜了半天貌似pyperclip模块没解决这个问题,决定试试其他提供同样功能的模块。 

第三次尝试:

import clipboard

clipboard.copy('天龙八部')

还是乱码

搜索引擎上敲入python3 write Chinese character to clipboard之类继续搜,发现了Mac上有条命令pbcopy,比如在terminal上敲入'echo 雪山飞狐|pbcopy',雪山飞狐就进剪切板里了,大喜过望,想通过subprocesspython程序中执行这条命令以期达到目的。subprocess我了解的很粗浅,会最简单的应用而已,所以上来就...

第四次尝试:

import subprocess

subprocess.run(['echo', '射雕‘,’|pbcopy'])

运行结果是:射雕|pbcopy,意识到糊弄不过去,得用PIPE。只好找来subprocess的技术文档,艾玛,两眼直发黑,太他么复杂了!找别人写好的例子网上套套看

第五次尝试:

import subprocess
# write a Uncode string to the Mac clipboard
defwrite_to_clipboard(output):
    process = subprocess.Popen(
        'pbcopy', env={'Lang': 'zh_CN.UTF-8'}, stdin=subprocess.PIPE)
    process.communicate(output.encode('utf-8'))
write_to_clipboard('快乐')

输出竟然乱码,原来代码的locale参数是en_US.UTF-8,改回去也不行,烦死人了!而且这不已经是UTF-8了么?怎么中文还是不行?! 

第六次尝试:

又去找了段代码

proc1 = subprocess.Popen(['echo', '陆小凤'], stdout=subprocess.PIPE)
proc2 =subprocess.Popen(['pbcopy'], stdin=proc1.stdout, stdout=subprocess.PIPE)
proc1.stdout.close()
out, err = proc2.communicate()

乱码

后来好像还试了subprocess.check_output()也没弄出来,我得再声明自己功力太浅,而且也没坐下来认真专研,就是不停地试图找捷径。subprocess功能这么强大,可能可以解决这个问题,如果用PIPEecho ‘陆小凤接收,然后作为下一个进程的输入,中间的流好像是byte类型,至于说能不能中间转成utf-8再做输入实在没耐心也没时间研究。编码转码部分我很混乱,也很打怵。 

最后是这段代码嵌入到我的实验代码中实现了我要的功能:

 

try:
    from Tkinter import Tk
exceptImportError:
    from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('两两相忘')
r.update() # now it stays on the clipboard after the window is closed
r.destroy()

还没往大代码里加,希望别再出幺蛾子了,力气和耐心快耗光了,如果没问题我到时候再解释。我怕把这个过程给忘了,所以赶紧用文字记录下来,希望能对您有所启发,更希望得到您的指点!