Python Pyautogui操作客户端程序

# 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
原文地址:https://www.cnblogs.com/Collin-pxy/p/14037612.html