pyautogui每次点击时都会崩溃

3

基本上每当我调用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!除了我没有收到任何漂亮的错误消息。应用程序只显示崩溃对话框。 - user1277936
2个回答

1
也许您没有正确使用 click 函数。请看函数定义:

click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0, tween=, pause=None, _pause=True)

使用 pyautogui.click(650, 200, 10) 意味着 x=650,y=200 和 clicks=10。我猜您想要说的是 pyautogui.click(650, 200, interval=10)

1
问题可能是由于最新版本的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)

这基本上是将光标移动到某个位置,按下左键,然后非常快地释放它。我没有编写上面显示的点击片段,但我找不到我最初找到它的地方。对于编写该片段的人,我感到抱歉。


是的,但是你如何创建一个“按住+拖动”的包装器?就像pyautogui的dragTo()一样?谢谢! - user1277936
1
我已经尝试了一段时间,等它能正常工作时再告诉你。现在它只会冻结光标。 - jaw2233
你的意思是说你不能让win32api实现这个功能吗?这不是好消息!我还会尝试调试pyautogui的崩溃或者让win32api来进行拖拽,并分享我的结果。 - user1277936
您无需安装win32con即可更改此代码:win32con.MOUSEEVENTF_LEFTDOWN的值为2,win32con.MOUSEEVENTF_LEFTUP的值为4,因此您可以直接使用这些值。 - Al Sweigart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接