[英]phantomJS how to get answer from JS scripts which starting after the page have loaded
我正在尋找該問題的解決方案。
該網站在頁面加載后加載了幾個JS腳本,它運行良好,該頁面從腳本中獲取響應並將其呈現到網站頁面。
但是腳本返回JSON,我想以JSON而不是從生成的頁面中獲得此響應。 使用腳本的答案比使用選擇器和循環從頁面獲取信息要快得多。
我嘗試使用page.onResourceReceived()
但它只能獲取分析信息,文件名存儲量和響應大小;
如何獲得此回復的正文?
如果我正確理解了您的要求,則可以嘗試在網頁末尾使用window.callPhantom將數據作為對象傳遞,並通過PhantomJS范圍內的page.onCallback事件偵聽器接收數據。
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調用的結果而帶回。
例:
網頁(客戶端)
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!';
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.