# Crawl4AI 动态网页加载更多教程：从三条卡片采集到九条并按 ID 去重

## 本轮实际范围

已真实运行 Crawl4AI 0.9.5 无 LLM 抽取，实际 JSON 通过字段和负例验收。

## 起步

```bash
python3 verify.py
```

## 1. 先看三条初始卡片

运行 server.py 打开动态列表，页面最初只显示 C01–C03。后六条需要点击两次 Load More；原始 HTML 只有壳，抓取器不能在按钮点击前就交付三条结果。

```bash
python3 server.py
```

## 2. 安装并固定运行环境

run.py 使用 Crawl4AI 的 AsyncWebCrawler 和 JsonCssExtractionStrategy，不调用 LLM。按 requirements.txt 安装并使用官方 crawl4ai-setup 准备浏览器，已有受支持 Chromium 可通过环境指定。

## 3. 建立可复用 session

首轮带 session_id 和 cache bypass，等待三条卡片出现。后续调用使用同一 session_id 与 js_only=True，避免重新导航回到第一批。

## 4. 先触发加载再等待增长

点击写入 js_code_before_wait，wait_for 检查卡片数确实增长到 6、9。当前文档的 js_code 在 wait_for 之后，放错顺序会一直等未触发的数据。

## 5. 抽取稳定 ID 与标题

每批只提取 data-id、标题和 minutes，合并时按稳定 ID 去重，不以标题去重。重复卡片不是新的课程，输出必须恰好 9 个 ID。

```bash
python3 run.py
```

## 6. 核对最后一张和负例

验证结果含 C09“课后复盘”，再用只含前三条的 negative.json 检查验证器拒绝不完整输出。HTTP 成功不等于动态内容已齐。

```bash
python3 verify.py --actual result.json
```

## 7. 保留原页与实际抓取结果

保存 original cards.json、实际 result.json、当前版本和测试结果。本题无模型，后续 AI 摘要需要单独配置服务，不把本地爬虫算成 AI 调用。

## 官方来源

https://docs.crawl4ai.com/core/page-interaction/

## 提醒

参考文档、卡片、JSON和图片都明确标注人工或离线范围；没有实际调用的模型不提供假成功结果。占位配置不是可用凭据。
