我有一个非常奇怪的问题,我以前没有看到在Python中发生。
我有一个脚本,完美地在一台电脑上运行,当我尝试使用另一个我定义的function失败。
我使用PyAutoGUI来自动化一些进程。
import csv import pyautogui pyautogui.PAUSE = 0.50 pyautogui.FAILSAFE = True #click function requires arguments ('fullPathToImage', "Error Identifier") def click(fullPathToImage, error): try: pyautogui.click(pyautogui.center(pyautogui.locateOnScreen(fullPathToImage))) except: print(error, " not found, trying again") click(fullPathToImage, error) def start(): click('C:/projects/images/test.png', "test.png") pyautogui.typewrite("This is my test text") if __name__ == '__main__': start()
在其他机器上发生的事情是当它定位图像时,它会按照预期在try语句中移动鼠标并单击,然后立即执行except语句。
我们两台机器之间的唯一区别是我正在运行枕头3.1.1和它不工作的是运行枕头3.3.0。
我的本能是改变了,不是在触发exception的点击上返回成功标志。 我不知道为什么会这样,因为所有的枕头都是用于图像识别的。
无可否认,我对捕捉错误非常陌生,我不确定从哪里继续。 任何帮助将不胜感激。
编辑:在exception中调用click函数的原因是在加载屏幕时消除等待语句。 取决于没有处理的数据量很难预编程延迟。
所以事实证明,这是由于在这台机器上的权限错误。 由于它是一个商业计算机用户没有管理员权限。 这导致点击被注册,然后立即触发WinError 5异常。 我通过添加另一个例外来解决这个问题。 “PermissionError:pass除外”请参阅下面的实现
import csv import pyautogui pyautogui.PAUSE = 0.50 pyautogui.FAILSAFE = True #click function requires arguments ('fullPathToImage', "Error Identifier") def click(fullPathToImage, error): try: pyautogui.click(pyautogui.center(pyautogui.locateOnScreen(fullPathToImage))) ################################## except PermissionError: pass ################################## except: print(error, " not found, trying again") click(fullPathToImage, error) def start(): click('C:/projects/images/test.png', "test.png") pyautogui.typewrite("This is my test text") if __name__ == '__main__': start()
从版本0.9.34开始已经修复。 (或者至少可以解决这个问题,点击确实有效,但是现在PyAutoGUI可以解决这个问题。)你只需要安装或者从PyPI安装或者更新PyAutoGUI,使用pip install -U pyautogui