Javascript phantomJS如何从加载页面后开始的JS脚本中获取答案
我正在寻找解决这个问题的办法 在页面加载之后,站点加载了几个JS脚本,它工作得很好,页面从脚本获得响应并将其呈现到站点页面 但是脚本返回JSON,我希望以JSON格式获得响应,而不是从生成的页面。使用脚本的答案比使用选择器和循环从页面获取信息更快 我尝试使用Javascript phantomJS如何从加载页面后开始的JS脚本中获取答案,javascript,json,response,phantomjs,pageload,Javascript,Json,Response,Phantomjs,Pageload,我正在寻找解决这个问题的办法 在页面加载之后,站点加载了几个JS脚本,它工作得很好,页面从脚本获得响应并将其呈现到站点页面 但是脚本返回JSON,我希望以JSON格式获得响应,而不是从生成的页面。使用脚本的答案比使用选择器和循环从页面获取信息更快 我尝试使用page.onResourceReceived(),但它只能获取分析信息、文件名和响应大小 我怎样才能得到这个回答的主体 如果我正确理解了您的需求,您可以尝试在网页端使用window.callPhantom将数据作为对象传递,并通过Phant
page.onResourceReceived()
,但它只能获取分析信息、文件名和响应大小
我怎样才能得到这个回答的主体 如果我正确理解了您的需求,您可以尝试在网页端使用window.callPhantom将数据作为对象传递,并通过PhantomJS范围内的page.onCallback eventlistener接收数据 摘录: 当在网页上进行JavaScript window.callPhantom调用时,将调用此回调。传递给回调的唯一参数是数据对象 注意:window.callPhantom仍然是一个实验性的API。在不久的将来,它可能会被基于消息的解决方案所取代,该解决方案仍将提供相同的功能 尽管这种控制反转有许多可能的用例,但到目前为止,主要的用例是防止PhantomJS脚本需要不断地轮询网页上的某个变量 例如: 网页(客户端) PhantomJS(服务器端) 另外,请注意,WebPage#onCallback处理程序也可以返回一个数据对象,该数据对象也将作为发起window.callPhantom调用的结果被带回 例如: 网页(客户端) PhantomJS(服务器端)
谢谢你的回答,我不能在服务器端编辑这些页面。我需要从页面启动的脚本中获取JSON格式的数据。@llya,“客户端”javascript在调用一个
page.evaluate
函数时在页面上下文中运行,如page.evaluate(function(){console.log(“这是在页面上下文中运行的”);})代码>
if (typeof window.callPhantom === 'function') {
window.callPhantom({ hello: 'world' });
}
page.onCallback = function(data) {
console.log('CALLBACK: ' + JSON.stringify(data)); // Prints 'CALLBACK: { "hello": "world" }'
};
if (typeof window.callPhantom === 'function') {
var status = window.callPhantom({ secret: 'ghostly' });
alert(status); // Will either print 'Accepted.' or 'DENIED!'
}
page.onCallback = function(data) {
if (data && data.secret && data.secret === 'ghostly') {
return 'Accepted.';
}
return 'DENIED!';
};