从Phantomjs+node.js中调用外部函数

从Phantomjs+node.js中调用外部函数,node.js,phantomjs,Node.js,Phantomjs,我要说实话。我在这里太累了 我需要为我的雇主从一个动态的网站上搜集数据。在页面上显示数据之前,需要进行一些单击和等待。简单的PHP抓取是不行的。所以我发现了这个NodeJS+PhantomJS组合。设置起来很痛苦,但我确实加载了一个站点,运行了一些代码并得到了结果 我编写了一段jQuery,它使用超时循环等待加载一些数据。最终我得到了一个js对象,我想将它写入JSON文件 我面临的问题。 我在PhantomJS.evaluate范围内构建js对象,该范围在无头浏览器中运行,因此不直接在Node.

我要说实话。我在这里太累了

我需要为我的雇主从一个动态的网站上搜集数据。在页面上显示数据之前,需要进行一些单击和等待。简单的PHP抓取是不行的。所以我发现了这个NodeJS+PhantomJS组合。设置起来很痛苦,但我确实加载了一个站点,运行了一些代码并得到了结果

我编写了一段jQuery,它使用超时循环等待加载一些数据。最终我得到了一个js对象,我想将它写入JSON文件

我面临的问题。 我在PhantomJS.evaluate范围内构建js对象,该范围在无头浏览器中运行,因此不直接在Node.js服务器范围内运行。如何将在evaluate中构建的变量发送回服务器,以便将其写入文件

我知道一些示例代码很难看,但它只是为了说明目的。我使用节点phantom simple作为phantom和节点之间的桥梁

var phantom=需要“节点-幻影-简单”, fs=需要“fs”, 网页https://www.imagemedia.com/printing/business-card-printing/' phantom.createfunctionerr,ph{ 返回ph.createPageFunctionError,第页{ return page.openwebPage,functionerr,status{ page.onConsolleMessage=functionmsg{ console.logmsg; }; console.logopened site?,状态; page.evaluatefunction{ setTimeoutfunction{ $'.price select cnt'.eq0.查找'select'.val'1266'。更改 超时环路 函数超时环{ 控制台。日志“循环” setTimeoutfunction{ 如果$'ajax\u price\u tool div'.length!=6{ 超时环路 }否则{ $'.price select cnt'.eq1.查找'select'.val'25' $'.价格选择cnt'.eq2.查找'select'.val'高级卡库存' $'.price select cnt'.eq3.find'select'.val'Standard.change 超时环2 } }, 100 } 函数timeOutLoop2{ 控制台。记录“循环2” setTimeoutfunction{ 如果$'.pricing cost cnt'.text='$0'| |$'.pricing cost cnt'.text=={ 超时环2 }否则{ var price=$”.定价成本cnt'.文本 控制台,logprice } }, 100 } }, 4000 }; }; }; }; 函数writeJSONplsWrite{ var key='file' fs.writeFile'/results/'+key+'.json',plsWrite',utf8',函数{ log“JSON文件另存为”; log'results/'+key+'.json'; };
}是的,这在phantomjs中是一个完全不同的范围,但将其视为一个不同的应用程序,您将如何从本地网页向本地主机服务器发送数据?您可以使用Ajax发送,也可以让phantom打开另一个页面并发送数据。但在我最后的代码中,JS对象最多可以包含800000个字符。希望通过URL发送。有没有办法将此类数据发送到另一台服务器?我觉得这太多了。800000个字符约为0.7mb。post请求可以处理它,但将其添加到正文而不是url。由于您使用NodeJ,所以创建一个最小的服务器并对其进行测试。您甚至需要node.js吗?你知道PhantomJS有自己的脚本系统,对吗?从PhantomJS中刮取一个页面,然后直接将结果生成文件。是的,它在PhantomJS中的作用域完全不同,但将其视为不同的应用程序,如何从本地网页向本地主机服务器发送数据?您可以使用Ajax发送,也可以让phantom打开另一个页面并发送数据。但在我最后的代码中,JS对象最多可以包含800000个字符。希望通过URL发送。有没有办法将此类数据发送到另一台服务器?我觉得这太多了。800000个字符约为0.7mb。post请求可以处理它,但将其添加到正文而不是url。由于您使用NodeJ,所以创建一个最小的服务器并对其进行测试。您甚至需要node.js吗?你知道PhantomJS有自己的脚本系统,对吗?直接从PhantomJS中刮取一个页面,然后将结果保存到文件中。