当我搜索模拟浏览器时,有很多混合的结果。长话短说,我需要我的节点服务器才能获得&发布请求。通常我只是用http包来做这件事。但是,另一方面有一些反脚本的东西。即javascripts,让服务器知道它是一个真正的浏览器。所以,我需要执行这些。
我实际上像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.
});
});
答案 0 :(得分:2)
由于NodeJS是基于V8构建的,我认为有一种简单的方法可以做到这一点。
实际上,不!在浏览器的上下文中运行除了能够执行JavaScript之外还有很多。所有的DOM东西以及Node.js中没有的东西。 Node.js只有JavaScript引擎。
如果没有浏览器引擎,您将不知道要加载哪些脚本,以什么顺序加载,或者能够提供document
或window
附带的所有内容,这可能是必需的部分你想要做什么。
解决方案涉及使用Qt webkit小部件和假X服务器。不优雅,但很容易做到。
这实际上是正确的解决方案......主要是。幸运的是,现在有一些工具可以很好地优化它。
看看PhantomJS。 http://phantomjs.org/您可以像编写Node.js一样编写脚本。 (它支持require()
什么不支持,以及大多数你想要工作的NPM包。)PhantomJS将允许你运行页面并轻松地拉出DOM内容。
如果在JavaScript环境中构建的PhantomJS不包含您需要的某些Node.js组件(例如,对于文件系统或网络访问),您始终可以从Node.js应用程序控制PhantomJS。 https://github.com/amir20/phantomjs-node