安装pyautogui模块

pyautogui模块可以向Windows、OSX和Linux发送虚拟按键和鼠标点击。

安装依赖在Windows上,不需要安装其他模块。

在OSX上,运行

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

#(Scrot是PyAutoGUI使用的屏幕快照程序)。

在这些依赖安装后,运行pip install pyautogui(或在OSX和Linux上运行pip3),安装pyautogui。

1. 异常情况处理

Python能以想象不到的速度移动并点击,它可能由于速度太快导致其他应用程序跟不上。以下有几种方法来防止和恢复自动化问题。

1.1 注销关闭所有程序来恢复系统。

1.2 暂停和自动防故障装置设置pyautogui.PAUSE = 1.5之后每个PythonGUI函数调用在执行动作之后,都会暂停1.5s,非PyAtuGUI指令不会暂停

将鼠标移动到左上角将产生pyautogui.FailSafeException异常,可以设置pyautogui.FAILSAFE=False,禁用自动防故障功能。如果真的遇到好的同事,那算你走运,加油,抓紧学到手。

python资源分享企鹅圈:1055012877

包含python, 爬虫等人工智能软件,以及网络安全、数据挖掘、python web等python技巧的制作方法。

打造从零基础到项目开发上手实战全方位解析!

2 控制鼠标

获取屏幕宽高:

#屏幕分辨率的不同,返回值可能不一样.

width, height = pyautogui.size()

2.1 鼠标移动moveto# 移动到x, y 坐标处,用时0.25s

pyautogui.moveto(x, y, duration=0.25)

moveRel# 相对于当前位置移动鼠标,x、y可以为负数

pyautogui.moveRel(x, y, duration=0.25)

获取鼠标当前的位置

调用pyautogui.position(),可以获得鼠标当前的位置。它将返回函数调用时,鼠标x、y坐标的元组。

2.2 点击鼠标鼠标点击,就调用 pyautogui.click()方法。默认 情况下,点击将使用鼠标左键,点击发生在鼠标当前所在位置。

可以传入x、y坐标作为可选的第一第二参数, 点击做标为x, y处。

如果想指定鼠标按键,就加入button关键字参数,值分别为'left'、'middle'或'right'。例如,pyautogui.click(100, 150, button='left')

实现点击也可以调用pyautogui.mouseDown(),这只是按下鼠标按键,再调用pyautogui.mouseUp(),这只是释放鼠标按键。这些函数的参数与click()相同。实际上,click()函数只是这两个函数调用的方便封装。

为了进一步方便,pyautogui.doubleClick()函数只 执行 双击鼠标左键。pyautogui.rightClick()和pyautogui.middleClick()函数将分别执行双击右键和双击中键。如果真的遇到好的同事,那算你走运,加油,抓紧学到手。

python资源分享企鹅圈:1055012877

包含python, 爬虫等人工智能软件,以及网络安全、数据挖掘、python web等python技巧的制作方法。

打造从零基础到项目开发上手实战全方位解析!

2.3 拖动鼠标

PyAutoGUI提供了pyautogui.dragTo()和pyautogui.dragRel()函数,将鼠标拖动到一个新的位置,或相对当前位置的位置。

# 拖动到x, y 坐标处,用时0.25s

pyautogui.dragTo(x, y, duration=0.25)

# 相对于当前位置拖动鼠标,x、y可以为负数

pyautogui.moveRel(x, y, duration=0.25)

2.4 滚动鼠标

pyautogui.scroll(d)。 传入一个整型,向上或向下滚动 d单位。单位的意义在每个操作系统和应用上不一样, 所以 必须试验,看看在当前情况下滚动多远。滚动发生在鼠标的当前位置。传递正整数表示向上滚动,传递负整数表示向下滚动。

3 处理屏幕

pyautogui有屏幕快照的功能,可以根据当前屏幕的内容创建图形文件。这些函数也可以返回一个Pillow的Image对象,包含当前屏幕的内容。

3.1 获取屏幕快照

调用pyautogui.screenshot()可以获取屏幕快照。

import pyautogui

img = pyautogui.screenshot()

img是屏幕快照的Image对象,img是完全不透明的,这就是让程序"看到"屏幕的方法。

3.2 分析屏幕快照

假设程序中有一步是点击灰色按钮,那么在调用click()方法之前可以进行校验,查看要点击处的像素,如果颜色和灰色按钮不一致,那么就可以知道程序出问题了。

匹配颜色:PyAutoGUI的pixelMatchesColor(x, y, (r,g,b))可以对颜色进行匹配,如果颜色一致返回true。第三个参数(r,g,b)必须是RGB颜色元组,并且颜色完全匹配才会返回True。

4 图像识别

PyAutoGUI可以同过屏幕某一部分的截图去找它在屏幕中的坐标:

>>>import pyautogui

>>>pyautogui.locateOnScreen('submit.png')

(643,745,70,29)

locateOnScreen()函数返回4个整数的元组,是屏幕上首次发现该图像时左边的x坐标、顶边的y坐标、宽度以及高度。如果屏幕上找不到该图像,locateOnScreen()函数将返回None。要成功识别屏幕上的图像必须与提供的图像完全匹配。即使只差一个像素,locateOnScreen()函数也会返回None。

如果该图像在屏幕上能够找到多处,locateAllOnScreen()函数将返回一个Generator对象。可以将它传递给list(),返回一个4整数元组的列表。(locationList=list(generator))。

5 控制键盘

5.1 输入字符串

pyautogui.typewrite()函数向计算机发送虚拟按键。这些按键产生什么效果,取决于当前获得焦点的窗口和文本输入框。(可能需要先向文本输入框发送一次鼠标点击,确保它获得焦点。)

例如:

>>> pyautogui.click( 100, 100); pyautogui.typewrite('Hello world!')

# 同一行中有两条指令用分号隔开

默认情况下,typewrite()函数将立即打印出完整字符串。可以传入可选的第二参数,在每个字符之间添加短时间暂停。

例如,pyautogui.typewrite('Helloworld!',0.25)将在打出H后等待1/4秒。打出e以后再等待1/4秒。这种渐进的打字机效果,对于较慢的应用可能有用,它们处理击键的速度不够快,跟不上pyautogui。

对于A或!这样的字符,pyautogui将自动模拟按住Shift键。

5.2 使用特殊按键(enter、shift等等)

不是所有的键都很容易用单个文本字符来表示。例如把Shift键或左箭头键,那么这些特殊键如何使用呢?

在PyAutoGUI中,这些键表示为短的字符串值:'esc'表示Esc键,'enter'表示Enter。

除了单个字符串参数,还可以向typewrite()函数传递这些键字符串的列表。例如,以下的调用表示按a键,然后是b键,然后是左箭头两次,最后是X和Y键:

>>>pyautogui.typewrite(['a','b','left','left','X','Y'])

因为按下左箭头将移动键盘光标,所以这会输出XYab。PyKeyboard 属性

5.3 按下和释放键盘

就像mouseDown()和mouseUp()函数一样,pyautogui.keyDown()和pyautogui.keyUp()将向计算发送虚拟的按键和释放。它们将根据参数发送键字符串。方便起见,pyautogui提供了pyautogui.press()函数,它调用这两个函数,模拟完整的击键。

5.4 热键组合

例如,对于Ctrl-C,pyautogui.hotkey('ctrl', 'c')

对于Ctrl-Alt-Shift-S 热键组合显示 Style(样式)窗口。 只要调用hotkey('ctrl', 'alt', 'shift', 's')。

小结

本章介绍了许多不同函数,下面是快速的汇总参考:

moveTo(x,y)将鼠标移动到指定的x、y坐标。

moveRel(xOffset,yOffset)相对于当前位置移动鼠标。

dragTo(x,y)按下左键移动鼠标。

dragRel(xOffset,yOffset)按下左键,相对于当前位置移动鼠标。

click(x,y,button)模拟点击(默认是左键)。

rightClick()模拟右键点击。

middleClick()模拟中键点击。

doubleClick()模拟左键双击。

mouseDown(x,y,button)模拟在x、y处按下指定鼠标按键。

mouseUp(x,y,button)模拟在x、y处释放指定键。

scroll(units)模拟滚动滚轮。

正参数表示向上滚动,负参数表示向下滚动。

typewrite(message)键入给定消息字符串中的字符。

typewrite([key1,key2,key3])键入给定键字符串。

press(key)按下并释放给定键。

keyDown(key)模拟按下给定键。

keyUp(key)模拟释放给定键。

hotkey([key1,key2,key3])模拟按顺序按下给定键字符串,然后以相反的顺序释放。

screenshot()返回屏幕快照的Image对象。

python识别屏幕图像后点击操作_Python学习笔记——用GUI自动化控制键盘和鼠标相关推荐

  1. python数值类型的操作_Python学习笔记,数值类型及操作

    数值类型及操作 int类型数值大小不限: 整数的进制 1,整数类型正常为10进制 2,开头加0b or 0B 为二进制 3,加0o or 0O 为8进制 4,加0x 为16进制 浮点运算中存在不确定尾 ...

  2. python input 拖入路径 去除转义 空格_python学习笔记(基础-2)(转载)

    1.输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字. 2.输入 如果要让用户从电脑输入一些字符怎么办?Python提供了一个input(),可以让用户输入字符串,并存放到一个变 ...

  3. python文件是什么的集合和抽象_python学习笔记(三):文件操作和集合

    这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 1 2 3 ...

  4. python字符串的方法和列表的方法_Python学习笔记字符串操作之join()和split()方法,列表转字符串,字符串转列表...

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  5. python中简述对象和类的关系_Python学习笔记(七)对象和类

    什么是对象 Python中所有的数据都是以对象的形式存在,无论是简单的数字类型还是复杂的代码模块.在Python中,当我们想要创建属于自己的对象或者修改已有对象的行为时,才需要关注对象的内部实现细节. ...

  6. python怎么在字符串里加入变量数字_Python学习笔记(一)之基本元素:变量,数字和字符串...

    从这篇文章开始,将记录我学习python的笔记,中间难免出错,看到的时候请不要见怪,因为我还是一个小学生. python中所有数据--布尔值,整型,浮点数,字符串,甚至大型数据结构,函数以及程序--都 ...

  7. python一般的类有三部分组成_Python学习笔记总结(三)类

    一.类简单介绍 1.介绍 类是Python面向对象程序设计(OOP)的主要工具,类建立使用class语句,通过class定义的对象. 类和模块的差异,类是语句,模块是文件. 类和实例 实例:代表程序领 ...

  8. pythonoracle数据库操作_Python学习笔记4(操作oracle数据库)

    # -*- coding: utf-8 -*- import cx_Oracle import sys import urllib import os #连接数据库 def connectDB(dbn ...

  9. python降维之时间类型数据的处理_python学习笔记之使用sklearn进行PCA数据降维

    只能说scikit-learn实在是太强大了,三言两语就能搞定PCA 1.函数原型及参数说明 sklearn.decomposition.PCA(n_components=None, copy=Tru ...

最新文章

  1. IBM的“认知计算时代”
  2. Java多线程系列--“JUC原子类”01之 框架
  3. BZOJ 3237: [Ahoi2013]连通图
  4. php从内存中获取源码_PHP源码分析之变量的存储过程分解
  5. Springboot高级特性——缓存
  6. numpy数组与矩阵运算
  7. 凭什么说 5G 安全无害?
  8. C++ 引用计数技术简介(1)
  9. 《程序员修炼之道》---- 修的是什么
  10. 掌握 Android开发的前后端应用
  11. CorelDRAW 里面如何将文字调整成半透明的颜色
  12. 《python股票量化交易从入门到实践》摘要
  13. markdown写html笔记,为知笔记 用markdown语言记漂亮的笔记
  14. Paper intensive reading (六):Altered Interactions between the GM and Colonic Mucosa Precede Polyposis
  15. 大数据在生活中有哪些应用举例?大数据好找工作吗?
  16. 怎样买保险才不会被坑?用亲身经历告诉你!
  17. java switch枚举类,Java 枚举 switch的用法
  18. AutoHotKey入门教程
  19. xlinx pcie xvc
  20. 苹果退款回调地址要求

热门文章

  1. 阿里巴巴开源力作(二)--分布式流量卫兵Sentinel简介及控制台安装
  2. 中望3D 2021 自动缩放基准面大小
  3. 如何在Excel表中快速提取想要的数据
  4. NSLayoutConstraint动态修改multiplier或constant
  5. 中年网易,生存像是一种幸运
  6. 网易人工智能事业部:“悄无声息”再捞金!
  7. revit二开之关联族参数的实现
  8. Unity3d学习记录之回合制游戏
  9. 晶振并联 1_10M电阻 稳定
  10. iOS CoreData的使用