【问题标题】:pyautogui crashes whenever it clickspyautogui 在单击时崩溃
【发布时间】:2019-08-07 21:55:47
【问题描述】:

基本上每当我调用 pyautogui 来单击它时,它都会执行它,但随后会导致程序崩溃。这是程序:

import pyautogui
import time
pyautogui.click(650, 200, 10)
print("started")
while 2 == 2:
    x+1
    waittime = random.randrange(35, 40, 1)
    pyautogui.click(600, 680, waittime)
    pyautogui.click(1270, 0, 5)
    if (x % 4) == 0:
        pyautogui.click(600, 550, 4)

当我从命令提示符运行它时,我得到了这个错误

Traceback (most recent call last):
  File "C:\Users\dogja\Desktop\crap\region2\scriptybob\test.py", line 3, in <module>
    pyautogui.click(650, 200, 10)
  File "C:\Users\dogja\AppData\Local\Programs\Python\Python35\lib\site-    packages\pyautogui\__init__.py", line 362, in click
    platformModule._click(x, y, 'left')
  File "C:\Users\dogja\AppData\Local\Programs\Python\Python35\lib\site-    packages\pyautogui\_pyautogui_win.py", line 437, in _click
    _sendMouseEvent(MOUSEEVENTF_LEFTCLICK, x, y)
  File "C:\Users\dogja\AppData\Local\Programs\Python\Python35\lib\site-    packages\pyautogui\_pyautogui_win.py", line 480, in _sendMouseEvent
    raise ctypes.WinError()
OSError: [WinError 127] The specified procedure could not be found.

【问题讨论】:

  • 你是对的。同样的事情发生在这里。我想我也在使用 py 3.4!除了我没有收到任何漂亮的错误消息。该应用程序仅显示死亡崩溃对话框。

标签: python python-3.x pyautogui


【解决方案1】:

也许您没有以正确的方式使用click 函数。见函数定义:

click(x=None, y=None, clicks=1, interval=0.0, button='left', 持续时间=0.0,补间=,暂停=无, _pause=真)

使用pyautogui.click(650, 200, 10) 表示 x=650、y=200 和 clicks=10。我猜你想说pyautogui.click(650, 200, interval=10)

【讨论】:

    【解决方案2】:

    问题可能是由于最新版本的 pyautogui 是为 python 3.4 设计的,而最新版本是 3.5。我发现如果你运行的是 Windows,你可以使用 win32api。要安装它,请在管理员模式下运行命令提示符并 cd 到您的 python 脚本目录并运行以下命令:

    pip install 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)
    

    这实际上将光标移动到某处,按下鼠标左键,然后非常快速地释放它。上面显示的点击sn -p 不是我写的,但是找不到最先找到的地方。对不起写那个sn-p的人。

    【讨论】:

    • 是的,但是如何制作“按下 + 拖动”包装?和pyautogui的dragTo()一样?谢谢!
    • 我已经尝试了一段时间,并告诉你什么时候有效。现在它只是冻结光标。
    • 你的意思是你不能让win32api做到这一点?这可不是好消息!我还会尝试调试 pyautogui 的崩溃或让 win32api 进行拖动,然后发布我的结果。
    • 您不必安装 win32con 来更改此代码:win32con.MOUSEEVENTF_LEFTDOWN 的值为 2,win32con.MOUSEEVENTF_LEFTUP 的值为 4,因此您可以直接使用这些值。
    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2014-04-26
    • 2018-10-13
    • 1970-01-01
    • 2012-11-22
    • 2014-03-28
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多