使用 PhantomJS 进行网页抓取

Tra*_*cey 5 javascript web-scraping phantomjs

有没有一种方法可以像浏览器一样执行网页中的所有 JavaScript,而不需要指定执行哪个函数?在我看到的大多数示例中,这些似乎指定了您想要从抓取的网页执行 JavaScript 的哪一部分。我需要像浏览器一样抓取所有内容并执行所有 JavaScript,并获取最终执行的代码,我们可以使用谷歌检查看到它?

我确信一定有某种方法,但 PhantomJS 的示例代码似乎没有任何解决此问题的示例。

Art*_* B. 4

您不指定 PhantomJS 从页面执行的内容。您使用 PhantomJS 打开页面,并且在 Chrome 或 Firefox 中执行的所有 JavaScript 也会在 PhantomJS 中执行。它是一个没有“头”的完整浏览器。

但也存在一些差异。单击下载链接不会触发下载。PhantomJS 1.x 所基于的渲染引擎已有近 4 年的历史,因此某些页面的渲染方式只是不同,因为 PhantomJS 1.x 可能不支持该功能。(PhantomJS 2 正在开发中,目前处于非官方“alpha”状态)

因此,您需要使用 JavaScript 或 CoffeeScript 编写用户在页面上执行的每个交互的脚本。您不调用页面函数。您可以操作 DOM 元素来模拟用户与浏览器中的页面交互。这需要以如此粗略的方式完成,因为 PhantomJS API 不提供高级的类似用户的功能。如果你想要这些,你必须看看CasperJS,它是建立在 PhantomJS/SlimerJS 之上的。

那里实际上有诸如clickwaitfetchText等功能。