phantomJS如何从页面加载后开始的JS脚本中获得答案
phantomJS how to get answer from JS scripts which starting after the page have loaded
我正在寻找这个问题的解决方案。
网站在页面加载后加载了几个JS脚本,运行良好,页面从脚本中获得响应并将其呈现到网站页面。
但脚本返回JSON,我想用JSON得到这个响应,而不是从生成的页面得到。使用脚本的答案比使用选择器和循环从页面获取信息更快。
我尝试使用page.onResourceReceived()
,但它只为我提供分析信息、文件名库存和响应大小;
我该如何获取此响应的正文?
如果我正确理解了您的要求,您可以尝试在网页端使用window.callPhantom将数据作为Object传递,并通过PhantomJS范围内的page.onCallback事件侦听器接收数据。
http://phantomjs.org/api/webpage/handler/on-callback.html
摘录:
当在网页上进行JavaScript窗口.callPhantom调用时,会调用此回调。传递给回调的唯一参数是一个数据对象。
注意:window.callPhantom仍然是一个实验性的API。在不久的将来,它可能会被基于消息的解决方案所取代,该解决方案仍将提供相同的功能。
尽管这种控制反转有很多可能的用例,但到目前为止,主要的用例是防止PhantomJS脚本需要在网页上不断轮询某些变量。
示例:网页(客户端)
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调用的结果而携带回来。
示例:
网页(客户端)
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!';
};
相关文章:
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 当脚本由system.js加载时,如何要求('electron')
- 如何在运行时在angular 2中加载外部js脚本
- 使用JS在服务器上运行PHP脚本
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 如何将模板中的标记脚本移动到.js文件中
- 通过浏览器加载页面时触发加载脚本(js或jQuery)'s”;返回“;作用
- 按顺序加载脚本.js和使用.js
- 在节点中运行 python 脚本.js语法错误
- 未捕获的类型错误:无法读取未定义的属性“indexOf”(观察者脚本.js)
- PHP 无法调用 shell 脚本 (js -> php -> sh)
- 未调用脚本 JS
- D3中的脚本.js使Chrome崩溃
- “不允许加载本地资源”的咖啡脚本.js在Chrome中
- 我可以使用内容脚本js文件以编程方式注入CSS文件吗
- 加载后自动登录网站-用户脚本(JS)
- 自动更新脚本js/svg
- 我如何传递一个变量到我的脚本.js文件
- 如何从aspx文件中的脚本将值设置为脚本(.js)文件中的变量