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

Javascript NodeJS模拟浏览器以获取/发布请求,javascript,node.js,browser,Javascript,Node.js,Browser,当我四处搜索模拟浏览器时,会有很多混合结果。长话短说,我需要我的节点服务器来执行get和post请求。通常我只会用http包来实现这一点。然而,另一方面也有一些反脚本的东西。即让服务器知道它是真正的浏览器的Java脚本。所以,我需要执行这些 实际上,我在5年前就解决了这个问题,但我的网站当时只使用PHP。解决方案包括使用一个Qt webkit小部件和一个假的X服务器。虽然不优雅,但很容易做到。当时我在Perl、PHP或Python中找到的唯一javascript引擎速度非常慢 由于NodeJS是

当我四处搜索模拟浏览器时,会有很多混合结果。长话短说,我需要我的节点服务器来执行get和post请求。通常我只会用http包来实现这一点。然而,另一方面也有一些反脚本的东西。即让服务器知道它是真正的浏览器的Java脚本。所以,我需要执行这些

实际上,我在5年前就解决了这个问题,但我的网站当时只使用PHP。解决方案包括使用一个Qt webkit小部件和一个假的X服务器。虽然不优雅,但很容易做到。当时我在Perl、PHP或Python中找到的唯一javascript引擎速度非常慢

由于NodeJS是建立在V8之上的,我想有一个简单的方法可以做到这一点。为了记录在案,我希望在接下来的几天里得到一些东西

// 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.
  });   
});
//省略一些回调
http.get('http://remote.site,函数(res){
res.on('end',function(){
//以前累积的数据是由返回的页面
//请求。在标签中找到的任何东西都会
//他被处决了。
});   
});
由于NodeJS是建立在V8之上的,我想有一个简单的方法可以做到这一点

事实上,没有!在浏览器上下文中运行要比简单地执行JavaScript多得多。Node.js中不存在所有DOM内容以及其他内容。Node.js只有JavaScript引擎

如果没有浏览器引擎,您将不知道要加载什么脚本、以什么顺序加载,或者无法提供
文档
窗口
附带的所有内容,这可能是您尝试执行的一部分

解决方案包括使用一个Qt webkit小部件和一个假的X服务器。虽然不优雅,但很容易做到

这实际上是正确的解决方案。。。大部分。幸运的是,目前已有一些工具对此进行了合理的优化

看看幻影。您可以用与Node.js相同的方式编写脚本。(它支持
require()


如果PhantomJS的内置JavaScript环境不包含所需的Node.js组件(例如,用于文件系统或网络访问),则始终可以从Node.js应用程序控制PhantomJS

感谢您的深入回复。我要给幻影一个机会!