0

这是 Shell 的完整回溯:

 File "C:\Users\Sean\Documents\pyships\mouseclicker.py", line 22, in <module>
    pyautogui.click()
  File "C:\Users\Sean\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pyautogui\__init__.py", line 362, in click
    platformModule._click(x, y, 'left')
  File "C:\Users\Sean\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pyautogui\_pyautogui_win.py", line 437, in _click
    _sendMouseEvent(MOUSEEVENTF_LEFTCLICK, x, y)
  File "C:\Users\Sean\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pyautogui\_pyautogui_win.py", line 480, in _sendMouseEvent
    raise ctypes.WinError()
PermissionError: [WinError 5] Access is denied.

我目前不好的解决方法是在 _pyautogui_win.py 中注释掉以下行:

if ctypes.windll.kernel32.GetLastError() != 0:
raise ctypes.WinError()

Python 以管理员模式运行,不知道如何正确解决此问题。特别是因为它昨天还在工作,今天才抛出错误。最奇怪的部分是它实际上执行了点击,然后挂起脚本。

导致它的特定代码行是:

    pyautogui.press('d')
    pyautogui.click()
    pyautogui.keyUp('d')

如果有人知道将键修饰符附加到点击的更好方法,那也很棒!

4

1 回答 1

0

我现在有 3 个解决方法:

1 注释掉 _pyautogui_win.py 部分的解决方案:

2 创建一个错误陷阱,专门忽略 WinError 5

def ClickFix():
    try:
        pyautogui.click()
    except PermissionError:
        pass

3 制作自己的包装

点安装win32api

这将安装 win32api 及其先决条件,然后为 win32api 制作一个简单的点击包装器,使用此功能:

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

感谢PyAutoGui 单击#2 的权限错误

感谢pyautogui 在点击#3时崩溃

于 2017-03-11T01:55:09.633 回答