zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    libeXosip2(1-2) -- How-To initiate, modify or terminate calls.
    libeXosip2(1-1) -- How-To initialize libeXosip2.
    libeXosip2(1) -- Modules
    麦田的守望者背景与分析
    statfs函数说明
    c++ 14
    c++ 13
    URAL 2078~2089
    2018 Multi-University Training Contest 1
    Codeforces Round #502
  • 原文地址:https://www.cnblogs.com/Collin-pxy/p/14037612.html
Copyright © 2011-2022 走看看