Spaces:
Runtime error
Runtime error
进度条卡住问题 - 故障排除指南
问题描述
进度条一直卡在 "Waiting for crawler to start..." 状态
已完成的修复
1. WebSocket连接机制
- ✅ 添加了连接等待机制(最多等待3秒)
- ✅ 改进了broadcast函数的日志和错误处理
- ✅ 添加了连接状态检查
2. 消息发送机制
- ✅ 替换所有
asyncio.run调用为broadcast_sync - ✅ 在爬虫开始前发送多次初始消息(确保到达)
- ✅ 添加了详细的调试日志
3. 爬虫错误处理
- ✅ 添加了爬虫启动错误捕获
- ✅ 添加了爬虫执行过程中的错误处理
- ✅ 所有错误都会通过WebSocket发送到前端
诊断步骤
步骤1:检查后端日志
当URL上传后,查看后端日志,应该能看到以下信息:
⏳ [AsyncTask] Starting task: url
⏳ [URL Task] Waiting for WebSocket connection... (0.1s)
✅ [URL Task] WebSocket connection(s) ready: 1
📢 [URL Task] About to send initial progress message...
✅ [Broadcast] Message sent to 1/1 connections: progress
✅ [URL Task] Initial progress message sent
🚀 [URL Task] Starting crawl for: <your-url>
🕸️ Starting recursive crawl: <your-url> (Depth: 8, Max Pages: 1000)
📢 Initial callback sent
🔍 Crawling: <your-url>
如果看不到这些日志:
- 后台任务可能没有启动
- 检查FastAPI是否正常运行
如果看到 "⚠️ [Broadcast] No active WebSocket connections":
- WebSocket连接没有建立
- 检查浏览器控制台是否有WebSocket错误
步骤2:检查浏览器控制台
打开浏览器开发者工具(F12),查看Console标签:
应该看到:
✅ WebSocket connected successfully
WebSocket message received: {type: "progress", task_type: "url", ...}
如果没有看到 "WebSocket connected":
- WebSocket连接失败
- 检查服务器是否运行在正确的端口
- 检查防火墙设置
如果看到连接但收不到消息:
- 消息可能没有发送
- 检查后端日志中的广播消息
步骤3:检查爬虫是否真正启动
在系统管理器中,爬虫启动会打印:
🕸️ Starting recursive crawl: <url>
如果看到这个消息但之后没有进度更新:
- 爬虫可能在第一个URL就卡住了
- 检查网络连接
- 检查目标URL是否可访问
步骤4:检查数据库
如果启用了 check_db_first=True:
- URL可能已经存在于数据库中
- 爬虫会跳过已存在的URL
- 如果所有URL都已存在,进度可能不会更新
常见问题
Q1: 为什么进度条一直显示 "Waiting for crawler to start..."?
A: 可能的原因:
- WebSocket消息没有发送成功
- 前端没有正确处理消息
- 爬虫没有真正启动
解决方法:
- 检查后端日志中的广播消息
- 检查浏览器控制台是否收到WebSocket消息
- 检查爬虫是否打印了启动日志
Q2: 看到 "No active WebSocket connections" 警告
A: WebSocket连接没有建立
解决方法:
- 刷新页面,确保WebSocket连接建立
- 检查
static/index.html中的WebSocket初始化代码 - 检查服务器是否正常运行
Q3: 爬虫启动但没有进度更新
A: 可能的原因:
- URL已经在数据库中,被跳过了
- 爬虫卡在某个URL上
- 回调函数没有被调用
解决方法:
- 查看后端日志,确认是否有 "Crawling:" 消息
- 查看是否有 "Progress updated:" 消息
- 检查URL是否可访问
调试技巧
启用详细日志
- 所有关键步骤都有日志输出
- 查看后端控制台的完整输出
检查WebSocket连接
- 在浏览器Network标签中查看WebSocket连接状态
- 查看是否有错误或断开连接
测试单个URL
- 先测试一个简单的、已知可访问的URL
- 确认爬虫基本功能正常
检查网络环境
- 确保服务器可以访问目标URL
- 检查是否有防火墙或代理问题
下一步
如果问题仍然存在,请提供:
- 后端日志的完整输出(从URL上传开始)
- 浏览器控制台的完整输出
- 目标URL
- 服务器环境信息
这些信息将帮助我们进一步诊断问题。