Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript phantomJS如何从加载页面后开始的JS脚本中获取答案_Javascript_Json_Response_Phantomjs_Pageload - Fatal编程技术网

Javascript phantomJS如何从加载页面后开始的JS脚本中获取答案

Javascript phantomJS如何从加载页面后开始的JS脚本中获取答案,javascript,json,response,phantomjs,pageload,Javascript,Json,Response,Phantomjs,Pageload,我正在寻找解决这个问题的办法 在页面加载之后,站点加载了几个JS脚本,它工作得很好,页面从脚本获得响应并将其呈现到站点页面 但是脚本返回JSON,我希望以JSON格式获得响应,而不是从生成的页面。使用脚本的答案比使用选择器和循环从页面获取信息更快 我尝试使用page.onResourceReceived(),但它只能获取分析信息、文件名和响应大小 我怎样才能得到这个回答的主体 如果我正确理解了您的需求,您可以尝试在网页端使用window.callPhantom将数据作为对象传递,并通过Phant

我正在寻找解决这个问题的办法

在页面加载之后,站点加载了几个JS脚本,它工作得很好,页面从脚本获得响应并将其呈现到站点页面

但是脚本返回JSON,我希望以JSON格式获得响应,而不是从生成的页面。使用脚本的答案比使用选择器和循环从页面获取信息更快

我尝试使用
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!';
};