Pyautogui截图功能转成.exe后无法正常工作的问题排查
问题:PyInstaller打包后PyAutoGUI截图功能失效
我开发了一个简单的Python脚本,用于获取屏幕上对象的坐标,然后截取该坐标附近区域的截图。脚本在PyCharm中运行完全正常,但使用PyInstaller打包成.exe文件后,截图功能失效。已在打包前安装了所有模块和依赖项,.exe程序能正常启动,且通过print(x,y)验证可以正常定位屏幕对象的坐标,但始终无法生成answer2.png截图文件。
原脚本代码:
import pyautogui from PIL import Image def locate_on_screen(image): global x,y try: if pyautogui.locateOnScreen(image, confidence=0.8): ec2 = pyautogui.locateOnScreen(image, confidence=0.8) x, y = pyautogui.center(ec2) return x, y except: pass x, y = locate_on_screen('life.png') print(x,y) answer2 = pyautogui.screenshot('answer2.png', region=(x+80, y-10, 80, 19))
解决方案
指定绝对路径保存截图
打包后的exe默认工作目录可能不是你预期的位置,直接使用相对路径会导致文件生成在隐蔽位置。可以通过获取exe所在目录来生成绝对路径:import os # 获取当前脚本/exe所在的绝对目录 current_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接截图保存路径 screenshot_path = os.path.join(current_dir, 'answer2.png') # 使用绝对路径保存截图 answer2 = pyautogui.screenshot(screenshot_path, region=(x+80, y-10, 80, 19))调整PyInstaller打包参数
PyAutoGUI的部分依赖可能无法被PyInstaller自动识别,需要手动指定打包参数:- 若为单文件打包,执行以下命令:
pyinstaller --onefile --collect-all pyautogui --collect-all PIL your_script_name.py - 也可以通过
--hidden-import补充缺失的依赖:pyinstaller --onefile --hidden-import pyautogui --hidden-import PIL.Image your_script_name.py
- 若为单文件打包,执行以下命令:
检查运行权限
部分系统中,exe需要管理员权限才能完成屏幕截取或文件写入操作,右键点击生成的exe文件,选择「以管理员身份运行」尝试。添加异常捕获排查错误
原脚本的异常处理过于宽泛,且截图环节无错误捕获,修改代码添加详细异常输出,打包后运行可查看具体报错原因:try: answer2 = pyautogui.screenshot('answer2.png', region=(x+80, y-10, 80, 19)) print("截图生成成功") except Exception as e: print(f"截图失败原因:{str(e)}")
内容的提问来源于stack exchange,提问作者Caio Henrique
相关产品推荐
相关产品推荐

