1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python让繁琐工作自动化——chapter18 GUI控制键盘与鼠标

Python让繁琐工作自动化——chapter18 GUI控制键盘与鼠标

时间:2022-03-23 06:13:01

相关推荐

Python让繁琐工作自动化——chapter18 GUI控制键盘与鼠标

1. 基础语法

"GUI自动化":通过程序控制应用,向他们发送虚拟的击键和鼠标点击,即图形用户界面自动化

import pyautogui

#以下指令将返回屏幕分辨率大小weight , height = pyautogui.size()

1.1 鼠标

(1)移动鼠标

#移动绝对坐标值(x,y,移动到该位置所需时间)pyautogui.moveto(100,200,duration = 0.2)#移动相对坐标pyautogui.moveRel(100,-100,duration = 0.2)

(2)获取鼠标位置

#返回坐标元组pyautogui.position()

(3)点击鼠标

#点击函数(x,y,点击左/右键)pyautogui.click(x,y,button = 'left')#鼠标按下不松开pyautogui.mouseDown()#释放鼠标pyautogui.Up()#双击左键pyautogui.doubleClick()#双击中键pyautogui.middleClick()

(4)拖动鼠标

#拖动到绝对坐标位置pyautogui.dragTo(x,y,duration = 0.2)#拖动到相对坐标位置pyautogui.dragRel(x,y,duration = 0.2)

(5)滚动鼠标

#正数为向上滚动,负数为向下滚动pyautogui.scroll(100)

1.2 处理屏幕

(1)获取屏幕快照

#im包含一个Image对象,可对其调用Image方法im = pyautogui.screenshot()#传入坐标元组,返回该处RGB元组im.getpixel((50,100))

(2)分析屏幕快照

可用于判断该处按钮是否为可选按钮,灰色按钮等

#参数(x,y,(R,G,B)),检查(x,y)处RGB是否完全匹配给出的RGB元组值,返回True/Falsepyautogui.pixelMatchesColor(20,300,(255,255,0))

(3)图像识别

将以前保存的屏幕快照保存为‘submit.png’

#函数返回四个证书的元组,是屏幕上首次发现该图像时左边的X坐标,顶边的Y坐标,图像的宽度以及高度pyautogui.locateOnScreen('submit.png') #这里要求的是“完全匹配”

若该图像能在屏幕上找到多处,则 pyautogui.locateAllOnScreen() 函数将返回一个Generator对象,将他传递给List,返回一个4整数元组的列表。

1.3 键盘

(1)键盘发送字符串

#在此之前一般会先调用click函数取得焦点pyautogui.typewrite('hello world')

(2)键名

注:以上调用时加上 ' '

(3)按下和释放键盘

#打印 % 符号 ‘shift+5’pyautogui.keyDown('shift') #按下pyautogui.press('4')#按下并释放pyautogui.keyUp('shift) #释放

(4)热键组合

为了避免以上麻烦的指令,可应用热键功能,接受多个键字符串的函数,按给出的顺序按下,相反的顺序释放,于是以上代码就变成了:

pyautogui.hoykey('shift','4')

2. 实例应用

2.1 鼠标在哪里

在移动鼠标时随时显示x,y坐标,以及RGB颜色值

#@TIME :/4/5 16:24#输出当前鼠标位置,以及像素RGB颜色import pyautoguiprint("Press Crtl+C to quit")try:while True:x, y = pyautogui.position()positionstr = 'X: '+str(x).rjust(4) + 'Y: ' + str(y).rjust(4)#格式化输出pixelcolor = pyautogui.screenshot().getpixel((x,y)) #截图得到x,y处颜色值positionstr += ' RGB :('+str(pixelcolor[0]).rjust(3)positionstr +=', ' + str(pixelcolor[1]).rjust(3)positionstr +=', ' + str(pixelcolor[2]).rjust(3) +' )'print(positionstr)# print('\b'*len(positionstr),end='',flush=True) #每移动一次屏幕刷新except KeyboardInterrupt:#捕捉中断异常print("Done\n")

2.2 自动提交表单

#@TIME :/4/8 15:18#自动填表程序 网址:/forms/d/e/1FAIpQLScSVDFU76rZvbO_tiIwSt6d9sOK0CZyS9KKMCP6cP5O5W5lVQ/viewformimport pyautogui,time# 0 要输入的信息(以列表中元组的形式)FormData = [{'name':'Alex','fear':'eavesdroppers','source':'money','robocop':4,'comments':'Tell bob i said hi'},{'name':'Bob','fear':'bees','source':'wand','robocop':3,'comments':'n/a'}]# 1 找到各按钮的确切位置(通过上一个例子确定按钮位置)namefield = (369,333)submit= (400,524)submitcolor = (156, 141, 248)submitanother = (517,245)#2 开始键入数据for person in FormData:print(">>>5s pause to let users press crtl-c")#给5秒的时间确定屏幕焦点time.sleep(5)# while not pyautogui.pixelMatchesColor(submitcolor[0],submitcolor[1],submitcolor[2]):#time.sleep(0.5)print("Entering %s info..."%(person['name']))pyautogui.click(namefield[0],namefield[1])pyautogui.typewrite(person['name'] + '\t')#'\t'进行下一项的填写pyautogui.typewrite(person['fear']+'\t')# 3 处理列表和单选按钮if person['source'] == 'wand':#下拉菜单pyautogui.typewrite(['down','\t'])elif person['source'] == 'money':pyautogui.typewrite(['down','down','down','down','\t'])if person['robocop'] == 3:#单选按钮pyautogui.typewrite(['right','right','\t'])elif person['robocop'] == 4:pyautogui.typewrite(['right','right','right','\t'])pyautogui.typewrite(person['comments'] +'\t')pyautogui.typewrite('enter') #提交# 4 开始另一份print("Submit clicked")pyautogui.click(submitanother[0],submitanother[1]) #开始另一个

3. 课后习题

18.14.1 看起来很忙机器人

#@TIME :/4/8 16:02#不想通信软件变为空闲,每隔十秒钟动一下鼠标import pyautogui,timeTIMESLEEP = 5try:while True:x,y = pyautogui.position()print(x,y)time.sleep(TIMESLEEP)pyautogui.moveRel(10,0,duration=0.2)except KeyboardInterrupt:quit()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。