使用nodejs和phantomjs进行dynamic抓取

首先,我成功安装了PhantomJs和它的npm接口幻象 。 我已经设置了代码来加载我的页面,使用新的语法(这里发布的所有其他问题都是基于旧的代码语法,或者我错过了一些东西)。 这是我试图刮的来源 。

现在,右侧边栏,一个假select靠近“公爵”,另一个是dynamic生成的,我不明白为什么phantomjs不拾起它们。 遵循我的代码:

var sito = "http://bicincitta.tobike.it/"; var sitepage = null; var phInstance = null; var phantom = require('phantom') phantom.create() .then((instance) => { phInstance = instance; return instance.createPage(); }) .then((page) => { sitepage = page; return page.open(sito); }) .then((status) => { console.log(status); return sitepage.property('content'); }) .then((content) => { console.log(content); sitepage.close(); phInstance.exit(); }) .catch((error) => { console.log(error); phInstance.exit(); }) 

我现在正在墙上打我的头。 我应该以某种方式获取网站的脚本并执行它们? 我错过了一条指令吗?

另外,在旁注中; 如果页面被限制在第二个“.then”的内部,我应该如何连接页面的其他方法。

我已经花了上周与PhantomJS工作,试图让它快照与angular度呈现的数据的页面。 我发现的最简单的方法是对任何本地脚本使用page.injectJs('../script.js') ,对任何外部脚本使用page.includeJs('http://jquery.com...') 。 由于Phantom是沙盒,它不会执行它所捕获的页面上的JavaScript,除非你给它的JS执行。 这将允许您截取具有JavaScript呈现数据的页面。

在HTML的底部有无法用幻影parsing的CData脚本。 这是项目正在传播的地方。

 <script type="text/javascript"> //<![CDATA[ Sys.Application.initialize(); Sys.Application.add_init(function() { $create(Telerik.Web.UI.RadAjaxManager, {"_updatePanels":"","ajaxSettings":[],"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"defaultLoadingPanelID":"","enableAJAX":true,"enableHistory":false,"links":[],"styles":[],"uniqueID":"RadAjaxManager1","updatePanelsRenderMode":0}, null, null, $get("RadAjaxManager1")); }); Sys.Application.add_init(function() { $create(Telerik.Web.UI.RadAjaxPanel, {"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"enableAJAX":true,"enableHistory":false,"links":[],"loadingPanelID":"","styles":[],"uniqueID":"ajCheckLoginUser"}, null, null, $get("ajCheckLoginUser")); }); Sys.Application.add_init(function() { $create(Telerik.Web.UI.RadAjaxPanel, {"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"enableAJAX":true,"enableHistory":false,"links":[],"loadingPanelID":"","styles":[],"uniqueID":"ajCheckLoginAdmin"}, null, null, $get("ajCheckLoginAdmin")); }); Sys.Application.add_init(function() { $create(Telerik.Web.UI.RadAjaxPanel, {"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"enableAJAX":true,"enableHistory":false,"links":[],"loadingPanelID":"","styles":[],"uniqueID":"ajLogoutUser"}, null, null, $get("ajLogoutUser")); }); Sys.Application.add_init(function() { $create(Telerik.Web.UI.RadWindow, {"_dockMode":false,"behaviors":0,"clientStateFieldID":"radPortal_ClientState","destroyOnClose":true,"formID":"form1","height":"180px","iconUrl":"","left":"","minimizeIconUrl":"","modal":true,"name":"radPortal","reloadOnShow":true,"showContentDuringLoad":false,"skin":"Office2007","top":"","visibleStatusbar":false,"width":"450px"}, {"close":OnClientClosePortal}, null, $get("radPortal")); }); Sys.Application.add_init(function() { $create(Telerik.Web.UI.RadWindowManager, {"behaviors":4,"clientStateFieldID":"windowManagerPortal_ClientState","destroyOnClose":true,"formID":"form1","iconUrl":"","left":"","minimizeIconUrl":"","modal":true,"name":"windowManagerPortal","reloadOnShow":true,"showContentDuringLoad":false,"skin":"Office2007","top":"","visibleStatusbar":false,"windowControls":"['radPortal']"}, null, {"child":"radPortal"}, $get("windowManagerPortal")); }); //]]> </script> 

只要您离开与本网站服务器的通信,这些项目也将被销毁。 有办法解决这个问题,但我认为你最好还是尝试别的。 我用npm cheerio加载CDATA html