# 1--介绍:
# PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux)。
# 2--安装:
# 在 windows系统上:
pip3 install pyautogui
# 在 mac系统上:
sudo pip3 install pyobjc-core
sudo pip3 install pyobjc
sudo pip3 install pyautogui
# 在 linux系统上:
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
# 例 1:
import pyperclip
import pyautogui
# 单击文本框目标:
pyautogui.click(130,30)
pyperclip.copy(u'你好啊Collin') # # pyperclip模块 pyperclip.copy(text)
pyautogui.hotkey('ctrl', 'v') # yautogui.hotkey('keyname1'[,"keyname2"[,...]])
# 例 2:鼠标移动到屏幕中间:
import pyautogui
screenWidth, screenHeight = pyautogui.size() # 获取屏幕分辨率 pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2) # 移动鼠标到 pyautogui.moveTo(weight,height)
# 3-常用的函数:
# 3.1-获取当前鼠标的坐标
p=pyautogui.position()
p # Point(x=658, y=238)
w,h=p # 解包
print(w) # 668
print(h) # 238
# 3.2-获取当前屏幕的分辨率(宽度和高度)
resolution=pyautogui.size()
print(resolution) # Size(width=1920, height=1080)
w,h=resolution # 解包
print(w) # 1920
print(h) # 1080
# 3.3-判断(x,y)是否在屏幕上:
x, y = 122, 244
print(pyautogui.onScreen(x, y)) # True
# 4-保护措施:
# 4.1-延迟:
pyautogui.PAUSE = 2.5
# 4.2-FailSafeException异常:
# 当pyautogui.FAILSAFE = True时,如果把鼠标光标在屏幕左上角,PyAutoGUI函数就会产生pyautogui.FailSafeException异常。
pyautogui.FAILSAFE = True
# 5-鼠标函数:
# 坐标系的原点是左上角。X轴(水平)坐标向右增大,Y轴(竖直)坐标向下增大。
# 5.1 绝对移动,鼠标从原点移动到指定位置:pyautogui.moveTo(x,y,duration=num_seconds) duration默认为0.1
screenWidth, screenHeight = pyautogui.size() # 获取屏幕分辨率 pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2) # 移动鼠标到 pyautogui.moveTo(weight,height)
pyautogui.moveTo(200, 300) # 移动鼠标到 pyautogui.moveTo(weight,height)
pyautogui.moveTo(100, 200) # 光标移动到(100, 200)位置
pyautogui.moveTo(None, 500) # 光标移动到(100, 500)位置 None表示此坐标不变
pyautogui.moveTo(600, None) # 光标移动到(600, 500)位置
pyautogui.moveTo(1000, 1000, duration=2) # 光标在2秒内移动到(1000, 1000)位置
# 5.2 相对移动,鼠标从当前点偏移一定距离:pyautogui.moveRel(xOffset, yOffset, duration=num_seconds) duration默认为0.1
num_seconds = 1.5 # 用 num_seconds秒的时间把光标移动到(x, y)位置
xOffset, yOffset = 100, 100
pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)
# 5.3 鼠标拖拽:
# PyAutoGUI的dragTo()和dragRel()函数与moveTo()和moveRel()函数类似。button参数可以设置成left,middle和right三个键。
pyautogui.dragTo(100, 200, button='left') # 按住鼠标左键,把鼠标拖拽到(100, 200)位置
pyautogui.dragTo(300, 400, 2, button='left') # 按住鼠标左键,用2秒钟把鼠标拖拽到(300, 400)位置
pyautogui.dragTo(30, 0, 2, button='right') # 按住鼠标右键,用2秒钟把鼠标拖拽到(30,0)位置
# 5.4 鼠标点击:click()函数就是让鼠标点击,默认是单击左键,参数可以设置:
# pyautogui.click(x=moveToX, y=moveToY[, clicks=num_of_clicks, interval=secs_between_clicks, button='left'])
pyautogui.click(300,300,2,1.5,"right") # 其中,button属性可以设置成left,middle和right
# 5.5 更简单的鼠标点击:
pyautogui.rightClick(x=moveToX, y=moveToY) # 没有多余的参数
pyautogui.middleClick(x=moveToX, y=moveToY)
pyautogui.doubleClick(x=moveToX, y=moveToY)
pyautogui.tripleClick(x=moveToX, y=moveToY) # 3连击
# 5.6 scroll函数控制鼠标滚轮的滚动,amount_to_scroll参数表示滚动的格数。正数则页面向上滚动,负数则向下滚动:
# pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY)
pyautogui.scroll(clicks=50, x=100, y=100)
# 5.7 mouseDown 和 mouseUp
pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')
pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')
# 6-键盘函数:
# 6.1 在目标输入内容或键:pyautogui.typewrite(content/key,interval=)
pyautogui.typewrite('Hello world!
', interval=0.5) # 输入内容
pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=secs_between_keys) # 输入多个键
# 6.2 获取键盘列表:
pyautogui.KEYBOARD_KEYS[:10] # [' ', '
', '
', ' ', '!', '"', '#', '$', '%', '&']
pyautogui.typewrite(pyautogui.KEYBOARD_KEYS[:10],0.2)
# 6.3 keydown 和 keyup: # 使用完keyDown 之后记得 keyUp
pyautogui.keyDown(key_name) # 按下
pyautogui.keyUp(key_name) # 松开
# 6.4 按压键盘:pyautogui.press()
# press()函数其实是keyDown()和keyUp()函数的包装,模拟的按下然后松开两个动作。这两个函数可以单独调用。
# 例:按下shift键的同时按3次左方向键:
# 1)按下`shift`键
pyautogui.keyDown('shift')
pyautogui.press('left')
pyautogui.press('left')
pyautogui.press('left')
# 2)松开`shift`键
pyautogui.keyUp('shift')
# 和typewrite()函数一样,可以用数组把一组键传入press()。
# 例:
pyautogui.press(['left', 'left', 'left'])
# 6.5 组合热键:6.4的操作有点麻烦,可以使用 hotkey,更加高效:
pyautogui.hotkey('ctrl', 'a') # 全选
pyautogui.hotkey('ctrl', 'c') # 复制
pyautogui.hotkey('ctrl', 'v') # 粘贴
# 7-消息弹窗: 使用的是 Tkinter
pyautogui.alert(text='', title='', button='OK') # button参数可以定制:
pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel']) # buttons参数可以定制:
pyautogui.confirm(text='', title='', buttons=range(10)) # buttons参数可以定制:
pyautogui.prompt(text='', title='' , default='') # 注:无 button/buttons参数
pyautogui.password(text='', title='', default='', mask='*') # 用于输入密码
# 例:
pyautogui.alert('警告弹窗') # OK按钮 返回 'OK'
pyautogui.confirm('确认弹窗') # OK+Cancel按钮 返回 'OK'或'Cancel'
pyautogui.prompt('提示弹窗') # OK+Cancel按钮 返回 输入的内容或 None
# 什么都不输入点ok,返回"",无论输啥点cancel返回 None
pyautogui.password('请输入您空军一号的密码:') # 用于输入密码
# 8-截屏函数,图片操作:
# PyAutoGUI用Pillow/PIL库实现图片相关的识别和操作;在Linux里面,须执行 sudo apt-get install scrot来使用截屏特性。
# 8.1 截图:im = pyautogui.screenshot(filefullpath,region=(x_start, y_start, w ,h))
im=pyautogui.screenshot() # 返回一个 Image对象
pyautogui.screenshot(filefullpath) # 保存到一个路径
pyautogui.screenshot(r"C:UsersXuYunPengDesktop est.png")
im = pyautogui.screenshot(region=(0, 0, 300 ,400)) # 截取指定大小的屏幕
# 8.2 定位图片位置:pyautogui.locateOnScreen()/pyautogui.center()/pyautogui.locateCenterOnScreen
# 8.2.1 pyautogui.locateOnScreen() 函数来定位:返回 Box(left=最左x坐标,top=最顶y坐标,width=宽度,height=高度)
location=pyautogui.locateOnScreen('pyautogui/looks.png') # Box(left=0, top=0, width=300, height=400)
pyautogui.center(location) # 此函数用于从 location即 Box对象中获取中心点坐标
pyautogui.locateCenterOnScreen('pyautogui/looks.png') # 直接从图片文件中获取中心点坐标, 没找到图片则会返回None。
# 8.2.2 locateAllOnScreen()函数会寻找所有相似图片,返回一个生成器:
for i in pyautogui.locateAllOnScreen('pyautogui/looks.png'):
print(i) # (0, 1040, 48, 40)
list(pyautogui.locateAllOnScreen('pyautogui/looks.png')) # 将生成器转化为列表 [(0, 1040, 48, 40)]
# 8.2.3 locateCenterOnScreen()函数会返回图片在屏幕上的中心XY轴坐标值:
pyautogui.locateCenterOnScreen('pyautogui/looks.png') # (24, 1060) 没找到图片则会返回None。
# 实例:
# 例 1:使用 pyautogui打开计算器界面,点击计算器上的按键 5:
import pyautogui
# 第一步:定位并点击【搜索】图标:
x,y=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testsearch_button.png")
pyautogui.click(x=x,y=y,clicks=1,button='left')
# 第二步:定位【输入框】并输入"calculator":
# x,y=100,1024
# 或:
# location=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testsearch_input.png")
# x,y=pyautogui.center(location)
# 或:
x,y=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testsearch_input.png")
pyautogui.moveTo(x,y)
pyautogui.typewrite('calculator', interval=0.5)
# 第三步:定位并点击计算器 【open】 按钮:
x,y=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testcalculator_open.png")
pyautogui.click(x=x,y=y,clicks=1,button='left')
# 定位并点击按钮 【5】:
x,y=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testcal_5.png")
pyautogui.click(x=x,y=y,clicks=1,button='left')
# 例 2:使用 pyautogui打开两个计算器界面,拖拽其中一个,使两个窗口并列,分别点击两个计算器上的相同按键 5:
for i in range(0,2):
# 第一步:定位并点击【搜索】图标:
x,y=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testsearch_button.png")
pyautogui.click(x=x,y=y,clicks=1,button='left')
# 第二步:定位【输入框】并输入"calculator":
# x,y=100,1024
# 或:
# location=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testsearch_input.png")
# x,y=pyautogui.center(location)
# 或:
x,y=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testsearch_input.png")
pyautogui.moveTo(x,y)
pyautogui.typewrite('calculator', interval=0.5)
# 第三步:定位并点击计算器 【open】 按钮:
x,y=pyautogui.locateCenterOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testcalculator_open.png")
pyautogui.click(x=x,y=y,clicks=1,button='left')
# 第四步:拖拽第2个计算器窗口至指定位置:
pyautogui.moveTo(295,255)
pyautogui.dragTo(700, 165, button='left')
# 第五步:在两个计算器窗口中分别输入按键 5:
for location in pyautogui.locateAllOnScreen(image=r"C:UsersXuYunPengDesktopPyautogui_testcal_5.png"):
print(location)
x,y=pyautogui.center(location)
pyautogui.click(x=x,y=y,clicks=1,button='left')
作者:Collin wx:pxy123abc tel:17763230890