[python]《Python编程快速上手:让繁琐工作自动化》学习笔记7
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载)
pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。
- Windows: 不需要安装其他模块。
- OS X:
sudo pip3 install pyobjc-framework-Quartz
sudo pip3 install pyobjc-core
sudo pip3 install pyobjc
- Linux:
sudo pip3 install python3-xlib
sudo apt-get install scrot
sudo apt-get install python3-tk
sudo apt-get install python3-dev
依赖项安装后安装pyautogui:
pip install pyautogui
使用pyautogui需要注意防止或恢复GUI。通过ctrl+cg关闭程序或者。设定暂停和自动防故障,如下:
# 在每次函数调用后等一会儿,将pyautogui.PAUSE 变量设置为要暂停的秒数
pyautogui.PAUSE = 1
# 设定自动防故障
pyautogui.FAILSAFE = True
常用函数如下:
| 函数 | 用途 |
|---|---|
| moveTo(x,y,duration) | 将鼠标移动到指定的x、y 坐标,duration每次移动耗时多少秒,如果没有数调用duration,鼠标就会马上从一个点移到另一个点 |
| moveRel(xOffset,yOffset,duration) | 相对于当前位置移动鼠标 |
| pyautogui.position() | 确定鼠标当前位置 |
| dragTo(x,y,duration) | 按下左键移动鼠标 |
| dragRel(xOffset,yOffset,duration) | 按下左键,相对于当前位置移动鼠标 |
| click(x,y,button) | 模拟点击(默认是左键) |
| rightClick() | 模拟右键点击 |
| middleClick() | 模拟中键点击 |
| doubleClick() | 模拟左键双击 |
| pyautogui.scroll(units) | 模拟滚动滚轮。正参数表示向上滚动,负参数表示向下滚动 |
| pyautogui.screenshot() | 返回屏幕快照的Image 对象 |
| pyautogui.pixelMatchesColor(x,y,tuple) | 判断x、y 坐标处的像素与指定的颜色是否匹配。第一和第二个参数是xy整数坐标。第三个参数是包含3个整数元组,表示RGB 颜色 |
| pyautogui.locateOnScreen(image) | 将返回图像iamge所在处当前屏幕图像的坐标,如果无法匹配返回None |
| pyautogui.center(x,y,w,h) | 返回区域的中心坐标 |
| typewrite(message) | 键入给定消息字符串中的字符 |
| typewrite([key1,key2,key3]) | 键入给定键字符串,pyautogui.KEYBOARD_KEYS查看键字符串的列表 |
| press(key) | 按下并释放给定键 |
| keyDown(key) | 模拟按下给定键 |
| keyUp(key) | 模拟释放给定键 |
| mouseDown(x,y,button) | 模拟在x、y 处按下指定鼠标按键 |
| mouseUp(x,y,button) | 模拟在x、y 处释放指定键 |
| hotkey([key1,key2,key3]) | 模拟按顺序按下给定键字符串,然后以相反的顺序释放 |
2 项目练习
2.1 项目:“现在鼠标在哪里?”
在移动鼠标时随时显示 x y 坐标和改点RGB值
# 显示鼠标实时位置
import pyautogui
# 程序终止crtl+c
print('Press Ctrl-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))
positionStr += ' RGB: (' + str(pixelColor[0]).rjust(3)
positionStr += ', ' + str(pixelColor[1]).rjust(3)
positionStr += ', ' + str(pixelColor[2]).rjust(3) + ')'
# end结尾添加的字符,默认换行符
print(positionStr, end='')
# https://blog.csdn.net/lucosax/article/details/34963593
# 得到了许多\b 字符构成的字符串,长度与positionStr中保存的字符串长度一样,效果就是擦除了前面打印的字符串\
# flush把文件从内存buffer(缓冲区)中强制刷新到硬盘中,同时清空缓冲区。实现动态效果
print('\b' * len(positionStr), end='', flush=True)
# 退出程序
except KeyboardInterrupt:
print('\nDone.')
2.2 项目:自动填表程序
实现自动填表,表格网站,地址http://autbor.com/form
import pyautogui, time
# Set these to the correct coordinates for your computer
# name输入位置
nameField = (622, 199)
submitButton = (601, 978)
submitButtonColor = (31, 115, 230)
submitAnotherLink = (760, 224)
# 表单数据
formData = [{'name': 'Alice', 'fear': 'eavesdroppers', 'source': 'wand','robocop': 4, 'comments': 'Tell Bob I said hi.'},
{'name': 'Bob', 'fear': 'bees', 'source': 'amulet', 'robocop': 4,'comments': 'Please take the puppets out of the break room.'},
{'name': 'Carol', 'fear': 'puppets', 'source': 'crystal ball','robocop': 1, 'comments': 'Please take the puppets out of the break room.'},
{'name': 'Alex Murphy', 'fear': 'ED-209', 'source': 'money','robocop': 5, 'comments': 'Protect the innocent. Serve the publictrust. Uphold the law.'},]
# 暂停0.5s
pyautogui.PAUSE = 0.5
for person in formData:
# Give the user a chance to kill the script.
print('>>> 5 SECOND PAUSE TO LET USER PRESS CTRL-C <<<')
time.sleep(5)
# Wait until the form page has loaded.
# 判断点submitButton和submitButtonColor的颜色是否匹配
while not pyautogui.pixelMatchesColor(submitButton[0], submitButton[1],submitButtonColor):
time.sleep(0.5)
print('Entering %s info...' % (person['name']))
# 从名字开始填写
pyautogui.click(nameField[0], nameField[1])
# Fill out the Name field.
pyautogui.typewrite(person['name'] + '\t')
# Fill out the Greatest Fear(s) field.
pyautogui.typewrite(person['fear'] + '\t')
# Fill out the Source of Wizard Powers field.
if person['source'] == 'wand':
# 按下键
pyautogui.typewrite(['down'])
# 回车
pyautogui.typewrite(['enter'])
# tab
pyautogui.typewrite(['\t'])
elif person['source'] == 'amulet':
pyautogui.typewrite(['down', 'down'])
pyautogui.typewrite(['enter'])
pyautogui.typewrite(['\t'])
elif person['source'] == 'crystal ball':
pyautogui.typewrite(['down', 'down', 'down'])
pyautogui.typewrite(['enter'])
pyautogui.typewrite(['\t'])
elif person['source'] == 'money':
pyautogui.typewrite(['down', 'down', 'down', 'down'])
pyautogui.typewrite(['enter'])
pyautogui.typewrite(['\t'])
# Fill out the RoboCop field.
if person['robocop'] == 1:
pyautogui.typewrite([' ', '\t'])
elif person['robocop'] == 2:
pyautogui.typewrite(['right', '\t'])
elif person['robocop'] == 3:
pyautogui.typewrite(['right', 'right', '\t'])
elif person['robocop'] == 4:
pyautogui.typewrite(['right', 'right', 'right', '\t'])
elif person['robocop'] == 5:
pyautogui.typewrite(['right', 'right', 'right', 'right', '\t'])
# Fill out the Additional Comments field.
# 输入文字
pyautogui.typewrite(person['comments'] + '\t')
# Click Submit.
#pyautogui.press('enter')
# Wait until form page has loaded.
print('Clicked Submit.')
time.sleep(5)
# Click the Submit another response link.
# 确认提交
pyautogui.click(submitAnotherLink[0], submitAnotherLink[1])
3 参考链接
- 完整pyautogui文档 https://pyautogui.readthedocs.io/en/latest/
- https://www.jianshu.com/p/41463c82ec8f
- https://blog.csdn.net/yzy_1996/article/details/85244714
[python]《Python编程快速上手:让繁琐工作自动化》学习笔记7的更多相关文章
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- python学习笔记--Django入门0 安装dangjo
经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
- Pythoner | 你像从前一样的Python学习笔记
Pythoner | 你像从前一样的Python学习笔记 Pythoner
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...
随机推荐
- springboot H2 linux下搭建使用
这次研究是H2数据库了,关键还是再Linux下进行搭建部署的,被这个数据库快弄死了弄了4天时间,现在大致可以用了,还有些细节需要修正. 我这边使用的是springboot集成模式.直接使用代码启停方式 ...
- 使用@Param标识参数
可以通过@Param注解标识mapper接口中的方法参数 此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值: 以 param1,param2...为键,以参数为 ...
- 刷完一千道java笔试题的常见题目分析
java基础刷题遇到的最常见问题 可以先看一下这位博主整理的java面试题(很详细,我看了好几遍了):https://blog.csdn.net/ThinkWon/article/details/10 ...
- echarts在Vue项目中的实际运用效果图
文章目录 1.在后台系统首页中.可以根据需求制作相应的图表 2.在Vue中使用echarts的详细过程参照这个链接 1.在后台系统首页中.可以根据需求制作相应的图表 2.在Vue中使用echarts的 ...
- 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
参考文章: 深度剖析知识增强语义表示模型--ERNIE_财神Childe的博客-CSDN博客_ernie模型 ERNIE_ERNIE开源开发套件_飞桨 https://github.com/Pad ...
- pta第二次博客
目录 pta第二次博客 1.前言 2.设计与分析 第四次作业第一题 第四次作业第一题 第四次作业第一题 第四次作业第一题 pta第二次博客 1.前言 2.设计与分析 第四次作业第一题 1.题目: &q ...
- 斑马打印机二维码标签制作(.prn文件)基础简单快速上手
在工厂生产中,经常需要一线员工在电脑上输入订单号的情况.订单号往往很长,手输容易出错,并且浪费时间,所以常常使用扫码枪扫描二维码的方式输入订单号,本篇就是记录斑马打印机.prn标签模板的制作和使用. ...
- $_SERVER['HTTP_USER_AGENT']:在PHP中HTTP_USER_AGENT是用来获取用户的相关信息的,包括用户使用的浏览器,操作系统等信息
在PHP中HTTP_USER_AGENT是用来获取用户的相关信息的,包括用户使用的浏览器,操作系统等信息. 我机器:操作系统:WIN7旗舰版 64操作系统 以下为各个浏览器下$_SERVER['HTT ...
- LVS之NAT、DR、TUNNEL实验
1.LVS-NAT规则+WRR算法 服务器 IP地址 作用 系统版本 RS1 10.0.0.8/24GW:10.0.0.101 网站服务器 Rocky8.6 RS2 10.0.0.18/24GW:10 ...
- vulnhub靶场之NOOB: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:NOOB: 1,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub.com/noob ...