前言

本文介绍怎样使用Python进行跨平台的GUI操作的,其中使用的一个工具包是pyautogui,PyAutoGUI可以模拟鼠标的移动、点击、拖拽,键盘按键输入、按住操作,以及鼠标+键盘的热键同时按住等操作,可以说手能动的都可以。

安装

首先安装该工具包在Linux平台上的依赖

对于Python2

sudo python-xlib

对于Python3

sudo apt-get install python3-Xlib

接着安装pyautogui

sudo pip2 install pyautogui

测试

首先用一个简单的示例来检验一下安装是否正常(移动鼠标的位置)

>>>import pyautogui

>>> screenWidth, screenHeight = pyautogui.size()

>>> pyautogui.moveTo(screenWidth / 2, screenHeight / 2)

如果鼠标指针移动到了电脑屏幕的中间,就说明安装的工具包可以正常工作.

一个有趣的示例:

import pyautogui

screenWidth, screenHeight = pyautogui.size()

currentMouseX, currentMouseY = pyautogui.position()

pyautogui.moveTo(100, 150)

pyautogui.click()

# 鼠标向下移动10像素

pyautogui.moveRel(None, 10)

pyautogui.doubleClick()

# 用缓动/渐变函数让鼠标2秒后移动到(500,500)位置

# use tweening/easing function to move mouse over 2 seconds.

pyautogui.moveTo(1800, 500, duration=2, tween=pyautogui.easeInOutQuad)

# 在每次输入之间暂停0.25秒

pyautogui.typewrite('Hello world!', interval=0.25)

pyautogui.press('esc')

pyautogui.keyDown('shift')

pyautogui.press(['left', 'left', 'left', 'left', 'left', 'left'])

pyautogui.keyUp('shift')

pyautogui.hotkey('ctrl', 'c')

这个例子是拖动鼠标在MS paint中绘制方形螺旋形状(任何图形绘制程序都行):

接着

distance = 200

while distance > 0:

pyautogui.dragRel(distance, 0, duration=0.5) # move right

distance -= 5

pyautogui.dragRel(0, distance, duration=0.5) # move down

pyautogui.dragRel(-distance, 0, duration=0.5) # move left

distance -= 5

pyautogui.dragRel(0, -distance, duration=0.5) # move up

结果如下:

使用

一切为了安全

一切安全第一^_^,你写的程序也许会失控哦,尤其是和GUI相关的.为了能够及时中断,PyAutoGUI提供了一个保护措施 : 当pyautogui.FAILSAFE = True时,如果把鼠标光标在屏幕左上角,PyAutoGUI函数就会产生pyautogui.FailSafeException异常。如果失控了,需要中断PyAutoGUI函数,就把鼠标光标在屏幕左上角。要禁用这个特性,就把FAILSAFE设置成False:

import pyautogui

pyautogui.FAILSAFE = False

通过把pyautogui.PAUSE设置成float或int时间(秒),可以为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。在函数循环执行的时候,这样做可以让PyAutoGUI运行的慢一点,非常有用。例如:

import pyautogui

pyautogui.PAUSE = 2.5

pyautogui.moveTo(100,100); pyautogui.click()

所有的PyAutoGUI函数在延迟完成前都处于阻塞状态(block).

作弊条

常用函数

pyautogui.position() #当前鼠标坐标 x , y

pyautogui.size() #当前屏幕的宽,高

pyautogui.onScreen(x,y) #如果(x,y)在屏幕范围内为True

安全

pyautogui.PAUSE = 2.5 #每个PyAutoGUI调用暂停2.5秒

当pyautogui.FAILSAFE = True时,如果把鼠标光标在屏幕左上角,PyAutoGUI函数就会产生pyautogui.FailSafeException异常。

pyautogui.FAILSAFE = True

鼠标相关

坐标系的原点是左上角。X轴(水平)坐标向右增大,Y轴(竖直)坐标向下增大。

num_seconds = 1.2

# 用num_seconds秒的时间把光标移动到(x, y)位置

pyautogui.moveTo(x, y, duration=num_seconds)

# 用num_seconds秒的时间把光标的X轴(水平)坐标移动xOffset,

# Y轴(竖直)坐标向下移动yOffset。

xOffset, yOffset = 50, 100

pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)

click()函数就是让鼠标点击,默认是单击左键,参数可以设置:

pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')

其中,button属性可以设置成left,middle和right。

所有的点击都可以用这个函数,不过下面的函数可读性更好:

pyautogui.rightClick(x=moveToX, y=moveToY)

pyautogui.middleClick(x=moveToX, y=moveToY)

pyautogui.doubleClick(x=moveToX, y=moveToY)

pyautogui.tripleClick(x=moveToX, y=moveToY)

scroll函数控制鼠标滚轮的滚动,amount_to_scroll参数表示滚动的格数。正数则页面向上滚动,负数则向下滚动:

pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY)

每个按键按下和松开两个事件可以分开处理:

pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')

pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')

键盘函数

键盘上可以按的键都可以调用:

# 每次键入的时间间隔

secs_between_keys = 0.1

pyautogui.typewrite('Hello world!\n', interval=secs_between_keys)

多个键也可以:

pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=secs_between_keys)

按键名称列表:

pyautogui.KEYBOARD_KEYS[:10]

键盘的一些热键像Ctrl-S或Ctrl-Shift-1都可以用hotkey()函数来实现:

pyautogui.hotkey('ctrl', 'a') # 全选

pyautogui.hotkey('ctrl', 'c') # 复制

pyautogui.hotkey('ctrl', 'v') # 粘贴

每个按键的按下和松开也可以单独调用:

pyautogui.keyDown(key_name)

pyautogui.keyUp(key_name)

消息弹窗函数

如果你需要消息弹窗,通过单击OK暂停程序,或者向用户显示一些信息,消息弹窗函数就会有类似JavaScript的功能:

pyautogui.alert('这个消息弹窗是文字+OK按钮')

pyautogui.confirm('这个消息弹窗是文字+OK+Cancel按钮')

pyautogui.prompt('这个消息弹窗是让用户输入字符串,单击OK')

在prompt()函数中,如果用户什么都不输入,就会返回None。

截屏函数

PyAutoGUI用Pillow/PIL库实现图片相关的识别和操作。

在Linux里面,你必须执行sudo apt-get install scrot来使用截屏特性。

# 返回一个Pillow/PIL的Image对象

pyautogui.screenshot()

pyautogui.screenshot('foo.png')

如果你有一个图片文件想在上面做点击操作,你可以用locateOnScreen()函数来定位。

# 返回(最左x坐标,最顶y坐标,宽度,高度)

pyautogui.locateOnScreen('pyautogui/looks.png')

locateAllOnScreen()函数会寻找所有相似图片,返回一个生成器:

for i in pyautogui.locateAllOnScreen('pyautogui/looks.png'):

print(i)

list(pyautogui.locateAllOnScreen('pyautogui/looks.png'))

locateCenterOnScreen()函数会返回图片在屏幕上的中心XY轴坐标值:

pyautogui.locateCenterOnScreen('pyautogui/looks.png')

如果没找到图片会返回None。定位比较慢,一般得用1~2秒

光标位置记录程序Python 2版本是:

import pyautogui, sys

print('Press Ctrl-C to quit.')

try:

while True:

x, y = pyautogui.position()

positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)

print positionStr,

print '\b' * (len(positionStr) + 2),

sys.stdout.flush()

except KeyboardInterrupt:

print '\n'

更详细信息请访问参考资料中的链接

参考资料

python gui编程 自动化框架_使用Python进行GUI操作自动化相关推荐

  1. python 自动化框架_学会Python+Selenium,分分钟搭建Web自动化框架!

    用python+selenium实现UI自动化测试,要有一些HTML和xpth的基础,当然python基础一定是必须要会的.笔者建议花点时间了解下相关基础知识,不至于后面发懵. 一.什么是seleni ...

  2. python图形编程基础知识_少儿Python基础(14) | 图形用户界面编程(1)–easygui

    可爱的小朋友们,相信小朋友对哪些带有按钮,文本,输入框这些窗口的都不陌生了,这就是图形用户编程. 目前有很多Python的GUI工具包可以选择,那今天我们来学习GUI的一个很简单的工具包easygui ...

  3. python什么时候用框架_关于python:框架和对象之间有什么区别,什么时候应该修改另一个?...

    我开始阅读python的+=语法,无意中发现了以下文章/答案:关于的交互式代码+= 所以我注意到帧和对象之间似乎有区别. . 在全局框架中,它们指向同一对象,即使它们是不同的变量:如果 l2 += [ ...

  4. python树莓派编程 沃尔弗拉姆_《 Python树莓派编程》——3.3 Python入门-阿里云开发者社区...

    本节书摘来自华章出版社<Python树莓派编程>一书中的第3章,第3.3节,作者:[美]沃尔弗拉姆·多纳特(Wolfram Donat)著韩德强 等译,更多章节内容可以访问云栖社区&quo ...

  5. python创意编程是什么_中学生Python创意编程

    本书以Python 3.7为编程工具,共分8个单元,从易到难,从基础应用到综合实战,详细讲解Python创意编程的方法和思维. 本书通过丰富有趣的实例,帮助学生学习编程思维方式,掌握Python编程基 ...

  6. python 数据驱动接口自动化框架_利用Python如何实现数据驱动的接口自动化测试...

    前言 大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取.下面话不多说了,来一起看看详细的介绍吧. 1.需求 某API,GET方法,token,m ...

  7. python深度学习include框架_用Python实现深度学习框架

    1.大咖推荐:复旦大学计算机学院教授邱锡鹏.品质科技创始人兼CEO袁进辉(@老师木).格灵深瞳创始人兼CEO赵勇.奇虎360集团副总裁邓亚峰联合推荐 2.干货满满:从零开始用Python实现自己的深度 ...

  8. python硬件编程智能家居_利用 Python 的力量,实现 Tableau 与智能家居系统集成

    导语 你有想过将智能家居和 Tableau 结合么?Tableau 爱好者 Ann Jackson 就在自己家中,尝试实现将智能家居系统与 Tableau 仪表板集成在一起.根据灯光颜色非常" ...

  9. python编写命令行框架_使用 Python 和 Click 编写命令行应用程序

    简评:python 构建命令行应用的第三方比较有名的包除了 click 之外还有一个叫 docopt,这是一个以文档先行为目标的包.个人是比较倾向于 Click 的,看了这篇文章之后,也很快写了一个 ...

最新文章

  1. c# WinForm英雄联盟挂机源码及实现原理
  2. nodejs readfilesync 路径_Linux 磁盘多路径聚合multipath
  3. 【工作记录】android手势事件操作记录
  4. 创建对象属性赋值的内存理解
  5. Vuex的API文档
  6. video禁止谷歌浏览器中出现的视频下载按钮
  7. jdi屏幕斜纹_如何看待小米6使用有斜纹的jdi屏幕?
  8. GNSS_NMEA 0183协议的校验和计算方法_C/C++
  9. 微信小游戏开发怎么选游戏引擎
  10. 计算机的开机自检由什么程序完成,开机自检,教您怎么取消电脑上的开机自检...
  11. Jmeter设置之ramp-up
  12. 关键词搜索-关键词搜索引擎工具-关键词搜索排行榜
  13. 软考高级-系统架构设计师经验分享
  14. 通过js引入本地图片地址
  15. shell in find exclude
  16. 数学和算法之---排列组合
  17. Arduino实验——蜂鸣器播放《致爱丽丝》
  18. 热水比冷水结冰快,这就是所谓的姆潘巴现象
  19. 爬虫:汽车之家字体反爬
  20. 轻松玩转新编日语4 zz江沪

热门文章

  1. Servlet3.0 多图片,文件上传
  2. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法
  3. WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
  4. [oc学习日记]代理模式
  5. 超34款吸费手机被曝光下架 天语TCL大显等在其中
  6. ASP.NET MVC3 Action Filters详解(一)
  7. python 个人项目_80个Python练手项目列表,学完立马成大神 牛逼了
  8. bmp转换tiff c++代码_如何快速转换图片格式
  9. erp框架 saas_传统ERP软件和SaaS管理软件的区别
  10. 设计字体打包_再也不用熬夜设计字体了!525款世界级绝美PS字体包免费送