Pynput-导入键盘和鼠标

时间:2018-09-08 19:24:07

标签: python pynput

我无法从pynput库中导入某些内容。

在我的代码中,我想使用python库(pynput)在鼠标和键盘上执行一些操作。当我仅导入键盘或鼠标时,它可以工作,但是有时同时导入两者时,则会给我一些错误。

这是我的代码:

from pynput.mouse import Button, Controller
from pynput.keyboard import Key, Controller

from time import sleep

mouse = Controller()
keyboard = Controller()
rock1x = 691
rock1y = 466
rock2x = 548
rock2y = 350
rock3x = 687
rock3y = 234

while (1):
    drop1x = 1183
    drop1y = 325
    drop2x = 1220
    drop2y = 325
    drop3x = 1263
    drop3y = 325
    drop4x = 1303
    drop4y = 325

    for i in range(8):
        sleep(2.5)
        mouse.position = (rock2x,rock2y)
        sleep(0.3)
        mouse.press(Button.left)
        mouse.release(Button.left)
        sleep(2.1)

        mouse.position = (rock3x,rock3y)
        sleep(0.3)

        mouse.press(Button.left)
        mouse.release(Button.left)
        sleep(2.1)

        mouse.position = (rock1x,rock1y)

        sleep(0.2)
        mouse.press(Button.left)
        mouse.release(Button.left)

    for i in range(3):
        keyboard.press(Key.shift)
        for x in range(6):
            mouse.position = (drop1x,drop1y)
            sleep(0.3)
            mouse.press(Button.left)
            mouse.release(Button.left) 
            drop1y=drop1y+35
        for x in range(6):
            mouse.position = (drop2x,drop2y)
            sleep(0.3)
            mouse.press(Button.left)
            mouse.release(Button.left) 
            drop2y=drop2y+35
        for x in range(6):
            mouse.position = (drop3x,drop3y)
            sleep(0.3)
            mouse.press(Button.left)
            mouse.release(Button.left) 
            drop3y=drop3y+35
        for x in range(6):
            mouse.position = (drop4x,drop4y)
            sleep(0.3)
            mouse.press(Button.left)
            mouse.release(Button.left) 
            drop4y=drop4y+35
        keyboard.release(Key.shift)
    sleep(3)

运行此代码时,出现以下错误:

Traceback (most recent call last):
  File "mining.py", line 29, in <module>
    mouse.press(Button.left)
  File "/home/filipe/.local/lib/python2.7/site-packages/pynput/keyboard/_base.py", line 366, in press
    if resolved.is_dead:
AttributeError: 'NoneType' object has no attribute 'is_dead'

但是当我评论第二行时:

from pynput.keyboard import Key, Controller

代码将一直运行到:

keyboard.press(Key.shift)

并给我错误:

Traceback (most recent call last):
  File "mining.py", line 48, in <module>
    keyboard.press(Key.shift)
NameError: name 'Key' is not defined

我应该如何从pynput库导入以使用鼠标和键盘?

1 个答案:

答案 0 :(得分:1)

我认为问题在于您要导入两个不同的Controller

第二个(pynput.keyboard.Controller)覆盖第一个,因为它是最后一个定义的。因此,变量mouse实际上是pynput.keyboard.Controller对象,而不是您期望的pynput.mouse.Controller对象。

当您调用mouse.press(Button.left)时发生错误,因为Keyboard对象试图按Button,而它不能这样做(只能按Key s)。

要解决此问题,请使用import/as“一般”导入模块,而不要使用from/import导入模块的“特定”部分:

import pynput.mouse    as ms
import pynput.keyboard as kb

这样,您可以区分两个控制器:

mouse    = ms.Controller()
keyboard = kb.Controller()

希望这会有所帮助-请提供任何反馈意见!