Spaces:
Runtime error
Runtime error
File size: 4,228 Bytes
7f22d3c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | # 进度条卡住问题 - 故障排除指南
## 问题描述
进度条一直卡在 "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. 服务器环境信息
这些信息将帮助我们进一步诊断问题。
|