PyAutoGUI中⽂版⽂档
PyAutoGUI——让所有GUI都⾃动化
,Python⾃动化⼯具,更适合处理GUI任务,⽹页任务推荐:
+Firefox记录(Chromedriver和Phantomjs也很给⼒,Phantomjs虽然是⽆头浏览器,但有时定位不准),然后⽤Python写单元测试
处理get/post请求写⼀堆代码⾃动化处理,都在后台运⾏,不⽤运⾏浏览器,⾮常适合处理表单
没有功能多,但是Python让⽣活更简单。
同时推荐⼀本Python⽹络数据采集(图灵社区取的名字^_^)的基础书籍,可以和PyAutoGUI结合使⽤。
tl;dr
2015-08-17:输⼊中⽂bug没有解决,⽬前的解决⽅案是Python 2.X环境下安装和pyautogui,⽤复制粘贴来实现。
In [ ]:
import pyperclip
import pyautogui
# PyAutoGUI中⽂输⼊需要⽤粘贴实现
# Python 2版本的pyperclip提供中⽂复制
def paste(foo):
pyautogui.hotkey('ctrl', 'v')
foo = u'学⽽时习之'
# 移动到⽂本框
pyautogui.click(130,30)
paste(foo)
1.简介
1.1 ⽬的
PyAutoGUI是⼀个纯Python的GUI⾃动化⼯具,其⽬的是可以⽤程序⾃动控制⿏标和键盘操作,多平台⽀持(Windows,OS
X,Linux)。可以⽤pip安装,Github上有。
下⾯的代码让⿏标移到屏幕中央。
In [ ]:
import pyautogui
screenWidth, screenHeight = pyautogui.size()
PyAutoGUI可以模拟⿏标的移动、点击、拖拽,键盘按键输⼊、按住操作,以及⿏标+键盘的热键同时按住等操作,可以说⼿能动的都可以。
In [ ]:
import pyautogui
screenWidth, screenHeight = pyautogui.size()
currentMouseX, currentMouseY = pyautogui.position()
pyautogui.click()
# ⿏标向下移动10像素
pyautogui.doubleClick()
# ⽤缓动/渐变函数让⿏标2秒后移动到(500,500)位置
# use tweening/easing function to move mouse over 2 seconds.
# 在每次输⼊之间暂停0.25秒
pyautogui.press('esc')
pyautogui.keyDown('shift')
pyautogui.press(['left', 'left', 'left', 'left', 'left', 'left'])
pyautogui.keyUp('shift')
pyautogui.hotkey('ctrl', 'c')
In [ ]:
distance =200
while distance >0:
pyautogui.dragRel(distance, 0, duration=0.5) # 向右
distance -=5
pyautogui.dragRel(0, distance, duration=0.5) # 向下
pyautogui.draIn gRel(-distance, 0, duration=0.5) # 向左
distance -=5
pyautogui.dragRel(0, -distance, duration=0.5) # 向上
1.4 保护措施(Fail-Safes)
就像《魔法师的学徒》(Sorcerer’s Apprentice)会担⽔的扫帚,可以担⽔,却⽆⼒阻⽌⽔漫浴室。你的程序也可能会失控(即使是按照你的意思执⾏的),那时就需要中断。如果⿏标还在⾃动操作,就很难在程序窗⼝关闭它。
为了能够及时中断,PyAutoGUI提供了⼀个保护措施。当pyautogui.FAILSAFE = True时,如果把⿏标光标在屏幕左上
⾓,PyAutoGUI函数就会产⽣pyautogui.FailSafeException异常。如果失控了,需要中断PyAutoGUI函数,就把⿏标光标在屏幕左上⾓。要禁⽤这个特性,就把FAILSAFE设置成False:
import pyautogui
pyautogui.FAILSAFE =False
通过把pyautogui.PAUSE设置成float或int时间(秒),可以为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。在函数循环执⾏的时候,这样做可以让PyAutoGUI运⾏的慢⼀点,⾮常有⽤。例如:
In [ ]:
import pyautogui
pyautogui.PAUSE =2.5
所有的PyAutoGUI函数在延迟完成前都处于阻塞状态(block)。(未来计划增加⼀个可选的⾮阻塞模式来调⽤函数。)
建议PAUSE和FAILSAFE⼀起使⽤。
2 安装与依赖
PyAutoGUI⽀持Python 2.x和Python 3.x
Windows:PyAutoGUI没有任何依赖,因为它⽤Python的ctypes模块所以不需要pywin32
pip3 install pyautogui
OS X:PyAutoGUI需要运⾏AppKit和Quartz模块。这个模块在PyPI上的按住顺序是pyobjc-core和pyobjc
sudo pip3 install pyobjc-core
sudo pip3 install pyobjc
sudo pip3 install pyautogui
Linux:PyAutoGUI需要python-xlib(Python 2)、python3-Xlib(Python 3)
sudo pip3 install python3-xlib
sudo apt-get scrot
sudo apt-get install python-tk
sudo apt-get install python3-dev
sudo pip3 install pyautogui
3.速查表(⼩抄,Cheat Sheet)
3.1 常⽤函数
In [ ]:
import pyautogui
# 当前⿏标的坐标
pyautogui.position()
Out[ ]:
(123, 372)
In [ ]:
# 当前屏幕的分辨率(宽度和⾼度)
pyautogui.size()
Out[ ]:
(1920, 1080)
In [ ]:
# (x,y)是否在屏幕上
x, y =122, 244
python官方文档中文版
Out[ ]:
True
3.2 保护措施
PyAutoGUI函数增加延迟为2.5秒:
In [ ]:
import pyautogui
pyautogui.PAUSE =2.5
当pyautogui.FAILSAFE = True时,如果把⿏标光标在屏幕左上⾓,PyAutoGUI函数就会产⽣pyautogui.FailSafeException异常。In [ ]:
import pyautogui
pyautogui.FAILSAFE =True
3.3 ⿏标函数
坐标系的原点是左上⾓。X轴(⽔平)坐标向右增⼤,Y轴(竖直)坐标向下增⼤。
In [ ]:
num_seconds =1.2
# ⽤num_seconds秒的时间把光标移动到(x, y)位置
# ⽤num_seconds秒的时间把光标的X轴(⽔平)坐标移动xOffset,
# Y轴(竖直)坐标向下移动yOffset。
xOffset, yOffset =50, 100
click()函数就是让⿏标点击,默认是单击左键,参数可以设置:
In [ ]:
pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')
其中,button属性可以设置成left,middle和right。
所有的点击都可以⽤这个函数,不过下⾯的函数可读性更好:
In [ ]:
pyautogui.rightClick(x=moveToX, y=moveToY)
pyautogui.middleClick(x=moveToX, y=moveToY)
pyautogui.doubleClick(x=moveToX, y=moveToY)
scroll函数控制⿏标滚轮的滚动,amount_to_scroll参数表⽰滚动的格数。正数则页⾯向上滚动,负数则向下滚动:In [ ]:
pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY)
每个按键按下和松开两个事件可以分开处理:
In [ ]:
3.4 键盘函数
键盘上可以按的键都可以调⽤:
In [ ]:
# 每次键⼊的时间间隔
secs_between_keys =0.1
多个键也可以:
In [ ]:
按键名称列表:
In [ ]:
pyautogui.KEYBOARD_KEYS[:10]
Out[ ]:
['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&']
键盘的⼀些热键像Ctrl-S或Ctrl-Shift-1都可以⽤hotkey()函数来实现:
In [ ]:
pyautogui.hotkey('ctrl', 'a') # 全选
pyautogui.hotkey('ctrl', 'c') # 复制
pyautogui.hotkey('ctrl', 'v') # 粘贴
每个按键的按下和松开也可以单独调⽤:
In [ ]:
pyautogui.keyDown(key_name)
pyautogui.keyUp(key_name)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论