用 pyautogui找图的时候,因为我要依次找多个图片,所以想依次把文件名赋值给变量,然后在Part = pyautogui.locateOnScreen(‘pk.png', confidence=0.5) 语句中用变量来代替文件名,但是我尝试后发现会报错,是我写错了还是它不能这样用?
对了,图片文件已经跟py文件放在同一文件夹下了。
源代码如下:
# 测试区域截图功能-1
#对后台窗口截图
import win32gui, win32ui, win32con,win32api
from PIL import Image
import cv2
import numpy
import pyautogui
from ctypes import windll, byref, c_ubyte
from ctypes.wintypes import RECT
import numpy as np
#获取后台窗口的句柄,注意后台窗口不能最小化
hwnd=win32gui.FindWindow(0,'阴阳师-网易游戏') # 根据窗口名称获取句柄
print('获取窗口句柄 %d 成功。' %(hwnd))
#获取句柄窗口的大小信息
x, y, x1, y1 = win32gui.GetWindowRect(hwnd)
width = x1 - x
height = y1 - y
print('成功获取窗口尺寸。')
# #把文件路径赋值给变量
# def bianliang():
# #斗技
# info = 'E:/代码/python/'
# filename = 'jiacheng.png'
# pk = info + filename
# #准备
# info = 'E:/代码/python/'
# filename = 'zhunbei.png'
# zhunbei = info + filename
def zhaotu():
#-------找图------
Part = pyautogui.locateOnScreen(pk, confidence=0.5) ####### 这一行的文件名用变量就会报错 ########
zhongxin = pyautogui.center(Part) # 找图的中心点
print(zhongxin)
# 找图还包括
# locateOnScreen(image): 返回屏幕上与image匹配的第一个实例点
# locateCenterOnScreen(image): 返回屏幕上与image匹配的第一个实例的中心点
# locateAllOnScreen(image): 返回generator
# region:缩小查找区域,可提升找图速度
pyautogui.locateOnScreen(pk, region=(x, y, width, height)) ######### 还有这里也用了变量 ##########
pyautogui.click(zhongxin.x,zhongxin.y,button='left') # 点击
print('点击成功!')
ii = 1
abc = ("'pk.png'","'jiacheng.png'","'shoudong.png'","'jiesuan.png'")
while ii < 10:
for aa in abc:
if aa == abc[1]:
# info = 'E:/代码/python/'
# filename = 'jiacheng.png'
# pk = info + filename
pk = abc[1]
print(aa)
zhaotu()
elif aa == 'zhunbei.png':
print(aa)
zhaotu(aa)
else:
print(aa)
终端运行结果如下:
PS E:\代码\python> e:; cd 'e:\代码\python'; & 'C:\Users\isspa\AppData\Local\Programs\Python\Python39\python.exe' 'c:\Users\isspa.vscode\extensions\ms-python.python-2021.9.1230869389\pythonFiles\lib\python\debugpy\launcher' '58822' '--' 'e:\代码\python# 测试区域识图功能.py'
获取窗口句柄 7540570 成功。
成功获取窗口尺寸。
'pk.png'
'jiacheng.png'
Traceback (most recent call last):
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main
return run_code(code, main_globals, None,
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in run_code
exec(code, run_globals)
File "c:\Users\isspa.vscode\extensions\ms-python.python-2021.9.1230869389\pythonFiles\lib\python\debugpy_main.py", line 45, in
cli.main()
File "c:\Users\isspa.vscode\extensions\ms-python.python-2021.9.1230869389\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 444, in main
run()
File "c:\Users\isspa.vscode\extensions\ms-python.python-2021.9.1230869389\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 285, in run_file
runpy.run_path(target_as_str, run_name=compat.force_str("main"))
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 268, in run_path
return run_module_code(code, init_globals, run_name,
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 97, in run_module_code
run_code(code, mod_globals, init_globals,
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in run_code
exec(code, run_globals)
File "e:\代码\python# 测试区域识图功能.py", line 56, in
zhaotu()
File "e:\代码\python# 测试区域识图功能.py", line 35, in zhaotu
Part = pyautogui.locateOnScreen(pk, confidence=0.5) ####### 这一行的文件名用变量就会报错 ########
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\site-packages\pyautogui_init.py", line 175, in wrapper
return wrappedFunction(*args, **kwargs)
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\site-packages\pyautogui_init.py", line 213, in locateOnScreen
return pyscreeze.locateOnScreen(*args, **kwargs)
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\site-packages\pyscreeze_init.py", line 373, in locateOnScreen
retVal = locate(image, screenshotIm, **kwargs)
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\site-packages\pyscreeze_init.py", line 353, in locate
points = tuple(locateAll(needleImage, haystackImage, **kwargs))
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\site-packages\pyscreeze_init.py", line 207, in _locateAll_opencv
needleImage = load_cv2(needleImage, grayscale)
File "C:\Users\isspa\AppData\Local\Programs\Python\Python39\lib\site-packages\pyscreeze_init.py", line 170, in _load_cv2
raise IOError("Failed to read %s because file is missing, "
OSError: Failed to read 'jiacheng.png' because file is missing, has improper permissions, or is an unsupported or invalid format
你为什么要在文件的文本框内再加一层引号?把引号去掉。
建议去熟悉一下变量的性质