Python自动化控制鼠标和键盘操作 |
您所在的位置:网站首页 › 模拟键盘操作电脑的脚本 › Python自动化控制鼠标和键盘操作 |
就像巫师学徒的魔法扫帚被编程为不断用水填充(然后过度填充)浴缸一样,程序中的错误可能会使其失控。如果鼠标光标自行移动,则很难使用鼠标关闭程序。 ![]() 作为一项安全功能,默认情况下启用故障安全功能。当调用 PyAutoGUI 函数时,如果鼠标位于主监视器的四个角中的任何一个,它们将引发 pyautogui.FailSafeException。调用每个 PyAutoGUI 函数后都有十分之一秒的延迟,让用户有时间将鼠标猛击到角落以触发故障安全。 您可以通过设置 pyautogui.FAILSAFE = False 来禁用此故障保护。我强烈建议您不要禁用故障保护。 §02 安装在 Windows 上,您可以使用 py.exe 程序运行最新版本的 Python: py -m pip install pyautogui ![]() pyautogui.position() 2、获取当前屏幕分辨率pyautogui.size() 3、判断坐标(x, y)是否在屏幕内pyautogui.onScreen(x, y) ![]() pyautogui.PAUSE = 2.5 当故障安全模式为 True 时,将鼠标移动到左上角将引发一个 pyautogui.FailSafeException 可以中止您的程序(默认情况下启用FAILSAFE = True):pyautogui.FAILSAFE = True 三、鼠标功能 1、移动、拖动鼠标XY 坐标在屏幕左上角有 0, 0 原点。 X 向右增加,Y 向下增加。如果 duration 为 0 或未指定,则立即移动。注意: 在 Mac 上不能立即拖动。 (1)在 num_second 秒内将鼠标移动到 XY 坐标pyautogui.moveTo(x, y, duration=num_seconds) (2)相对于当前位置移动鼠标pyautogui.move(xOffset, yOffset, duration=num_seconds) pyautogui.moveRel(xOffset, yOffset, duration=num_seconds) 注: 以上两函数功能相同 (3)将鼠标拖到 XYpyautogui.dragTo(x, y, duration=num_seconds) (4)相对于其当前位置拖动鼠标pyautogui.drag(xOffset, yOffset, duration=num_seconds) pyautogui.dragRel(xOffset, yOffset, duration=num_seconds) 注: 以上两函数功能相同 (5)其他说明以上四种函数中的x、y、xOffset、yOffset参数可以取值为None,此时表示 “当前鼠标光标位置” ,如: >>> pyautogui.moveTo(100, 200) # 把鼠标移动到(100, 200)处 >>> pyautogui.moveTo(None, 500) # 把鼠标移动到(100, 500)处 >>> pyautogui.moveTo(600, None) # 把鼠标移动到(600, 500)处 >>> pyautogui.move(-30, 0) # 把鼠标向左移动 30 pixels >>> pyautogui.move(-30, None) # 把鼠标向左移动 30 pixels (6)补间/缓动功能补间是一个额外的功能,可以使 鼠标光标开始缓慢移动,然后向目的地加速 或 鼠标光标开始快速移动,但在接近目的地时变慢。如果您不关心这一点,您可以跳过本节;如果您对此功能感兴趣,可以查看 PyAutoGUI的Tween / Easing功能。 2、点击鼠标 (1)总函数click()调用 click() 只需在鼠标当前位置用左键单击鼠标一次,但关键字参数可以改变这一点: pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left') button 关键字参数可以是'left'、'middle'或'right'。 ■ 如下例: pyautogui.click(10,10) # 鼠标点击指定位置,默认左键 pyautogui.click(10,10,button='left') # 单击左键 pyautogui.click(1000,300,button='right') # 单击右键 pyautogui.click(1000,300,button='middle') # 单击中间 (2)独立函数所有的点击都可以用 click() 来完成,但下面这些函数的存在是为了便于阅读。关键字参数是可选的: 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)其他功能可以单独调用单个按钮按下和释放事件: pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')(按下) pyautogui.mouseUp(x=moveToX, y=moveToY, button='left')(释放) 3、滚动滚轮正向滚动将向上滚动,负向滚动将向下滚动: pyautogui.scroll(amount_to_scroll, x=moveToX, y=moveToY) ■ 如下例: pyautogui.scroll(300) # 向上滚动300个单位 pyautogui.scroll(-300) # 向下滚动300个单位 四、键盘功能 1、write() 函数主要的键盘函数是 write()。此函数将键入传递的字符串中的字符。要在按下每个字符键之间添加延迟间隔,请为 interval 关键字参数传递一个 int 或 float 数据。注意:使用 write() 只能按单字符键,因此不能按 Shift 或 F1 键 >>> pyautogui.write('Hello world!') # 立即打印出"Hello world!" >>> pyautogui.write('Hello world!', interval=0.25) # 打印出"Hello world!",且每个字符后有四分之一秒的延迟 2、press(), keyDown() 和 keyUp() 函数要解决上述问题,可调用 press()函数并将 pyautogui.KEYBOARD_KEYS 中的字符串传递给它,例如 enter、esc、f1。请参阅 KEYBOARD_KEYS。 press() 函数实际上只是 keyDown() 和 keyUp() 函数的包装器,它们模拟按下一个键然后松开它。这些函数可以自己调用。例如,要在按住 Shift 键的同时按向左箭头键三次,请调用以下代码: >>> pyautogui.keyDown('shift') # hold down the shift key >>> pyautogui.press('left') # press the left arrow key >>> pyautogui.press('left') # press the left arrow key >>> pyautogui.press('left') # press the left arrow key >>> pyautogui.keyUp('shift') # release the shift key注: ① pyautogui.press('left'); pyautogui.press('left'); pyautogui.press('left')等价于 pyautogui.press(['left', 'left', 'left']) 或 pyautogui.press('left', presses=3) ;② 要在每次按下之间添加延迟间隔,可以为 interval 关键字参数传递一个 int 或 float 数据。 3、hotkey() 函数为了方便按下热键或键盘快捷键,可以向 hotkey() 传递几个按键字符串,这些字符串将按顺序按下,然后以相反的顺序释放。下面两段代码是等价的: 代码一: >>> pyautogui.hotkey('ctrl', 'shift', 'esc')代码二: >>> pyautogui.keyDown('ctrl') >>> pyautogui.keyDown('shift') >>> pyautogui.keyDown('esc') >>> pyautogui.keyUp('esc') >>> pyautogui.keyUp('shift') >>> pyautogui.keyUp('ctrl')注: 要在每次按下之间添加延迟间隔,可以为 interval 关键字参数传递一个 int 或 float 数据。 4、KEYBOARD_KEYS 以下是传递给 press()、keyDown()、keyUp() 和 hotkey() 函数的有效字符串: 如果你需要暂停程序直到用户点击确定,或者想向用户显示一些信息,可以使用消息框功能,消息框函数的名称与 JavaScript 相似。 1、提示框/警告框pyautogui.alert('This displays some text with an OK button.') ![]() ![]() pyautogui.confirm('This displays text and has an OK and Cancel button.') ![]() ![]() pyautogui.confirm('选择一项', buttons=['A', 'B', 'C']) ![]() pyautogui.prompt('This lets the user type in a string and press OK.') ![]() ![]() pyautogui.password('Enter password (text will be hidden)') ![]() ![]() 我们控制鼠标的操作,不能盲目的进行,所以我们需要监控屏幕上的内容,从而决定要不要进行对应的操作。 1、获取屏幕截图pyautogui 提供了一个方法 screenshot(),可以返回一个Pillow的image对象,这里有三个常用函数: (1)im = pyautogui.screenshot()返回屏幕的截图,是一个Pillow的image对象。 返回im对象上,(500,500) 这一点像素的颜色,是一个RGB元组。 pyautogui.pixelMatchesColor(500,500,(12,120,400)) 一个对比函数,对比的是屏幕上 (500,500) 这一点像素的颜色,与所给的元素是否相同。 如果您有想要单击的内容的图像文件,您可以使用 locateOnScreen() 在屏幕上找到它。 # 返回第一次找到图像时的坐标与图像尺寸(left, top, width, height) >>> pyautogui.locateOnScreen('looksLikeThis.png') (863, 417, 70, 13)locateAllOnScreen() 函数将为它在屏幕上找到的所有位置返回一个生成器: >>> for i in pyautogui.locateAllOnScreen('looksLikeThis.png') ... ... (863, 117, 70, 13) (623, 137, 70, 13) (853, 577, 70, 13) (883, 617, 70, 13) (973, 657, 70, 13) (933, 877, 70, 13) >>> list(pyautogui.locateAllOnScreen('looksLikeThis.png')) [(863, 117, 70, 13), (623, 137, 70, 13), (853, 577, 70, 13), (883, 617, 70, 13), (973, 657, 70, 13), (933, 877, 70, 13)]locateCenterOnScreen() 函数只返回图像在屏幕上的中间位置的 XY 坐标: >>> pyautogui.locateCenterOnScreen('looksLikeThis.png') # returns center x and y (898, 423)如果在屏幕上找不到图像,这些函数将返回 None。 注意:定位功能很慢,可能需要一两秒钟。 相关文章: PyAutoGUI’s documentation Python基础之pyautogui模块(详细总结鼠标键盘操作) Python库PyAutoGUI应用实例 PyAutoGUI的Tween / Easing功能 用Python实现自动发消息,自定义内容,太省事了! 女朋友让我深夜十二点催她睡觉,我有Python我就不干 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |