javascript - 需要JS处理的html页面如何下载和查询?
问题描述
我经常通过在公共网页上运行某种 XPath/XQuery 来编译非正式数据集。通常 HTML 的结构足够规则,可以很容易地提取有用的信息。
但是今天我遇到了tunefind.com。本网站大量使用了REACTJS 框架,因此页面的大部分结构都是由 Javascript 客户端配置的。这些页面在最初下载时非常基本,并且缺少很多信息。这些页面由一个脚本填充,该脚本在页面底部使用了一堆乱七八糟的 JSON 数据。
我能想到的解决这个问题的唯一方法是使用某种基于 GUI 的 Web 引擎,而不是显示 GUI 部分。但对于我用来收集信息的这些随意的小 CLI 工具来说,这是一项荒谬的工作。
有没有办法在不处理不必要的图形的情况下执行 javascript 预处理?
解决方案
即使您要在没有图形的情况下进行处理,react javascript 也将面向在浏览器上下文中运行,至少它会期望存在一个正常运行的 DOM,应用程序本身也可能需要在您看到之前发生单击/转换一些数据。
那么你最好的选择是在浏览器中加载页面,为了保持简单,有很多很好的浏览器自动化框架为此而设计。
多年来,我使用了相当多的库,包括 phantomJS,最近我从nightmarejs中获得了最大的收益。
它为您运行一个电子浏览器,并为您提供一个有用的承诺 JavaScript API 来控制它,它具有常见的浏览器功能,如点击、跟踪链接等。
您可以将其配置为隐藏浏览器,这对于制作 CLI 工具很有用,但是它有点伪无头模式,并且仍然需要窗口/图形上下文(例如 x 窗口)。
希望这可以帮助。
PS - 如果你完全习惯了 docker,那么让它成为一个正在运行的容器并不难!
推荐阅读
- r - 用data.table中的连续序列替换零碎的数字序列
- javascript - 如果表已经超过一行,如何使用 jquery 向表中添加新行
- c# - 是否可以从 UWP 应用程序启动批处理文件?
- sql - 参加过学位课程每门课程考试的学生
- excel - 如果 rpdate = False 则 Line 不断崩溃 Excel
- python - (P, Q) 和 (R,) 之间的曼哈顿距离
- c# - 从数据库下载的 Pdf 文件,但我无法打开它,“加载 PDF 文档失败。” 错误
- xcode - 如何构建 AWSiOSSDKv2?
- java - 在jlabel中水平显示循环
- javascript - React JS - 将静态数组对象从 DBJSON 切换为对象