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引擎。
如果没有浏览器引擎,您将无法知道要以何种顺序加载哪些脚本,或者能够提供document
或window
随附的所有内容,这可能是您正在尝试执行的操作的一部分。
该解决scheme涉及到使用Qt Webkit小部件和假X服务器。 不够优雅,但是做起来很简单。
这实际上是正确的解决scheme…主要是。 幸运的是,现在有些工具已经相当不错地进行了优化。
看看PhantomJS。 http://phantomjs.org/你可以像编写Node.js一样编写脚本。 (它支持require()
以及不支持的function),PhantomJS将允许你运行页面,并轻松地将DOM内容拖出。
如果在JavaScript环境中构build的PhantomJS不包含您需要的某些Node.js组件(例如,用于文件系统或networking访问),则始终可以通过Node.js应用程序控制PhantomJS。 https://github.com/amir20/phantomjs-node