我正在为这个问题寻找解决方案。
网站在页面加载后加载了几个JS脚本,它运行良好,页面从脚本获取响应并将其呈现到网站页面。
但脚本返回JSON,我希望在JSON中获得此响应,而不是从生成的页面获取。使用脚本的答案比使用选择器和周期从页面获取信息更快。
我尝试使用page.onResourceReceived()
,但它只获取分析信息,文件名库存和响应大小;
如何获得此回复的正文?
答案 0 :(得分:1)
如果我已正确理解您的要求,您可以尝试在网页端使用window.callPhantom将数据作为Object传递,并通过PhantomJS范围内的page.onCallback eventlistener接收数据。
http://phantomjs.org/api/webpage/handler/on-callback.html
摘录:
当在网页上进行JavaScript window.callPhantom调用时,将调用此回调。传递给回调的唯一参数是数据对象。
注意:window.callPhantom仍然是一个实验性API。在不久的将来,它可能会被基于消息的解决方案所取代,该解决方案仍将提供相同的功能。
虽然这种控制反转有很多可能的用例,但到目前为止主要的用例是防止PhantomJS脚本不断轮询网页上的某些变量。
实施例: WebPage(客户端)
if (typeof window.callPhantom === 'function') {
window.callPhantom({ hello: 'world' });
}
PhantomJS(服务器端)
page.onCallback = function(data) {
console.log('CALLBACK: ' + JSON.stringify(data)); // Prints 'CALLBACK: { "hello": "world" }'
};
另外,请注意,WebPage#onCallback处理程序可以返回一个数据对象,该数据对象也将作为原始window.callPhantom调用的结果返回。
示例:
WebPage(客户端)
if (typeof window.callPhantom === 'function') {
var status = window.callPhantom({ secret: 'ghostly' });
alert(status); // Will either print 'Accepted.' or 'DENIED!'
}
PhantomJS(服务器端)
page.onCallback = function(data) {
if (data && data.secret && data.secret === 'ghostly') {
return 'Accepted.';
}
return 'DENIED!';
};