# Downloader 使用说明

## 作用
用于从 5E Arena 比赛页面抓取 iframe 内的 JSON 结果，并按需下载 demo 文件到本地目录。

## 运行环境
- Python 3.9+
- Playwright

安装依赖：

```bash
python -m pip install playwright
python -m playwright install
```

## 快速开始

单场下载（默认 URL）：

```bash
python downloader.py
```

指定比赛 URL：

```bash
python downloader.py --url https://arena.5eplay.com/data/match/g161-20260118222715609322516
```

批量下载（从文件读取 URL）：

```bash
python downloader.py --url-list gamelist/match_list_2026.txt
```

指定输出目录：

```bash
python downloader.py --out output_arena
```

只抓 iframe 数据或只下载 demo：

```bash
python downloader.py --fetch-type iframe
python downloader.py --fetch-type demo
```

## 主要参数
- --url：单场比赛 URL，未传时使用默认值
- --url-list：包含多个比赛 URL 的文本文件，一行一个 URL
- --out：输出目录，默认 output_arena
- --match-name：输出目录前缀名，默认从 URL 提取
- --headless：是否无头模式，true/false，默认 false
- --timeout-ms：页面加载超时毫秒，默认 30000
- --capture-ms：主页面 JSON 监听时长毫秒，默认 5000
- --iframe-capture-ms：iframe 页面 JSON 监听时长毫秒，默认 8000
- --concurrency：并发数量，默认 3
- --goto-retries：页面打开重试次数，默认 1
- --fetch-type：抓取类型，iframe/demo/both，默认 both

## 输出结构
下载目录会以比赛编号或自定义名称创建子目录：

```
output_arena/
  g161-20260118222715609322516/
    iframe_network.json
    g161-20260118222715609322516_de_ancient.zip
    g161-20260118222715609322516_de_ancient.dem
```

## URL 列表格式
文本文件一行一个 URL，空行和以 # 开头的行会被忽略：

```
https://arena.5eplay.com/data/match/g161-20260118222715609322516
# 注释
https://arena.5eplay.com/data/match/g161-20260118212021710292006
```

## 常见问题
- 如果提示 Playwright 未安装，请先执行安装命令再运行脚本
- 如果下载目录已有文件，会跳过重复下载
