# 通过动态分析用户界面状态变化爬取基于 Ajax 的 Web 应用

> Crawljax 在真实浏览器中驱动 Ajax Web 应用，以推断其状态流图。它扫描 DOM 中候选的可点击元素并触发事件，再用可配置的比较方法与相似度阈值将得到的 DOM 与已知状态比对，记录新状态及状态间的事件转换，并通过重新加载与重放路径进行回溯。并发版本将爬取任务划分给多个浏览器实例。该 Java 工具基于 Selenium WebDriver 与插件机制，其中一个插件可为已爬取的状态生成静态镜像。作者评测了六个开源与工业网站，并在 Google AdSense 上测量并发浏览器数量对爬取耗时的影响。

- 作者：Ali Mesbah; Arie van Deursen; Stefan Lenselink
- 原标题：Crawling Ajax-Based Web Applications through Dynamic Analysis of User Interface State Changes
- 发表载体：ACM Transactions on the Web
- 发表状态：期刊论文
- 出版／提交日期：2012 年 3 月
- 日期依据：ACM 提交的 Crossref 元数据将印刷与在线出版日期均记为 2012 年 3 月，与文章页脚的“Publication date: March 2012”一致。ACM 页面存档中的 2012 年 3 月 1 日被视为期号月份，因此保留月精度。
- DOI：10.1145/2109205.2109208
- 来源复核于：2026-10-19
- 收录于：2026-10-30
- 原始论文：<https://dl.acm.org/doi/10.1145/2109205.2109208>
- PDF：<https://dl.acm.org/doi/pdf/10.1145/2109205.2109208>
- 代码：<https://github.com/crawljax/crawljax>
- BibTeX：<https://awesomerea.org/papers/citations/paper-crawljax.bib>
- 目录页面：<https://awesomerea.org/zh/papers/paper-crawljax/>
- 记录 JSON：<https://awesomerea.org/papers/paper-crawljax/record.json>
- 英文版：[English](https://awesomerea.org/papers/paper-crawljax/index.md)

## 研究范围与局限

Crawljax 恢复的是客户端 UI 状态与导航转换，而非应用源码、服务端逻辑或完整的行为模型。推断出的图只是某一时刻的快照实例：点击顺序、服务端因素以及深度、时间与状态数上限等状态爆炸控制都会影响结果。默认设置下每个元素只点击一次，因而遗漏了需要多次点击才出现的元素：在 Pet Store 中找到 36 个标注元素中的 33 个，在四个外部网站抽样的 40 个可点击元素中找到 38 个。由于缺少黄金标准与可比较的 Ajax 爬虫，准确性通过注入元素、人工参考模型及抽查评估。外部网站会随时间变化，并发实验则在 Google 内部基于 AdSense 进行。所审阅的 2023 年仓库是后来基于 Java 11 与 Selenium 4 的代码，并非 2012 年评测所用版本。

## 与本合集的关联

补充一种经典的动态分析方法，可恢复运行中 Web 应用的 UI 状态机，与本节基于截图、视频及代码的重建研究互补。

## 发表与复核说明

Crossref 与 ACM 页面存档给出三位作者，以及 ACM Transactions on the Web 第 6 卷第 1 期第 1–30 页；文章的引用格式标为 Article 3（2012 年 3 月），共 30 页。正文审阅依据 Ali Mesbah 在 UBC 网站上提供的 30 页作者版本；版本记录以 ACM 页面为准。本文是作者 ICWE 2008 论文的修订扩展版。文中称 Crawljax 采用 Apache 许可，可从 crawljax.com 获取。代码链接指向 crawljax/crawljax 仓库，其最大贡献者为第一作者；所审阅的 2023-06-19 提交附有 Apache-2.0 LICENSE，版本为 5.2.4-SNAPSHOT，使用 Java 11 与 Selenium 4.9.0。

## 一手来源

1. <https://dl.acm.org/doi/10.1145/2109205.2109208>
2. <https://web.archive.org/web/20250216232237/https://dl.acm.org/doi/10.1145/2109205.2109208>
3. <https://api.crossref.org/works/10.1145/2109205.2109208>
4. <https://people.ece.ubc.ca/amesbah/resources/papers/tweb-final.pdf>
5. <https://github.com/crawljax/crawljax/blob/5771f6161c645c75f710a8cdc14e3c6898727e06/README.md>
6. <https://github.com/crawljax/crawljax/blob/5771f6161c645c75f710a8cdc14e3c6898727e06/LICENSE>
7. <https://github.com/crawljax/crawljax/blob/5771f6161c645c75f710a8cdc14e3c6898727e06/pom.xml>

## 关于此条目

已依据论文及一手来源复核。请通过原始论文或 BibTeX 引用原作者。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
