本文介绍为何传统 html 解析无法获取网页中由 javascript 动态渲染的 pdf 链接,并提供基于 f# 的浏览器自动化解决方案(canopy + chromedriver),实现可靠、可等待、可交互的 pdf 链接提取。
在爬取类似 https://www.kodis.cz/lines/region?tab=232-293 这类现代前端网站时,你可能会发现:无论使用 FSharp.Data.HtmlProvider、HtmlAgilityPack 还是 HttpClient 获取原始 HTML,都无法提取到 PDF 文件链接(如 https://kodis-files.s3.eu-central-1.amazonaws.com/…pdf)。根本原因在于:这些 标签并非存在于服务端返回的初始 HTML 中,而是由 React 框架在浏览器中运行 JavaScript 后动态插入 DOM 的。
这意味着:
- 服务端响应中
内容为空或仅含占位符;
- 所有 PDF 链接均由客户端 JS 异步加载(可能通过 API 请求后渲染);
- 纯静态 HTML 解析器(包括 HtmlDocument.Load())只能看到“骨架”,看不到“血肉”。
✅ 正确解法:使用真实浏览器环境执行 JS,再提取渲染后的 DOM。
推荐方案:F# + Canopy 浏览器自动化
Canopy 是一个轻量、函数式风格的 F# 浏览器自动化库(底层基于 Selenium WebDriver),专为简洁、可读性强的 UI 测试与爬虫场景设计。
立即学习“Java免费学习笔记(深入)”;