NodeJS模拟浏览器获取/发布请求

当我search模拟浏览器的时候,结果有很多。 长话短说,我需要我的节点服务器来获取和发布请求。 通常我只是用http包做这个。 但是,另一方面有一些反脚本的东西。 即让服务器知道这是一个真正的浏览器的JavaScript。 所以,我需要这些被执行。

我实际上解决了这个问题,就像5年前,但我的网站只是使用PHP然后。 该解决scheme涉及到使用Qt Webkit小部件和假X服务器。 不够优雅,但是做起来很简单。 我在当时发现的Perl,PHP或Python中唯一的JavaScript引擎非常慢。

由于NodeJS是build立在V8上,所以我认为有一个简单的方法来做到这一点。 为了logging,我希望能得到一个以下的东西。

// Omitting some callbacks http.get('http://remote.site', function(res) { res.on('end', function() { // previously accumulated data is the page returned by // the request. Any thing found in a <script> tag would have // been executed. }); }); 

由于NodeJS是build立在V8上,所以我认为有一个简单的方法来做到这一点。

其实不, 在浏览器的上下文中运行更多,而不仅仅是能够执行JavaScript。 所有的DOM东西,什么都不存在Node.js中 Node.js只有JavaScript引擎。

如果没有浏览器引擎,您将无法知道要以何种顺序加载哪些脚本,或者能够提供documentwindow随附的所有内容,这可能是您正在尝试执行的操作的一部分。

该解决scheme涉及到使用Qt Webkit小部件和假X服务器。 不够优雅,但是做起来很简单。

这实际上是正确的解决scheme…主要是。 幸运的是,现在有些工具已经相当不错地进行了优化。

看看PhantomJS。 http://phantomjs.org/你可以像编写Node.js一样编写脚本&#x3002; (它支持require()以及不支持的function),PhantomJS将允许你运行页面,并轻松地将DOM内容拖出。

如果在JavaScript环境中构build的PhantomJS不包含您需要的某些Node.js组件(例如,用于文件系统或networking访问),则始终可以通过Node.js应用程序控制PhantomJS。 https://github.com/amir20/phantomjs-node