跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonWeChatAI

AI-Goofish-Monitor:基于 AI 与 Playwright 的闲鱼商品智能监控工具

AI-Goofish-Monitor 是一款基于 Playwright 和 AI 技术的闲鱼商品实时监控与分析工具。它利用多模态大语言模型进行智能过滤,提供 Web 管理界面和 Docker 部署方案。支持自然语言创建任务、多平台通知及反爬虫优化。适用于二手相机、球鞋及电子产品价格监控,具备数据导出与日志管理功能,帮助用户高效捕捉目标商品信息。

LinuxPan发布于 2026/4/6更新于 2026/5/2027 浏览

简介

AI-Goofish-Monitor 是一个基于 Playwright 和 AI 技术的闲鱼(Goofish)多任务实时监控与智能分析工具。通过先进的浏览器自动化技术和多模态大语言模型,为用户提供智能化的闲鱼商品监控解决方案。该工具不仅具备强大的数据采集能力,还配备了功能完善的 Web 管理界面。

技术特色:

  • AI 驱动:集成多模态大语言模型(GPT-4o、Gemini 等),深度分析商品信息
  • Web 管理:完整的可视化界面,无需命令行操作
  • 多平台通知:支持 ntfy.sh、企业微信、Bark 等多种通知方式
  • 智能过滤:基于自然语言的任务创建和 AI 分析标准生成
  • 云原生支持:提供 Docker 容器化部署方案
  • 反爬虫优化:模拟真人操作,提高稳定性和成功率

主要功能

1. 核心架构

架构图

2. 功能矩阵
功能类别核心能力技术实现
数据采集闲鱼商品实时监控,多关键词同时采集Playwright, 浏览器自动化
AI 分析多模态商品分析,智能推荐过滤GPT-4o, Gemini, 多模态模型
任务管理Web 界面管理,自然语言创建任务Flask, Vue.js, 可视化界面
消息通知多平台即时通知,自定义通知规则ntfy, 企业微信,Bark, Webhook
用户认证Basic 认证保护,安全访问管理界面Basic Auth, 环境变量配置
部署支持Docker 容器化,一键部署运行Docker, docker-compose
3. 技术特性
  • 自然语言交互:用简单描述创建复杂监控任务
  • 多模态分析:同时处理文本和图像信息
  • 实时处理:发现新商品立即进入分析流程
  • 高度可定制:每个任务独立配置 AI 分析指令
  • 健壮稳定:模拟真人操作,多种反爬策略
  • 易于扩展:模块化设计,支持自定义功能扩展

安装与配置

1. 环境要求

操作系统:Windows/Linux/macOS
Python: 3.10+ (推荐 3.10 或更高版本)
内存:4GB+ RAM
存储:1GB+ 可用空间
网络:稳定互联网连接


Chrome/Chromium: 最新版本
Playwright: 自动管理浏览器


CPU: 4 核+
内存:8GB+
存储:SSD, 10GB+ 可用空间
网络:100Mbps+ 带宽
# 基础要求
# 浏览器要求
# 生产环境推荐
2. 安装方式

源码安装:

# 克隆仓库
git clone https://github.com/dingyufei615/ai-goofish-monitor.git
cd ai-goofish-monitor
# 安装依赖
pip install -r requirements.txt
# 安装 Playwright 浏览器
playwright install chromium

Docker 安装:

# 使用 docker-compose(推荐)
docker-compose up --build -d
# 或者直接使用 Docker
docker build -t ai-goofish-monitor .
docker run -d -p 8000:8000 --name monitor ai-goofish-monitor
3. 环境配置

创建环境变量文件 (.env):

# AI 服务配置
OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=https://api.example.com/v1
OPENAI_MODEL_NAME=gemini-2.5-pro

# 代理配置(可选)
PROXY_URL=http://127.0.0.1:7890

# 通知配置
NTFY_TOPIC_URL=https://ntfy.sh/your_topic
BARK_URL=https://api.day.app/your_key
WX_BOT_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key"

# Web 界面认证
WEB_USERNAME=admin
WEB_PASSWORD=your_strong_password_here

# 运行配置
RUN_HEADLESS=true
AI_DEBUG_MODE=false
SERVER_PORT=8000

配置文件 (config.json):

{
  "tasks": [
    {
      "name": "索尼相机监控",
      "keywords": ["索尼 A7M4", "Sony 相机"],
      "price_range": [5000, 13000],
      "cron_expression": "0 */2 * * *",
      "ai_prompt": "寻找 95 新以上,快门数低于 5000 的索尼相机"
    }
  ],
  "notification": {
    "enabled": true,
    "services": ["ntfy", "wechat"],
    "min_confidence": 0.8
  }
}
4. 登录配置

获取闲鱼登录状态:

# 方法 1:使用登录脚本(需要图形界面)
python login.py
# 方法 2:通过 Web 界面更新(推荐)
# 启动服务后访问 http://localhost:8000
# 在系统设置中手动更新登录状态

Chrome 扩展安装:

  1. 下载闲鱼登录状态提取扩展
  2. 在 Chrome 中加载扩展程序
  3. 登录闲鱼官网
  4. 点击扩展图标提取登录状态
  5. 复制状态信息到 Web 界面

使用指南

1. 启动服务
# 启动 Web 服务
python web_server.py
# 或者使用 gunicorn(生产环境)
gunicorn -w 4 -b 0.0.0.0:8000 web_server:app
# 访问管理界面
# 打开浏览器访问 http://localhost:8000
# 用户名:admin
# 密码:配置的 WEB_PASSWORD
2. 任务管理

创建监控任务:

  1. 进入'任务管理'页面
  2. 点击'创建新任务'
  3. 系统自动生成监控参数和 AI 分析标准
  4. 设置定时执行计划(Cron 表达式)

用自然语言描述需求:

我想买一台 95 新以上的索尼 A7M4 相机,预算 1 万 3 以内,快门数低于 5000

任务配置选项:

{
  "name": "任务名称",
  "keywords": ["关键词 1", "关键词 2"],
  "price_range": [1000, 5000],
  "location": "上海",
  "cron_expression": "0 */1 * * *",
  "ai_prompt": "自定义 AI 分析指令",
  "enabled": true
}
3. AI 分析配置

自定义 Prompt 模板:

# prompts/analysis_template.txt
你是一个专业的二手商品评估专家。请分析以下闲鱼商品信息:
商品标题:{{title}}
商品价格:{{price}}元
商品描述:{{description}}
卖家信息:{{seller_info}}
图片信息:{{image_descriptions}}

请根据以下标准进行评估:
1. 商品成色是否达到 95 新以上
2. 价格是否在合理范围内
3. 卖家信用是否良好
4. 是否存在潜在风险

请输出 JSON 格式的分析结果:
{
  "recommendation": "推荐/不推荐",
  "confidence": 0.95,
  "reasons": ["原因 1", "原因 2"],
  "risk_factors": ["风险因素 1", "风险因素 2"]
}
4. 监控流程

监控流程

5. 通知配置

多平台通知设置:

# 配置示例
notification_config = {
    "ntfy": {
        "enabled": True,
        "topic": "your_ntfy_topic",
        "priority": "high"
    },
    "wechat": {
        "enabled": True,
        "webhook": "企业微信群机器人 Webhook",
        "mention_users": ["@all"]
    },
    "bark": {
        "enabled": True,
        "device_key": "your_bark_key",
        "sound": "alarm"
    },
    "webhook": {
        "enabled": False,
        "url": "https://example.com/webhook",
        "method": "POST",
        "headers": {"Authorization": "Bearer token"}
    }
}

应用场景实例

案例 1:二手相机监控

场景:摄影爱好者寻找特定型号的二手相机

解决方案:

class CameraMonitor:
    def __init__(self):
        self.config = {
            "name": "索尼相机专业监控",
            "keywords": ["索尼 A7M4", "Sony A7M4", "A7M4"],
            "price_range": [8000, 13000],
            "conditions": {
                "min_condition": "95 新",
                "max_shutter_count": 5000,
                "require_original_box": True,
                "exclude_professional_sellers": True
            },
            "schedule": "0 */3 * * *",
            "notification_channels": ["wechat", "ntfy"]
        }

    def create_monitor_task(self):
        # 通过 Web API 创建任务
        response = requests.post(
            "http://localhost:8000/api/tasks/create",
            json={
                "description": natural_language,
                "config": self.config
            },
            auth=("admin", "password123")
        )
        return response.json()

    def handle_notification(self, item):
        message = f"""
📸 发现符合条件的相机!
型号:{item['title']}
价格:{item['price']}元
成色:{item['condition']}
快门数:{item['shutter_count']}
卖家:{item['seller']}
链接:{item['url']}
AI 推荐度:{item['confidence']}%
"""
        self.send_notification(message)
案例 2:限量版球鞋监控

场景:球鞋收藏家寻找限量版球鞋

解决方案:

class SneakerMonitor:
    def __init__(self):
        self.sneaker_models = [
            "Nike Dunk SB", "Air Jordan 1", "Yeezy 350",
            "限量版球鞋", "联名款球鞋"
        ]

    def setup_monitoring(self):
        tasks = []
        for model in self.sneaker_models:
            task_config = {
                "name": f"{model}监控",
                "keywords": [model, "限量", "联名"],
                "price_range": [500, 3000],
                "filters": {
                    "exclude_fake": True,
                    "min_authenticity_score": 0.9,
                    "require_real_images": True
                },
                "ai_prompt": """
分析球鞋真伪和收藏价值:
1. 检查图片是否实拍图
2. 评估价格是否合理
3. 判断卖家信用
4. 识别假货特征
""",
                "schedule": "*/30 * * * *"
            }
            tasks.append(task_config)
        return tasks
案例 3:电子产品降价监控

场景:等待特定电子产品降价时购买

解决方案:

class PriceDropMonitor:
    def __init__(self, target_product, target_price):
        self.target_product = target_product
        self.target_price = target_price
        self.price_history = {}

    def monitor_price_changes(self):
        config = {
            "name": f"{self.target_product}降价监控",
            "keywords": [self.target_product],
            "price_range": [0, self.target_price * 1.2],
            "ai_prompt": """
重点关注价格变化趋势和降价时机:
1. 记录历史价格
2. 识别真实降价(非虚假促销)
3. 评估降价幅度
4. 判断是否达到目标价位
""",
            "schedule": "0 */1 * * *"
        }
        return config

高级功能与定制

1. 自定义 AI 分析
# 自定义分析模板
你是一个专业的{{item_category}}评估专家。请分析以下闲鱼商品:
商品信息:
- 标题:{{title}}
- 价格:{{price}}元
- 描述:{{description}}
- 卖家:{{seller_name}} (信用:{{seller_rating}})
- 图片:{{image_count}}张

评估要求:{{specific_requirements}}

请输出 JSON 格式的分析结果:
{
  "assessment": {
    "quality_rating": 0.95,
    "price_score": 0.88,
    "seller_trustworthiness": 0.92,
    "overall_recommendation": "推荐"
  },
  "details": {
    "strengths": ["优点 1", "优点 2"],
    "concerns": ["需要注意的点"],
    "verification_items": ["需要验证的事项"]
  },
  "pricing_advice": {
    "fair_price_range": [1000, 1200],
    "bargaining_strategy": "还价建议"
  }
}
2. 高级通知策略
# 智能通知路由
class SmartNotifier:
    def __init__(self):
        self.notification_rules = {
            "urgent": {
                "channels": ["wechat", "bark", "sms"],
                "priority": "high",
                "retry_times": 3
            },
            "normal": {
                "channels": ["ntfy", "wechat"],
                "priority": "normal",
                "retry_times": 1
            },
            "low_priority": {
                "channels": ["ntfy"],
                "priority": "low",
                "retry_times": 0
            }
        }

    def route_notification(self, item, confidence):
        if confidence > 0.95:
            return self.notification_rules["urgent"]
        elif confidence > 0.8:
            return self.notification_rules["normal"]
        else:
            return self.notification_rules["low_priority"]
3. 数据导出与分析
# 数据导出功能
class DataExporter:
    def __init__(self, db_path="monitoring_data.db"):
        self.conn = sqlite3.connect(db_path)
        self.setup_database()

    def setup_database(self):
        self.conn.execute("""
            CREATE TABLE IF NOT EXISTS items (
                id TEXT PRIMARY KEY,
                title TEXT,
                price REAL,
                description TEXT,
                seller_info TEXT,
                analysis_result JSON,
                created_at DATETIME,
                updated_at DATETIME
            )
        """)
        self.conn.execute("""
            CREATE TABLE IF NOT EXISTS price_history (
                item_id TEXT,
                price REAL,
                recorded_at DATETIME,
                FOREIGN KEY (item_id) REFERENCES items(id)
            )
        """)

    def export_to_csv(self, output_file="monitoring_report.csv"):
        query = "SELECT i.title, i.price, i.seller_info, json_extract(i.analysis_result, '$.confidence') as confidence FROM items i GROUP BY i.id"
        df = pd.read_sql_query(query, self.conn)
        df.to_csv(output_file, index=False, encoding='utf-8-sig')
        return output_file

故障排除与优化

1. 常见问题解决

登录问题:

# 检查登录状态
curl -X GET http://localhost:8000/api/system/status
# 重新登录
python login.py --force

AI 分析失败:

# 检查 AI 服务配置
def check_ai_service():
    import requests
    test_payload = {
        "model": os.getenv('OPENAI_MODEL_NAME'),
        "messages": [{"role": "user", "content": "test"}]
    }
    try:
        response = requests.post(
            f"{os.getenv('OPENAI_BASE_URL')}/chat/completions",
            headers={"Authorization": f"Bearer {os.getenv('OPENAI_API_KEY')}"},
            json=test_payload,
            timeout=10
        )
        return response.status_code == 200
    except Exception as e:
        print(f"AI 服务检查失败:{e}")
        return False

性能优化:

PERFORMANCE_OPTIMIZATION = {
    "browser": {
        "headless": True,
        "timeout": 30000,
        "concurrent_tabs": 3,
        "retry_attempts": 2
    },
    "ai": {
        "batch_size": 5,
        "timeout": 30000,
        "max_retries": 2
    },
    "network": {
        "proxy_rotation": True,
        "request_delay": [1000, 3000],
        "timeout": 30000
    }
}
2. 监控与日志

日志配置:

import logging
from logging.handlers import RotatingFileHandler

def setup_logging():
    logger = logging.getLogger("goofish_monitor")
    logger.setLevel(logging.INFO)
    file_handler = RotatingFileHandler(
        "monitor.log", maxBytes=10 * 1024 * 1024, backupCount=5
    )
    file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
    console_handler = StreamHandler()
    console_handler.setFormatter(logging.Formatter('%(levelname)s - %(message)s'))
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    return logger

性能监控:

class PerformanceMonitor:
    def __init__(self):
        self.metrics = {
            "requests": 0,
            "successful": 0,
            "failed": 0,
            "avg_response_time": 0,
            "last_alert": None
        }

    def track_request(self, success, response_time):
        self.metrics["requests"] += 1
        if success:
            self.metrics["successful"] += 1
        else:
            self.metrics["failed"] += 1
        old_avg = self.metrics["avg_response_time"]
        n = self.metrics["successful"] + self.metrics["failed"]
        self.metrics["avg_response_time"] = ((old_avg * (n - 1) + response_time) / n)

    def get_success_rate(self):
        if self.metrics["requests"] == 0:
            return 0
        return self.metrics["successful"] / self.metrics["requests"] * 100

    def check_health(self):
        success_rate = self.get_success_rate()
        if success_rate < 80:
            return "critical"
        elif success_rate < 90:
            return "warning"
        else:
            return "healthy"

免责声明

⚠️ 重要提示:

  • 请遵守闲鱼用户协议和 robots.txt 规则
  • 不要进行过于频繁的请求,避免对服务器造成负担
  • 本项目仅供学习和技术研究使用
  • 请勿用于非法用途或商业滥用

本项目采用 MIT 许可证发布,按'现状'提供,不提供任何形式的担保。项目作者及贡献者不对因使用本软件而导致的任何损害或损失承担责任。

目录

  1. 简介
  2. 主要功能
  3. 1. 核心架构
  4. 2. 功能矩阵
  5. 3. 技术特性
  6. 安装与配置
  7. 1. 环境要求
  8. 基础要求
  9. 浏览器要求
  10. 生产环境推荐
  11. 2. 安装方式
  12. 克隆仓库
  13. 安装依赖
  14. 安装 Playwright 浏览器
  15. 使用 docker-compose(推荐)
  16. 或者直接使用 Docker
  17. 3. 环境配置
  18. AI 服务配置
  19. 代理配置(可选)
  20. 通知配置
  21. Web 界面认证
  22. 运行配置
  23. 4. 登录配置
  24. 方法 1:使用登录脚本(需要图形界面)
  25. 方法 2:通过 Web 界面更新(推荐)
  26. 启动服务后访问 http://localhost:8000
  27. 在系统设置中手动更新登录状态
  28. 使用指南
  29. 1. 启动服务
  30. 启动 Web 服务
  31. 或者使用 gunicorn(生产环境)
  32. 访问管理界面
  33. 打开浏览器访问 http://localhost:8000
  34. 用户名:admin
  35. 密码:配置的 WEB_PASSWORD
  36. 2. 任务管理
  37. 3. AI 分析配置
  38. prompts/analysis_template.txt
  39. 4. 监控流程
  40. 5. 通知配置
  41. 配置示例
  42. 应用场景实例
  43. 案例 1:二手相机监控
  44. 案例 2:限量版球鞋监控
  45. 案例 3:电子产品降价监控
  46. 高级功能与定制
  47. 1. 自定义 AI 分析
  48. 自定义分析模板
  49. 2. 高级通知策略
  50. 智能通知路由
  51. 3. 数据导出与分析
  52. 数据导出功能
  53. 故障排除与优化
  54. 1. 常见问题解决
  55. 检查登录状态
  56. 重新登录
  57. 检查 AI 服务配置
  58. 2. 监控与日志
  59. 免责声明
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 商汤开源 SenseNova-MARS 模型:实现多模态搜索推理新突破
  • 深度学习激活函数完全指南:Sigmoid、Tanh、ReLU 及现代变体
  • 二叉树深度优先搜索技巧:计算布尔值与路径数字之和
  • 数组连续和问题:计算和大于等于 x 的区间数量
  • AI 编程工具深度对比:Copilot、Cursor 及国产工具选型指南
  • Linux 系统编程:Ext2 文件系统核心架构解析
  • MiniOneRec 开源推荐框架论文解读
  • 模拟算法专题:替换问号、提莫攻击、Z 字形变换、外观数列与数青蛙
  • 中文医疗问答数据集开源
  • 深圳大厂程序员被裁后:中年危机下的 Android 框架技术进阶
  • SQLSugar 封装原理详解:架构与核心模块底层实现
  • DeepSeek 各版本说明与优缺点分析
  • 低显存 GPU 运行 AI 绘画:ComfyUI GGUF 量化指南
  • 多智能体架构选型:四种模式与决策指南
  • Linux 文件 I/O 核心解析:从 open 到重定向
  • Nginx 配置 HTTPS 实战教程:前后端部署指南
  • AI Agent 实战指南:从架构搭建到生产级落地
  • Pandas 数据可视化基础绘图教程
  • C++ 入门:发展史、第一个程序、命名空间与输入输出
  • AI 在金融领域的应用开发与实战

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online