You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python钓鱼游戏自动按E脚本开发:颜色识别失效问题求助

解决钓鱼游戏自动化脚本的颜色识别问题

你的代码无法识别目标颜色主要有三个核心问题,下面是具体的问题分析和修正方案:

问题分析

  1. getcolors()方法使用错误:该方法返回的是[(颜色出现次数, (R,G,B)), ...]格式的元组列表,并非单纯的颜色值,直接用color in ps.getcolors()永远无法匹配成功。
  2. 未定义变量报错:代码开头的fishing_image变量未初始化,运行时会直接抛出NameError,导致脚本中断。
  3. 精确颜色匹配的局限性:游戏画面可能存在抗锯齿、亮度波动等情况,单一精确RGB值的匹配很容易漏判。

修正后的代码

import pyautogui
from time import sleep
from PIL import Image

# 目标红色的RGB范围(可根据实际画面微调)
TARGET_R_RANGE = (80, 95)
TARGET_G_RANGE = (35, 45)
TARGET_B_RANGE = (35, 45)

# 游戏中目标区域的截图坐标(请根据你的界面调整)
SCREEN_CAPTURE_REGION = (1267, 833, 300, 100)

def check_target_color(screenshot):
    rgb_img = screenshot.convert("RGB")
    pixel_data = rgb_img.load()
    width, height = rgb_img.size

    # 遍历截图内的所有像素
    for x in range(width):
        for y in range(height):
            r, g, b = pixel_data[x, y]
            # 检查当前像素是否在目标颜色范围内
            if (TARGET_R_RANGE[0] <= r <= TARGET_R_RANGE[1] and
                TARGET_G_RANGE[0] <= g <= TARGET_G_RANGE[1] and
                TARGET_B_RANGE[0] <= b <= TARGET_B_RANGE[1]):
                return True
    return False

while True:
    # 截取指定区域的屏幕画面
    current_screenshot = pyautogui.screenshot(region=SCREEN_CAPTURE_REGION)

    if check_target_color(current_screenshot):
        print("检测到目标红色,触发E键")
        pyautogui.press('e')
        # 休眠避免短时间内重复触发
        sleep(0.5)
    else:
        print("未检测到目标颜色")
        sleep(0.1)

关键修改说明

  • 移除了未定义的fishing_image相关代码,解决启动报错问题。
  • 替换颜色匹配逻辑:放弃getcolors(),改为遍历像素并检查颜色范围,适配游戏画面的颜色波动。
  • 增加颜色范围参数:设置RGB值的上下限,不再依赖单一精确值,提升识别稳定性。
  • 优化触发逻辑:按下E键后增加0.5秒休眠,防止同一帧多次触发按键操作。

额外优化建议

  • 缩小截图区域:如果目标红色只出现在固定的小区域,缩小SCREEN_CAPTURE_REGION的范围可以大幅提升识别速度。
  • 固定坐标检查:若目标红色的位置完全固定,可直接使用pyautogui.pixel(x, y)读取指定坐标的颜色,无需截取整个区域,效率更高。
  • 调试技巧:可以在检测到颜色时保存截图,或者打印当前匹配到的像素RGB值,用于微调颜色范围参数。

内容的提问来源于stack exchange,提问作者Dollyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:26:08