SmartPagerankSearch / PROGRESS_BAR_TROUBLESHOOTING.md
GitHub Action
Sync from GitHub Actions (Clean Commit)
7f22d3c
# 进度条卡住问题 - 故障排除指南
## 问题描述
进度条一直卡在 "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:** 可能的原因:
1. WebSocket消息没有发送成功
2. 前端没有正确处理消息
3. 爬虫没有真正启动
**解决方法:**
- 检查后端日志中的广播消息
- 检查浏览器控制台是否收到WebSocket消息
- 检查爬虫是否打印了启动日志
### Q2: 看到 "No active WebSocket connections" 警告
**A:** WebSocket连接没有建立
**解决方法:**
- 刷新页面,确保WebSocket连接建立
- 检查 `static/index.html` 中的WebSocket初始化代码
- 检查服务器是否正常运行
### Q3: 爬虫启动但没有进度更新
**A:** 可能的原因:
1. URL已经在数据库中,被跳过了
2. 爬虫卡在某个URL上
3. 回调函数没有被调用
**解决方法:**
- 查看后端日志,确认是否有 "Crawling:" 消息
- 查看是否有 "Progress updated:" 消息
- 检查URL是否可访问
## 调试技巧
1. **启用详细日志**
- 所有关键步骤都有日志输出
- 查看后端控制台的完整输出
2. **检查WebSocket连接**
- 在浏览器Network标签中查看WebSocket连接状态
- 查看是否有错误或断开连接
3. **测试单个URL**
- 先测试一个简单的、已知可访问的URL
- 确认爬虫基本功能正常
4. **检查网络环境**
- 确保服务器可以访问目标URL
- 检查是否有防火墙或代理问题
## 下一步
如果问题仍然存在,请提供:
1. 后端日志的完整输出(从URL上传开始)
2. 浏览器控制台的完整输出
3. 目标URL
4. 服务器环境信息
这些信息将帮助我们进一步诊断问题。