pynput - импорт клавиатуры и мыши - PullRequest
0 голосов
/ 08 сентября 2018

У меня проблемы с импортом некоторых вещей из библиотеки 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 голосов
/ 09 сентября 2018

Я думаю, что проблема в том, что вы импортируете два разных Controller s.

Второй (pynput.keyboard.Controller) переопределяет первый, поскольку он является последним определенным.Следовательно, ваша переменная mouse на самом деле является pynput.keyboard.Controller объектом, а не pynput.mouse.Controller объектом, как вы ожидали.

Ошибка возникает при вызове mouse.press(Button.left), поскольку объект Keyboard пытается нажатьa Button, что он не может сделать (он может только нажимать Key s).

Чтобы исправить это, импортируйте модули «обычно», используя import/as вместо импорта «определенных» их частей, используяfrom/import:

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

Таким образом, вы можете различать два контроллера:

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

Надеюсь, это поможет - пожалуйста, ответьте на любой отзыв!

...