当使用Node.js进行网页抓取时,我可以在网页上运行所有的JavaScript吗? (即模拟一个真正的浏览器?)

我正在尝试使用node.js进行一些networking抓取。 使用jsdom ,很容易加载DOM并注入JavaScript。 我想更进一步:运行从网页链接到的所有JavaScript,然后检查生成的DOM, 包括元素的视觉属性(高度,宽度等)。

到目前为止,当我试图用jsdom检查DOM元素的维度时,我得到了NaN

这可能吗?

这让我感到有两个截然不同的挑战:

  1. 在网页上运行所有的JS
  2. 除了DOM之外,还要让Node来模拟窗口/屏幕渲染

另一种方法来问这个问题:是否可以使用node.js作为一个完全无头的浏览器,你可以脚本?

如果这是不可能的,有没有人有什么图书馆我可以用来做这个build议? 我相对语言不可知论者。

       

网上收集的解决方案 "当使用Node.js进行网页抓取时,我可以在网页上运行所有的JavaScript吗? (即模拟一个真正的浏览器?)"

看看PhantomJS。 令人难以置信的使用简单。

http://www.phantomjs.org/

PhantomJS是一个包装和embeddedWebKit的命令行工具。 从字面上看,它像任何其他基于WebKit的网页浏览器一样,只是没有任何东西显示在屏幕上(因此,这个术语是无头的)。 除此之外,PhantomJS可以使用JavaScript API进行控制或编写脚本。

您可以使用:

  • htmlunit(java,jython)
  • PyQtWebKit或pygtk + webkit(python)
  • WWW ::机械化::火狐浏览器(perl)
  • Win32-IEAutomation从MS Internet Explorer(perl)中删除

所有这些解决scheme也可以运行JavaScript。

你会发现从http://stackoverflow.comsearch许多示例代码