一个基于 Playwright 和AI过滤分析的闲鱼(goofish)多任务实时监控与智能分析工具,配备了功能完善的 Web 管理界面。
config.json
同时监控多个关键词,各任务独立运行,互不干扰。docker-compose
配置,实现快速、标准化的容器化部署。后台任务管理
后台监控截图
ntf通知截图
推荐使用 Web 管理界面来操作本项目,体验最佳。
⚠️ Python版本要求: 本地部署调试时建议使用 Python 3.10 或更高版本。较低版本的Python可能会导致依赖包安装失败或运行时错误(如
ModuleNotFoundError: No module named 'PIL'
)。
克隆本项目到本地:
git clone https://github.com/dingyufei615/ai-goofish-monitor
cd ai-goofish-monitor
安装所需的Python依赖:
pip install -r requirements.txt
配置环境变量: 复制.env.example
文件并命名为.env
,并修改里面的内容。
Windows使用命令行:
copy .env.example .env
Linux/MacOS使用命令行:
cp .env.example .env
.env
文件中的所有可用配置项如下:
环境变量 | 说明 | 是否必填 | 注意事项 |
---|---|---|---|
OPENAI_API_KEY |
你的AI模型服务商提供的API Key。 | 是 | 对于某些本地或特定代理的服务,此项可能为可选。 |
OPENAI_BASE_URL |
AI模型的API接口地址,必须兼容OpenAI格式。 | 是 | 请填写API的基础路径,例如 https://ark.cn-beijing.volces.com/api/v3/ 。 |
OPENAI_MODEL_NAME |
你要使用的具体模型名称。 | 是 | 必须选择一个支持图片分析的多模态模型,如 doubao-seed-1-6-250615 , gemini-2.5-pro 等。 |
PROXY_URL |
(可选) 需要翻墙时配置的HTTP/S代理。 | 否 | 支持 http:// 和 socks5:// 格式。例如 http://127.0.0.1:7890 。 |
NTFY_TOPIC_URL |
(可选) ntfy.sh 的主题URL,用于发送通知。 | 否 | 如果留空,将不会发送 ntfy 通知。 |
GOTIFY_URL |
(可选) Gotify 服务地址。 | 否 | 例如 https://push.example.de 。 |
GOTIFY_TOKEN |
(可选) Gotify 应用的 Token。 | 否 | |
BARK_URL |
(可选) Bark 的推送地址。 | 否 | 例如 https://api.day.app/your_key 。如果留空,将不发送 Bark 通知。 |
WX_BOT_URL |
(可选) 企业微信群机器人的 Webhook 地址。 | 否 | 如果留空,将不会发送企业微信通知。 |
WEBHOOK_URL |
(可选) 通用 Webhook 的 URL 地址。 | 否 | 如果留空,将不发送通用 Webhook 通知。 |
WEBHOOK_METHOD |
(可选) Webhook 请求方法。 | 否 | 支持 GET 或 POST ,默认为 POST 。 |
WEBHOOK_HEADERS |
(可选) Webhook 的自定义请求头。 | 否 | 必须是有效的 JSON 字符串,例如 '{"Authorization": "Bearer xxx"}' 。 |
WEBHOOK_CONTENT_TYPE |
(可选) POST 请求的内容类型。 | 否 | 支持 JSON 或 FORM ,默认为 JSON 。 |
WEBHOOK_QUERY_PARAMETERS |
(可选) GET 请求的查询参数。 | 否 | JSON 字符串,支持 {{title}} 和 {{content}} 占位符。 |
WEBHOOK_BODY |
(可选) POST 请求的请求体。 | 否 | JSON 字符串,支持 {{title}} 和 {{content}} 占位符。 |
LOGIN_IS_EDGE |
是否使用 Edge 浏览器进行登录和爬取。 | 否 | 默认为 false ,使用 Chrome/Chromium。 |
PCURL_TO_MOBILE |
是否在通知中将电脑版商品链接转换为手机版。 | 否 | 默认为 true 。 |
RUN_HEADLESS |
是否以无头模式运行爬虫浏览器。 | 否 | 默认为 true 。在本地调试遇到验证码时可设为 false 手动处理。Docker部署时必须为 true 。 |
AI_DEBUG_MODE |
是否开启AI调试模式。 | 否 | 默认为 false 。开启后会在控制台打印详细的AI请求和响应日志。 |
SKIP_AI_ANALYSIS |
是否跳过AI分析并直接发送通知。 | 否 | 默认为 false 。设置为 true 时,所有爬取到的商品将直接发送通知而不经过AI分析。 |
SERVER_PORT |
Web UI服务的运行端口。 | 否 | 默认为 8000 。 |
WEB_USERNAME |
Web界面登录用户名。 | 否 | 默认为 admin 。生产环境请务必修改。 |
WEB_PASSWORD |
Web界面登录密码。 | 否 | 默认为 admin123 。生产环境请务必修改为强密码。 |
💡 调试建议: 如果在配置AI API时遇到404错误,建议先使用阿里云或火山提供的API进行调试,确保基础功能正常后再尝试其他API提供商。某些API提供商可能存在兼容性问题或需要特殊的配置。
🔐 安全提醒: Web界面已启用Basic认证保护。默认用户名和密码为
admin
/admin123
,生产环境请务必修改为强密码!
获取登录状态 (重要!): 为了让爬虫能够以登录状态访问闲鱼,必须先提供有效的登录凭证。我们推荐使用Web UI来完成此操作:
推荐方式:通过 Web UI 更新
这种方式无需在服务器上运行带图形界面的程序,最为便捷。
备用方式:运行登录脚本
如果您可以在本地或带桌面的服务器上运行程序,也可以使用传统的脚本方式:
python login.py
运行后会弹出一个浏览器窗口,请使用手机闲鱼App扫描二维码完成登录。成功后,程序会自动关闭,并在项目根目录生成一个 xianyu_state.json
文件。
一切就绪后,启动 Web 管理后台服务器。
python web_server.py
在浏览器中打开 http://127.0.0.1:8000
访问管理后台。
使用 Docker 可以将应用及其所有依赖项打包到一个标准化的单元中,实现快速、可靠和一致的部署。
安装 Docker: 请确保你的系统已安装 Docker Engine。
克隆项目并配置:
git clone https://github.com/dingyufei615/ai-goofish-monitor
cd ai-goofish-monitor
创建 .env
文件: 参考 快速开始 部分的说明,在项目根目录创建并填写 .env
文件。
获取登录状态 (关键步骤!): Docker容器内无法进行扫码登录。请在启动容器后,通过访问Web UI来设置登录状态:
docker-compose up -d
启动服务。http://127.0.0.1:8000
访问Web UI。ℹ️ 关于Python版本: 使用Docker部署时,项目使用的是Dockerfile中指定的Python 3.11版本,无需担心本地Python版本兼容性问题。
项目已包含 docker-compose.yaml
文件,我们推荐使用 docker-compose
来管理容器,这比使用 docker run
更方便。
在项目根目录下,运行以下命令来启动容器:
docker-compose up --build -d
这会以后台模式启动服务。docker-compose
会自动读取 .env
文件和 docker-compose.yaml
的配置,并根据其内容来创建和启动容器。
如果容器内遇到网络问题,请自行排查或使用代理。
⚠️ OpenWrt 环境部署注意事项: 如果您在 OpenWrt 路由器上部署此应用,可能会遇到 DNS 解析问题。这是因为 Docker Compose 创建的默认网络可能无法正确继承 OpenWrt 的 DNS 设置。如果遇到
ERR_CONNECTION_REFUSED
错误,请检查您的容器网络配置,可能需要手动配置 DNS 或调整网络模式以确保容器可以正常访问外部网络。
http://127.0.0.1:8000
。docker-compose logs -f
docker-compose stop
docker-compose start
docker-compose down
.env
配置、登录状态等关键依赖是否正常。prompt
文件,实时调整AI的思考逻辑。下图描述了单个监控任务从启动到完成的核心处理逻辑。在实际使用中,web_server.py
会作为主服务,根据用户操作或定时调度来启动一个或多个这样的任务进程。
Web界面已启用Basic认证保护,确保只有授权用户才能访问管理界面和API。
在 .env
文件中设置认证凭据:
# Web服务认证配置
WEB_USERNAME=admin
WEB_PASSWORD=admin123
如果未在 .env
文件中设置认证凭据,系统将使用以下默认值:
admin
admin123
⚠️ 重要:生产环境请务必修改默认密码!
/health
)详细配置说明请参考 AUTH_README.md。
我们整理了一份详细的常见问题解答文档,覆盖了从环境配置、AI设置到反爬虫策略的各类问题。
本项目在开发过程中参考了以下优秀项目,特此感谢:
以及感谢LinuxDo相关佬友的脚本贡献
以及感谢 LinuxDo 社区,希望L站越来越好。
以及感谢ClaudeCode/Aider/Gemini 工具解放双手,代码写起来飞一般的感觉~