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/False
pyautogui.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)键名
键盘键字符串 | 含义 |
‘a’,'1','?'等 |
单个字符的键 |
‘enter’ / '\n' | 回车键 |
‘esc’ | Esc键 |
shiftleft , shiftright | 左右shift键 |
altleft, altright | 左右alt键 |
ctrlleft同上 | 左右ctrl |
tab \t | Tab键 |
backapace delete | 空格键 Del键 |
pageup pagedown | Page UP/Down |
home end | Home End |
up down left right | 上下左右箭头键 |
f1 f2... | F1-F12 |
volumemute volumedown volumeup | 音量静音,调大,调小 |
pause | Pause |
capslpck numlock scrolllock | 功能锁 |
insert | 同义 |
printscreen | 同义 |
winleft winright | 左右win键 |
command | Command键(OS) |
option | option键(OS) |
注:以上调用时加上 ' '
(3)按下和释放键盘
#打印 % 符号 ‘shift+5’
pyautogui.keyDown('shift') #按下
pyautogui.press('4') #按下并释放
pyautogui.keyUp('shift) #释放
(4)热键组合
为了避免以上麻烦的指令,可应用热键功能,接受多个键字符串的函数,按给出的顺序按下,相反的顺序释放,于是以上代码就变成了:
pyautogui.hoykey('shift','4')
2. 实例应用
2.1 鼠标在哪里
在移动鼠标时随时显示x,y坐标,以及RGB颜色值
#@TIME :2018/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 :2018/4/8 15:18
#自动填表程序 网址:https://docs.google.com/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 :2018/4/8 16:02
#不想通信软件变为空闲,每隔十秒钟动一下鼠标
import pyautogui,timeTIMESLEEP = 5
try:while True:x,y = pyautogui.position()print(x,y)time.sleep(TIMESLEEP)pyautogui.moveRel(10,0,duration=0.2)
except KeyboardInterrupt:quit()
Python让繁琐工作自动化——chapter18 GUI控制键盘与鼠标相关推荐
- python—让繁琐工作自动化
python,在占领国一段时间的朋友圈,是关于编程的东西.大都是是扫码进入学习群之类的东西.只是不知道哪些当时刷圈的小伙伴们学的怎么样了,大致也有一两个月的时间. 为什么提起这个,因为最近也看到一些p ...
- python自动化办公入门书籍推荐-好书推荐 | Python 如此神奇,让繁琐工作自动化...
原标题:好书推荐 | Python 如此神奇,让繁琐工作自动化 Python 如此神奇,让繁琐工作自动化 编程的威力 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. Al Sweigart ...
- python 复制文件并重命名_好书推荐 | Python 如此神奇,让繁琐工作自动化
优质文章,第一时间送达! Python 如此神奇,让繁琐工作自动化 编程的威力 如今,人们面临的大多数任务都可以通过编写计算机软件来完成. Al Sweigart 的室友曾经只花了几个小时,就写出了一 ...
- Python程序员的圣经——《Python编程快速上手:让繁琐工作自动化》尾末附下载地址
一.前言 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务. 今天给 ...
- python经典书记必读:Python编程快速上手 让繁琐工作自动化
所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/69/ 来源:python黑洞网,专注 ...
- Python编程快速上手,让繁琐工作自动化(附下载)
今天给大家分享一份Python程序员的圣经--<Python编程快速上手:让繁琐工作自动化>.这是本面向实践的Python编程实用指南. 目录 第一章 Python基础 第二章 控制流 第 ...
- 《Python编程快速上手——让繁琐工作自动化》——第一部分 Python编程基础 第1章 Python基础 1.1 在交互式环境中输入表达式...
本节书摘来自异步社区<Python编程快速上手--让繁琐工作自动化>一书中的第1章,第1.1节,作者[美] Al Sweigart,王海鹏 译,更多章节内容可以访问云栖社区"异步 ...
- python自动化办公入门书籍-Python如此神奇,让繁琐工作自动化 (文中含Python基础)...
原标题:Python如此神奇,让繁琐工作自动化 (文中含Python基础) "你在2个小时里完成的事,我们3个人要做两天."21世纪早期,我的大学室友在一个电子产品零售商店工作.商 ...
- 导入python标准数学函数模块的语句_《Python编程快速上手——让繁琐工作自动化》——2.8 导入模块...
本节书摘来自异步社区<Python编程快速上手--让繁琐工作自动化>一书中的第2章,第2.8节,作者[美] Al Sweigart,王海鹏 译,更多章节内容可以访问云栖社区"异步 ...
- python快速上手 让繁琐工作自动化 英文版_入门python:《Python编程快速上手让繁琐工作自动化》中英文PDF+代码...
入门推荐学习<python编程快速上手>前6章是python的基础知识,通俗易懂地讲解基础,初学者容易犯错的地方,都会指出来.从第三章开始,每章都有一个实践项目,用来巩固前面所学的知识. ...
最新文章
- 用了 HTTPS 就一定安全吗?HTTPS 原理分析——带着疑问层层深入
- java中接口什么时候用_我什么时候应该在java中使用接口?
- 《那些年啊,那些事——一个程序员的奋斗史》——60
- centos 6 x64 mysql_CentOS 6.x版本升级Mysql
- (8)FPGA面试题触发器满足建立时间和保持时间的原因
- python中的urlencode和urldecode
- 【二分法】计蒜客:二分答案
- Direct3D光与材质的颜色值
- composer.install
- 想法独特 上半年最具特色摄像头集锦
- 二进制文件是什么?到底二进制文件和纯文本文件的区别是什么?为什么图像、音频是二进制文件?
- 服务器怎么建立无线局域网,家庭无线局域网的组建教程
- springboot Nexus Repository Maven仓库搭建及使用
- Python小测验(01)
- 揭开深度跟踪的力量--Unveiling the Power of Deep Tracking (ECCV2018)
- 计算机基础知识(基础入门小白专属)四
- python 163邮箱发送邮件
- 小甲鱼汉诺塔代码理解
- 1086:角谷猜想(C C++)
- [2017全球人工智能高峰论坛]城市大脑是下一个十年的登月计划 王坚说出了什么?...